← 中文资源

简体中文版本

用 OpenTelemetry 接入分布式追踪

用 OpenTelemetry SDK 自动埋点 HTTP 与数据库调用,配置批量导出器到 collector,验证一条 trace 跨越三个服务。

阅读英文原文

一条 trace,三个服务

SDK 在应用启动前补丁 http 与 pg,每次出站调用都成为入站请求 span 的子 span。trace context 经网络传播,网关、订单、支付 span 共享同一 trace id。

import { NodeSDK } from '@opentelemetry/sdk-node';
new NodeSDK({
  serviceName: 'orders',
  traceExporter: new OTLPTraceExporter({ url: 'http://collector:4318/v1/traces' }),
  instrumentations: [getNodeAutoInstrumentations()],
}).start();

先于应用加载

tracing 文件必须在应用代码前加载,补丁才能在任何库 import 前就位。用 –require 或 NODE_OPTIONS 环境变量优先加载。

node --require ./tracing.js dist/index.js

预期结果

经网关的请求在 collector 中产生一条 trace,含三个服务的 span 并由 parent id 串联。最慢一跳是耗时最长的 span,失败精确显示哪个服务抛错。自动埋点覆盖主流库但不覆盖自定义 RPC,后者需手工 span;高峰期高采样率可能压垮 collector,应做头或尾采样控制流量。