谷歌云跟踪自定义跟踪只工作几次

Posted

技术标签:

【中文标题】谷歌云跟踪自定义跟踪只工作几次【英文标题】:Google Cloud trace Custom trace only works a few times 【发布时间】:2019-03-30 00:59:23 【问题描述】:

我已经使用 nodejs 和 express 激活了 Google Cloud Tracer,在自动模式下运行良好,正确注册了对 api 的调用。

我尝试手动创建跟踪,以了解中间步骤的执行时间。

controller (req, res) 

    tracer.runInRootSpan( name: 'dnd-task' , (rootSpan) => 

      //promise
      myPromise(rootSpan)
        .then((data) => 
          rootSpan.endSpan()
          res.ok(data)
        )
        .catch((err)=>
          rootSpan.endSpan()
          res.send(err)
        )
    )


但 Google Cloud Trace 仅列出 1 或 2 个调用,而自动生成的调用显示数千个 API 调用。

我还阅读了文档以尝试获取 express.js 中间件的上下文,但我没有找到获取上下文的方法。

来自:google-cloud-trace

每当收到传入请求时,都会自动启动根跨度(换句话说,所有中间件都已在根跨度内运行)。

更新基于@kjin评论:

在你只需要的快递控制器中

tracer.createChildSpan(name: 'name')

【问题讨论】:

【参考方案1】:

如果您启用了自动跟踪并且使用自定义跨度 API 在请求侦听器中生成根跨度,那么根跨度将被忽略,因为它是在预先存在的根跨度内创建的 (为此请求自动启动的那个)。这是我根据此处提供的代码的猜测,但您应该能够通过创建子跨度来完成您想要的。 (自定义根跨度适用于请求生命周期之外发生的工作,例如定期工作。)

Re:Express.js 中间件上下文——我不太清楚你的意思,但是跟踪代理不会在跟踪上下文中存储任何请求侦听器参数。

另外说明 - 如果您将问题直接报告到您链接到的 GitHub 存储库,您将获得更快的响应时间。

希望这会有所帮助!

【讨论】:

非常感谢您的回复。我还有一点疑问,如果我没有“rootSpan”请求对象,我该如何为那个跟踪添加标签? @Cristyan(和未来的读者)——对于超级迟到的回复感到抱歉,我不经常检查 SO ? 如果你想给根跨度添加标签,你可以获得当前根跨越tracer.getCurrentRootSpan()。有关 API 定义,请参阅 github.com/googleapis/cloud-trace-nodejs/blob/v3.5.2/src/…。

以上是关于谷歌云跟踪自定义跟踪只工作几次的主要内容,如果未能解决你的问题,请参考以下文章

谷歌云网络应用不显示自定义 Python 代码

使用带有自定义域的私有谷歌云存储

RPi 上的 NodeJs Lan 应用程序到谷歌云平台到自定义域

谷歌云项目:使用自定义界面创建

Git:仅列出“未跟踪”文件(还有自定义命令)

自定义 JVM 语言:创建可行的堆栈跟踪?