Google cloud platform Stackdriver跟踪与谷歌云运行
我一直在潜入Google Cloud Run上的Stackdriver跟踪集成。我可以和经纪人一起工作,但有几个问题困扰着我 鉴于此Google cloud platform Stackdriver跟踪与谷歌云运行,google-cloud-platform,stackdriver,google-cloud-run,Google Cloud Platform,Stackdriver,Google Cloud Run,我一直在潜入Google Cloud Run上的Stackdriver跟踪集成。我可以和经纪人一起工作,但有几个问题困扰着我 鉴于此 Stackdriver代理在一个小缓冲区中聚合跟踪,并定期发送它们 当云运行服务未处理请求时,CPU访问受到限制 云运行服务没有关闭挂钩;您无法在关闭之前清除缓冲区:容器只会收到一条消息。这是应用程序无法捕捉到的信号 运行在请求-响应周期之外发送信息的后台进程似乎违反了 日志数据的收集是,也不需要我运行代理,但是没有这样的遥测解决方案 我发现有人使用基于代理的方
- Stackdriver代理在一个小缓冲区中聚合跟踪,并定期发送它们李>
- 当云运行服务未处理请求时,CPU访问受到限制李>
- 云运行服务没有关闭挂钩;您无法在关闭之前清除缓冲区:容器只会收到一条消息。这是应用程序无法捕捉到的信号
- 运行在请求-响应周期之外发送信息的后台进程似乎违反了
- 日志数据的收集是,也不需要我运行代理,但是没有这样的遥测解决方案
- 我发现有人使用基于代理的方法在云上运行时遇到丢失的痕迹
- 这是一个假设的问题还是一个真实的问题
- 看来正确的方法是将遥测数据写入日志,而不是使用代理进程。Stackdriver跟踪是否支持这一点
- 你说得对。这是一个相当值得关注的问题,因为大多数跟踪库倾向于在后台采样/上载跟踪范围
由于(1)当容器未处理任何请求时,您的CPU几乎为零;(2)容器实例可能随时因不活动而被终止,因此您无法可靠地上载应用程序中收集的跟踪范围。正如您所说,它有时可能会工作,因为我们没有完全停止CPU,但它不会总是工作
看起来有些Stackdriver(和/或OpenTelemetry f.k.a.OpenCensus)库允许您控制推送跟踪跨度的生命周期
例如,此OpenCensus Stackdriver exporter的Go软件包有一个
Flush()
方法,您可以在完成请求之前调用该方法,而不是依赖运行时定期上载跟踪范围:
我假设其他语言中的其他跟踪库也公开类似的Flush()方法,如果没有,请在注释中告诉我,这将是对这些库的有效功能请求
这是一个假设的问题还是一个真实的问题
如果您认为一个云运行服务接收到一个请求,那么这肯定是个问题,因为在容器实例的CPU被节流之前,库将没有时间刷新数据。 但是,在实际使用案例中:
- 云运行服务通常连续或频繁地接收请求,这意味着其容器实例将要么持续拥有CPU,要么不时拥有可用的CPU李>
- 删除跟踪是可以的:如果由于实例被拒绝而没有收集某些跟踪,则很可能在此之前您已经收集了足够多的样本集。此外,您可能只对聚合报告感兴趣,在这种情况下,收集单个跟踪并不重要
否,Stackdriver跟踪从发送到其API的跨度中获取数据。请注意,要向Stackdriver Trace发送数据,您可以使用OpenCENS和OpenTelemetry等库,任何时候都不推荐使用专有的Stackdriver跟踪库。这是一个写得很好的问题!!!美好的谢谢。相关:似乎有一个功能要求Cloud Run在SIGKILL之前发送一个SIGTERM:该功能实际上现在正在推出。我认为在使用Cloud Run进行批处理/cron作业(比如,每天一次,或每2小时一次)的用例中,这一假设就失效了。您收到一个请求,将采样率设置为100%,但在请求完成后,您很可能会错过每天一次的跟踪数据。当前node.js跟踪代理库没有刷新方法:(我认为这将是对他们的GitHub存储库的一个有效问题请求。对于我们这些在谷歌工作的人来说,这也是一个有效的用例,可以用来调查支持这一点的原因。感谢您提出。