4. Jaeger 追踪基础:Span、Trace、Context Propagation 核心概念

在分布式系统中,一个用户请求往往跨越多个微服务、数据库、消息队列和第三方 API。Jaeger 作为 CNCF 毕业的分布式追踪系统,通过三个核心概念——Span、Trace 和 Context Propagation——将一次请求的完整路径还原为可观测的时序图谱。本节将逐一拆解这三个概念,并建立它们与变更冻结闸口可靠性评审的映射关系。

4.1 Span:追踪的最小工作单元

Span 是 Jaeger 追踪的基本构建块,代表一个服务中发生的单一操作,例如一次 HTTP 请求处理、一次数据库查询或一个消息发布。每个 Span 包含以下关键属性:

属性 说明 在变更评审中的映射
Operation Name 操作名称,如 POST /api/order 评审步骤名称,如“检查配置漂移”
Span ID 全局唯一标识符 评审记录的唯一 ID
Parent Span ID 父 Span 的 ID,用于构建层级关系 父评审步骤的引用
Start Time / Duration 操作的开始时间和持续时长 评审步骤的开始时间和耗时
Tags 键值对元数据,如 http.status_code=200 评审标签,如 闸口类型=配置变更
Logs 时间戳标记的事件,如异常堆栈 评审过程中的告警或异常事件
关键认知: 在变更冻结闸口评审中,每个评审步骤(如“合规检查”、“依赖健康检查”、“回滚预案确认”)都可以建模为一个 Span。Span 的 Duration 直接反映该步骤的延迟,Tags 可用于标记评审结果(通过/拒绝/需人工介入)。

4.2 Trace:一次请求的完整生命周期

Trace 是由一组具有相同 Trace ID 的 Span 构成的树状结构,完整描述一次请求从入口到所有下游服务的全路径。Trace 的核心价值在于:

  • 端到端延迟分析: 从 Trace 根 Span 的总耗时可以判断请求是否满足 SLO。
  • 瓶颈定位: 通过比较各子 Span 的耗时,快速找到最慢的服务或操作。
  • 错误传播链: 当某个 Span 标记为错误时,其父 Span 和子 Span 的上下文帮助定位根因。

以下 SVG 展示了一个典型的 Trace 结构,包含三个微服务和一次数据库调用:

Trace 结构示例:用户下单请求 Trace 结构示例:用户下单请求 (Trace ID: abc123) T0 T0+500ms API Gateway: POST /api/order 480ms Order Service: createOrder() 350ms Payment Service: charge() 280ms MySQL: INSERT INTO orders 120ms 根 Span 总耗时 = 480ms 瓶颈:Payment Service (280ms)
评审场景映射: 一次变更冻结闸口评审本身就是一个 Trace。根 Span 是“评审入口”,子 Span 包括“合规检查”、“依赖健康检查”、“回滚预案确认”、“审批人通知”等。通过 Trace 的总耗时可以评估评审流程的效率,子 Span 的耗时则暴露哪个环节最慢。

4.3 Context Propagation:跨服务的上下文传递

Context Propagation(上下文传播)是分布式追踪的“神经系统”。它确保当请求从一个服务传递到下一个服务时,Trace ID 和 Span ID 等信息能够被正确携带,从而将分散的 Span 关联到同一个 Trace 中。

Jaeger 通过 W3C Trace Context 标准(traceparent 和 tracestate HTTP 头)实现上下文传播。以下是一个典型的传播流程:

  1. 注入(Inject): 上游服务在发出 HTTP 请求前,将当前 Span 的上下文序列化到请求头中。
  2. 提取(Extract): 下游服务收到请求后,从请求头中解析出 Trace ID 和 Parent Span ID。
  3. 创建子 Span: 下游服务基于提取的上下文创建新的子 Span,并设置正确的 Parent Span ID。

以下 SVG 展示了 Context Propagation 在三个服务间的传递过程:

Context Propagation 跨服务传递流程 Context Propagation 跨服务传递流程 服务 A API Gateway Span: root 服务 B Order Service Span: child-of-A 服务 C Payment Service Span: child-of-B HTTP 请求头: traceparent: 00-abc123...-def456...-01 Inject Inject Extract
常见陷阱: 在变更冻结闸口评审中,如果评审流程涉及多个系统(如 CMDB、监控系统、审批系统),但上下文传播未正确实现,会导致 Trace 断裂——评审的根 Span 无法关联到下游系统的 Span。这会使端到端延迟分析失效,无法定位评审流程中的瓶颈。务必确保所有参与评审的系统都支持 W3C Trace Context 标准。

4.4 三个核心概念的关系总结

概念 类比 在变更评审中的角色
Span 电影中的一个镜头 单个评审步骤(如“检查配置漂移”)
Trace 整部电影 一次完整的变更冻结闸口评审流程
Context Propagation 镜头之间的剪辑和转场 评审步骤之间的上下文传递(如评审 ID、审批状态)
实践要点: 在 Jaeger UI 中,通过 Trace 视图可以直观地看到每个评审步骤的耗时和状态。如果某个步骤的 Span 显示为红色(错误),可以立即点击查看 Tags 和 Logs 中的错误详情。结合 Context Propagation,即使评审流程跨多个微服务,也能保持完整的调用链。