2. OpenTelemetry 基础:项目背景、核心概念(Trace、Span、Metric、Log)

2.1 OpenTelemetry 项目背景

OpenTelemetry(简称 OTel)是 CNCF(Cloud Native Computing Foundation)旗下的可观测性框架,由 OpenTracing 和 OpenCensus 两个项目合并而来。其目标是提供一套统一、厂商中立的 API、SDK 和工具,用于生成、采集和导出遥测数据(Traces、Metrics、Logs)。

为什么需要 OpenTelemetry? 在微服务架构中,一个请求会穿越多个服务、中间件和基础设施。传统监控工具各自为政,导致 Trace、Metric、Log 数据割裂,难以关联分析。OTel 通过统一的数据模型和采集管道,解决了“三张皮”问题。
时间线 事件 说明
2019 OpenTracing + OpenCensus 合并 两大社区决定合并,避免标准分裂
2021 OTel 成为 CNCF 毕业项目 达到生产就绪成熟度,被主流云厂商采纳
2023+ Logs Bridge API 稳定 三大信号(Trace、Metric、Log)全部进入稳定阶段

2.2 核心概念:Trace 与 Span

Trace(追踪) 代表一个端到端请求在分布式系统中的完整路径。它由多个 Span(跨度) 组成,每个 Span 代表一次具名、定时的操作单元(如 HTTP 请求、数据库查询、消息队列发送)。

  • Trace ID:全局唯一标识,贯穿整个请求生命周期。
  • Span ID:每个 Span 的唯一标识。
  • Parent Span ID:指向父 Span,形成树状层级关系。
  • Span Context:携带 Trace ID、Span ID 等元数据,通过 W3C Trace Context 协议在服务间传播。
关键理解: Trace 是“森林”,Span 是“树”。一个 Trace 由一棵 Span 树构成,根 Span 代表入口请求,子 Span 代表内部调用。
Trace 与 Span 层级关系 根 Span:/api/order Span:auth.check Span:inventory.query Span:payment.process Span:db.query_stock Trace ID 全局唯一,Span 通过 Parent Span ID 形成树状结构,根 Span 无父节点

2.3 核心概念:Metric(指标)

Metric 是聚合后的数值型数据,用于描述系统在时间维度上的状态变化。OTel 定义了三种基本 Metric 类型:

Metric 类型 说明 典型场景
Counter 单调递增计数器,只增不减 请求总数、错误总数
Histogram 对观测值进行分桶统计 请求延迟分布、响应大小分布
Gauge 可增可减的瞬时值 CPU 使用率、内存使用量、队列长度
注意: Metric 是聚合数据,不保留单个请求的细节。如果需要排查具体请求的异常,必须结合 Trace 和 Log 进行下钻分析。

2.4 核心概念:Log(日志)

Log 是带有时间戳的文本记录,描述系统中发生的离散事件。OTel 通过 Logs Bridge API 将日志与 Trace 关联起来,核心字段包括:

  • Timestamp:事件发生时间。
  • Severity:日志级别(TRACE、DEBUG、INFO、WARN、ERROR、FATAL)。
  • Body:日志正文内容。
  • Trace ID / Span ID:关联到对应的 Trace 和 Span,实现“日志链路化”。
  • Attributes:键值对形式的上下文信息(如 service.name、http.method)。

2.5 三大信号的关系

Trace、Metric、Log 三者并非孤立,而是互补关系。OTel 通过 Context Propagation 和 Resource Attributes 将它们关联起来:

Trace、Metric、Log 三大信号关联 Trace 请求路径 + 耗时 Metric 聚合统计 + 趋势 Log 事件记录 + 详情 关联方式 Trace ID 注入 Log → 日志可回溯请求链路 Metric 聚合 Trace 数据 → 生成延迟/错误率指标

2.6 数据模型与采集架构

OTel 的数据采集遵循 Agent → Collector → Backend 的三层架构:

  1. Instrumentation(插桩):通过 SDK 或自动插桩库在应用中生成 Trace、Metric、Log。
  2. OTel Collector:接收、处理、导出遥测数据。支持批处理、采样、过滤、重试等能力。
  3. Backend(后端):存储和可视化平台,如 Jaeger、Prometheus、Grafana、Datadog 等。
课程关联: 在后续章节中,我们将为值班机器人接入 OTel SDK,通过 Collector 将链路数据发送到 Jaeger 和 Prometheus,实现“告警触发 → 自动拉取 Trace → 定位故障根因”的闭环。

2.7 本章小结

概念 一句话总结 在值班机器人中的用途
Trace 请求的完整调用链 告警时自动拉取关联 Trace,定位故障服务
Span 调用链中的单个操作单元 分析每个服务的耗时和错误状态
Metric 聚合后的数值指标 触发告警的阈值依据(如 P99 延迟 > 500ms)
Log 带时间戳的事件记录 补充 Trace 无法覆盖的异常详情