【发布时间】:2020-03-28 04:28:48
【问题描述】:
我一直在深入研究 Google Cloud Run 上的 Stackdriver Trace 集成。我可以让它与代理一起工作,但我被一些问题所困扰。
鉴于此
- Stackdriver 代理将跟踪汇总到一个小缓冲区中并定期发送。
- 当 Cloud Run 服务未处理请求时,CPU 访问受到限制。
- Cloud Run 服务没有关闭挂钩;您无法在关闭之前清除缓冲区:容器只会获得SIGKILL。这是您无法从应用程序中捕获的信号。
- 运行在请求-响应周期之外发送信息的后台进程似乎违反了Knative Container Runtime contract
- 日志数据的集合是documented,不需要我运行代理,但是遥测没有这样的解决方案。
- 我发现 one report 有人使用基于代理的方法在 Cloud Run 上丢失了踪迹
Google 是如何做到的
我查看了 Cloud Endpoints ESP 的源代码(Cloud Run 集成处于测试阶段),看看他们是否以不同的方式解决它,但使用了相同的模式:有一个带有跟踪的缓冲区( 1s) 并定期清除。
问题
虽然我的跟踪集成似乎在我的测试设置中工作,但当我在生产环境中运行它时,我担心不完整和丢失的跟踪。
这是假设问题还是实际问题?
看起来解决此问题的正确方法是将遥测数据写入日志,而不是使用代理进程。 Stackdriver Trace 支持吗?
【问题讨论】:
-
写得真好!!!好的!谢谢你。
-
似乎有一个功能要求 Cloud Run 在 SIGKILL 之前发送一个 SIGTERM:issuetracker.google.com/issues/131849051
-
该功能实际上正在推出。
标签: google-cloud-platform stackdriver google-cloud-run