如何确定 Node.js 发送 HTTP 响应正文所花费的时间?

Mar*_*per 7 instrumentation apm node.js express datadog

我当前的设置涉及使用 Express.js 的 Node.js Web 应用程序。
我正在使用 DataDog 的 dd-tracer 来测量 Node.js 花费在特定方法调用上的时间,作为我的 APM 解决方案的一部分。

我想知道是否可以测量传入 HTTP 请求忙于将数据作为 HTTP 响应正文发送回客户端的时间部分。

尝试进行此类检测时是否存在任何陷阱或不准确之处?
有谁知道为什么默认情况下 APM 客户端库不测量这一点?

roc*_*dev 4

我想知道是否可以测量传入 HTTP 请求忙于将数据作为 HTTP 响应正文发送回客户端的时间部分。

您可以手动包装调用res.write以在请求跟踪中创建额外的范围。仅当请求中对该方法的调用不多时,我才会建议这样做,否则我会建议仅捕获一个指标。

或者,分析可能是一个选项,它可以为您提供更多有关调用中到底花费时间的信息res.write

我寻找一种“全局”解决方案,可以将其集成到 Nest.js 应用程序中,而无需手动检测对 res.write 的每次调用。

如上所述,您可以res.write直接在每个请求的开头直接换行。使用跟踪器,可以这样实现:

res.write = tracer.wrap('http.write', res.write)
Run Code Online (Sandbox Code Playgroud)

这应该在任何其他中间件有机会写入数据之前完成。

中间件示例:

app.use((req, res) => {
  res.write = tracer.wrap('http.write', res.write)
})
Run Code Online (Sandbox Code Playgroud)

尝试进行此类仪器操作时是否存在任何陷阱或不准确之处?

我想不出什么大事。

有谁知道为什么默认情况下 APM 客户端库不对此进行测量?

开箱即用的主要问题是,res.write如果调用太多,为每个调用创建一个跨度可能会很昂贵。如果您认为开箱即用的选项是有意义的,我们绝对可以考虑添加它。

希望这可以帮助!