← 中文资源

简体中文版本

为 Node.js 服务添加 OpenTelemetry 追踪

在应用加载前初始化 OpenTelemetry SDK,为 HTTP 和数据库调用埋点,导出 trace,并干净关闭。

阅读英文原文

在应用之前初始化

追踪必须在被埋点的库导入之前启动。在 Node.js 中用 --import 先导入追踪模块,或在入口最顶部 require。如果 SDK 在 HTTP 客户端加载后才启动,会丢失部分 span 和上下文传播。

node --import ./tracing.js server.js

传播与属性

入站 W3C traceparent 头创建父上下文,出站 HTTP 和数据库调用应延续同一 trace。添加有助于诊断的属性,如路由、依赖和状态,但绝不包含授权头或原始用户输入。对高流量采样,同时保留错误和慢 trace。

关闭时刷新

导出器会缓冲 span。收到 SIGTERM 时,停止接收流量、完成进行中工作,并在退出前调用 sdk.shutdown()。不刷新会丢失崩溃或发布前的最后一批 trace,而那往往最有用。

验证 trace

预期结果:一个请求产生包含 gateway、service 和 database span 的单条 trace,子 span 共享入站 trace id。用已知 traceparent 发送请求,在后端按该 id 查询,确认出站调用作为子 span 出现。trace 在第一个服务就中断,说明上下文传播或 SDK 初始化有误。