2. OpenTelemetry 核心概念:Trace、Span、Metrics、Logs、Context Propagation

在构建值班机器人故障诊断体系之前,必须理解 OpenTelemetry 的五大核心概念。它们构成了可观测性的数据基础,也是事件触发与根因分析的原始素材来源。本节将逐一拆解这些概念,并展示它们如何在故障诊断链路中协同工作。

2.1 核心概念全景图

OpenTelemetry 将可观测性数据归纳为三大信号(Traces、Metrics、Logs),并通过 Context Propagation 将它们关联到同一个请求上下文中。下图展示了这四类数据与传播机制的关系:

OpenTelemetry 核心概念全景 Context Propagation 上下文传播 Trace 端到端请求追踪 Span 追踪中的工作单元 Metrics 聚合指标数据 Logs 结构化日志记录 Context Propagation 将 Trace、Span、Metrics、Logs 关联到同一个请求上下文

2.2 Trace(追踪)

Trace 记录一个请求从入口到出口的完整路径,跨越多个服务、进程和网络边界。在故障诊断中,Trace 是还原请求全貌的核心工具。

属性说明故障诊断价值
Trace ID全局唯一标识,贯穿整个请求生命周期关联所有相关 Span 和日志
Span 集合由多个 Span 组成的有向无环图展示请求经过的每个服务节点
时间范围从请求开始到结束的完整时间窗口判断整体延迟是否异常
服务拓扑Span 之间的父子关系构成服务调用链定位故障发生在哪个环节
值班场景提示: 当告警触发时,值班机器人应自动提取异常 Trace ID,并关联该 Trace 下的所有 Span,快速定位故障服务。

2.3 Span(跨度)

Span 是 Trace 中的最小工作单元,代表一个操作或一个步骤。每个 Span 包含操作名称、开始时间、结束时间、状态和属性。

Span 的关键属性:

  • Span ID:当前 Span 的唯一标识
  • Parent Span ID:父 Span 的 ID,用于构建调用链
  • Span Kind:Client、Server、Internal、Producer、Consumer
  • Status:Unset、Ok、Error(含错误描述)
  • Attributes:键值对,记录业务或技术上下文
  • Events:Span 生命周期内的关键事件
// Span 创建示例(伪代码)
span = tracer.startSpan("process_order")
span.setAttribute("order.id", "ORD-12345")
span.setAttribute("payment.amount", 299.99)
// ... 执行业务逻辑 ...
span.setStatus(StatusCode.ERROR, "支付超时")
span.end()

2.4 Metrics(指标)

Metrics 是聚合后的数值数据,用于衡量系统在时间维度上的行为。与 Trace 的请求级粒度不同,Metrics 关注的是整体趋势和阈值。

指标类型说明典型示例
Counter单调递增计数器请求总数、错误总数
Histogram数值分布统计请求延迟分布、响应大小分布
Gauge可上下波动的瞬时值CPU 使用率、内存占用
UpDownCounter可增减的计数器活跃连接数、队列深度
故障诊断关联: 值班机器人通常基于 Metrics 触发告警(如 P99 延迟 > 500ms),然后自动拉取对应时间窗口的 Trace 和 Logs 进行根因分析。

2.5 Logs(日志)

Logs 是带有时间戳的结构化或非结构化文本记录。OpenTelemetry 的 Logs 信号与 Trace 深度集成,每条日志可以关联到特定的 Trace ID 和 Span ID。

结构化日志推荐格式:

{
  "timestamp": "2025-03-21T14:30:00.123Z",
  "severity": "ERROR",
  "body": "数据库连接超时",
  "trace_id": "abc123def456",
  "span_id": "span789",
  "attributes": {
    "db.system": "postgresql",
    "db.operation": "SELECT",
    "error.type": "timeout"
  }
}

2.6 Context Propagation(上下文传播)

Context Propagation 是 OpenTelemetry 的粘合剂,负责在服务之间传递上下文信息(Trace ID、Span ID、Baggage 等)。没有它,Trace 会在服务边界断裂,Metrics 和 Logs 也无法关联到同一个请求。

传播机制分为两部分:

  • W3C Trace Context:标准 HTTP 头 traceparent 和 tracestate
  • Baggage:携带业务上下文(如用户 ID、租户 ID)
// HTTP 请求中的上下文传播示例
// 客户端发送请求时自动注入
traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
tracestate: vendor_id=abc123
baggage: user_id=u_98765,tenant=prod-east

2.7 四类数据在故障诊断中的协同

下表总结了 Trace、Span、Metrics、Logs 在值班机器人故障诊断流程中的角色:

诊断阶段主要数据源作用
告警触发Metrics检测异常指标,触发告警事件
问题定位Trace + Span还原请求路径,定位故障服务
根因分析Logs + Span Events查看错误详情和异常堆栈
影响评估Metrics + Trace评估故障影响范围和持续时间
常见误区: 不要只依赖一种信号。仅看 Metrics 可能误判故障点,仅看 Logs 可能丢失请求上下文。OpenTelemetry 的价值在于三信号联动 + 上下文传播。

2.8 实战:从 Metrics 告警到 Trace 关联

以下是一个典型的值班机器人故障诊断数据流:

Metrics 告警 → Trace 关联 → Logs 根因分析 ① Metrics 告警 P99 延迟 > 2s ② 提取 Trace ID 从告警上下文获取 ③ 查询 Trace 获取完整 Span 列表 ④ 定位故障 Span 找到 Error 状态 Span ⑤ 关联 Logs 读取 Span 对应日志 Context Propagation 确保 Metrics、Trace、Logs 共享同一个 Trace ID,实现数据关联

2.9 关键概念速查表

概念粒度是否跨服务主要用途
Trace请求级是端到端请求追踪
Span操作级否(单服务内)记录单个操作详情
Metrics聚合级是系统健康度监控
Logs事件级否错误详情与调试信息
Context Propagation上下文级是关联所有信号