Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform Stackdriver跟踪与谷歌云运行_Google Cloud Platform_Stackdriver_Google Cloud Run - Fatal编程技术网

Google cloud platform 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访问受到限制 云运行服务没有关闭挂钩;您无法在关闭之前清除缓冲区:容器只会收到一条消息。这是应用程序无法捕捉到的信号 运行在请求-响应周期之外发送信息的后台进程似乎违反了 日志数据的收集是,也不需要我运行代理,但是没有这样的遥测解决方案 我发现有人使用基于代理的方

我一直在潜入Google Cloud Run上的Stackdriver跟踪集成。我可以和经纪人一起工作,但有几个问题困扰着我

鉴于此
  • Stackdriver代理在一个小缓冲区中聚合跟踪,并定期发送它们
  • 当云运行服务未处理请求时,CPU访问受到限制
  • 云运行服务没有关闭挂钩;您无法在关闭之前清除缓冲区:容器只会收到一条消息。这是应用程序无法捕捉到的信号
  • 运行在请求-响应周期之外发送信息的后台进程似乎违反了
  • 日志数据的收集是,也不需要我运行代理,但是没有这样的遥测解决方案
  • 我发现有人使用基于代理的方法在云上运行时遇到丢失的痕迹
谷歌是如何做到的 我查看了云端点ESP的源代码(云运行集成处于测试阶段),看看它们是否以不同的方式解决了这个问题,但使用了相同的模式:有一个带跟踪(1s)的缓冲区,并且会定期清除

问题: 虽然我的跟踪集成似乎在我的测试设置中起作用,但我担心在生产环境中运行时会出现不完整和丢失的跟踪

  • 这是一个假设的问题还是一个真实的问题

  • 看来正确的方法是将遥测数据写入日志,而不是使用代理进程。Stackdriver跟踪是否支持这一点


    • 你说得对。这是一个相当值得关注的问题,因为大多数跟踪库倾向于在后台采样/上载跟踪范围

      由于(1)当容器未处理任何请求时,您的CPU几乎为零;(2)容器实例可能随时因不活动而被终止,因此您无法可靠地上载应用程序中收集的跟踪范围。正如您所说,它有时可能会工作,因为我们没有完全停止CPU,但它不会总是工作

      看起来有些Stackdriver(和/或OpenTelemetry f.k.a.OpenCensus)库允许您控制推送跟踪跨度的生命周期

      例如,此OpenCensus Stackdriver exporter的Go软件包有一个
      Flush()
      方法,您可以在完成请求之前调用该方法,而不是依赖运行时定期上载跟踪范围:

      我假设其他语言中的其他跟踪库也公开类似的Flush()方法,如果没有,请在注释中告诉我,这将是对这些库的有效功能请求

      这是一个假设的问题还是一个真实的问题

      如果您认为一个云运行服务接收到一个请求,那么这肯定是个问题,因为在容器实例的CPU被节流之前,库将没有时间刷新数据。 但是,在实际使用案例中:

      • 云运行服务通常连续或频繁地接收请求,这意味着其容器实例将要么持续拥有CPU,要么不时拥有可用的CPU
      • 删除跟踪是可以的:如果由于实例被拒绝而没有收集某些跟踪,则很可能在此之前您已经收集了足够多的样本集。此外,您可能只对聚合报告感兴趣,在这种情况下,收集单个跟踪并不重要
      请注意,跟踪库通常自己对要跟踪的请求进行采样,它们很少跟踪100%的请求

      看来正确的方法是将遥测数据写入日志,而不是使用代理进程。Stackdriver跟踪是否支持这一点


      否,Stackdriver跟踪从发送到其API的跨度中获取数据。请注意,要向Stackdriver Trace发送数据,您可以使用OpenCENS和OpenTelemetry等库,任何时候都不推荐使用专有的Stackdriver跟踪库。

      这是一个写得很好的问题!!!美好的谢谢。相关:似乎有一个功能要求Cloud Run在SIGKILL之前发送一个SIGTERM:该功能实际上现在正在推出。我认为在使用Cloud Run进行批处理/cron作业(比如,每天一次,或每2小时一次)的用例中,这一假设就失效了。您收到一个请求,将采样率设置为100%,但在请求完成后,您很可能会错过每天一次的跟踪数据。当前node.js跟踪代理库没有刷新方法:(我认为这将是对他们的GitHub存储库的一个有效问题请求。对于我们这些在谷歌工作的人来说,这也是一个有效的用例,可以用来调查支持这一点的原因。感谢您提出。