用途:OpenTelemetry 是厂商中立的可观测性框架,用于生成、采集和导出 traces(追踪)、metrics(指标)与 logs(日志)。适用于使用 OpenTelemetry 构建或询问相关问题的场景。
主要能力(JS 版):
- 自动埋点:@opentelemetry/auto-instrumentations-node 可自动为 Express、HTTP、gRPC、数据库客户端等常见框架与库埋点,无需改代码,常见库无需手动创建 span。
- 资源探测:通过 OTEL_NODE_RESOURCE_DETECTORS 内置云厂商、容器与进程信息的探测器,无需自定义资源标签中间件。
- 上下文传播:使用 tracer.startActiveSpan 时,W3C TraceContext 与 Baggage 会在异步边界自动传播,无需手动传递上下文。
必要用法与注意事项:
- 埋点必须先于应用代码加载。ESM 项目使用 node --import ./instrumentation.mjs;CommonJS 项目或零代码包(@opentelemetry/auto-instrumentations-node)使用 node --require @opentelemetry/auto-instrumentations-node/register(或 --require ./instrumentation.js)。若在应用代码之后加载埋点,会静默产生 no-op span 且不抛错。
- 生产环境应使用 BatchSpanProcessor,不要用 SimpleSpanProcessor。后者在每个 span 结束时同步导出,会给每个请求增加延迟;SimpleSpanProcessor 仅适合调试。
- SDK 初始化失败是静默的:初始化过晚或失败时,OpenTelemetry 会返回 no-op 实现且不报错。部署前务必确认导出器中能看到 span。
- 始终调用 span.end():未结束的 span 不会被导出。应将 span 主体包在 try/finally 中,保证异常时也会调用 span.end()。
- 生产环境应降低默认采样率:入门默认捕获 100% 追踪。上线前设置 OTEL_TRACES_SAMPLER=parentbased_traceidratio 与 OTEL_TRACES_SAMPLER_ARG=0.1(或等效 SDK 配置),以避免采集器与后端成本过高。
- 资料强调:训练数据中的 OpenTelemetry 内容不可靠,API 随版本变化,记忆中的模式可能错误或已废弃。写任何代码前必须用 WebFetch 读取实时文档:WebFetch("https://opentelemetry.io/docs/languages/js/"),不要假设包名或初始化模式,需对照当前文档核实。
限制:资料未提供具体支持的语言范围细节、版本号、收费或价格信息,以及除上述注意事项外的平台与效果说明,这些暂未提供。