OpenTelemetry 链路追踪:生产落地的采样与上下文

统一 Trace Context,设计采样策略并控制属性基数,让链路追踪真正服务故障定位。

文章目录 · 4 节

链路追踪的核心不是画出漂亮拓扑,而是让一次用户请求跨越服务、队列和异步任务后仍可关联。

先统一上下文传播

所有入口和客户端采用 W3C Trace Context。消息队列需要在消息属性中传播 trace 信息,并避免消费者错误复用上一个上下文。

设计属性边界

Span 属性保留服务名、路由模板、状态码、依赖和稳定业务维度。请求体、用户隐私和无界 ID 不应直接写入可检索属性。

组合采样策略

头部采样成本低,但可能漏掉罕见错误;尾部采样可以保留错误和慢请求,但 Collector 需要缓存完整 trace。常见方案是低比例基础采样,加错误、慢请求和特定租户保留规则。

processors:
  tail_sampling:
    decision_wait: 10s
    policies:
      - name: errors
        type: status_code
        status_code: {status_codes: [ERROR]}

验证闭环

从告警跳转到 trace,再从 trace 跳到对应日志和指标。若值班人员仍需手工复制 ID,说明上下文集成没有完成。