1

我已经使用 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 中间件的上下文,但我没有找到获取上下文的方法。

来自:谷歌云跟踪

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

更新基于@kjin评论:

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

tracer.createChildSpan({name: 'name'})

4

1 回答 1

2

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

回复:Express.js 中间件上下文——我不完全确定你的意思,但是跟踪代理不会在跟踪上下文中存储任何请求侦听器参数。

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

希望这可以帮助!

于 2018-11-05T17:59:30.247 回答