4. OpenTelemetry 简介
OpenTelemetry(简称 OTel)是当前可观测性领域最核心的开源标准与工具集。它提供了一套与厂商无关的 API、SDK、Collector 和导出器,用于生成、采集、处理和导出遥测数据(Trace、Metrics、Logs)。在平台工程场景中,OTel 是实现“自助目录集成”的关键技术底座——它让平台团队能够以统一的方式接入任意后端,并为应用开发者提供标准化的埋点接口。
4.1 项目背景与 CNCF 毕业项目
OpenTelemetry 由 OpenTracing 和 OpenCensus 两个项目合并而来,于 2019 年正式启动。2021 年成为 CNCF 的毕业项目,标志着其成熟度、社区活跃度和生产可用性得到了广泛认可。
| 时间节点 | 里程碑 |
|---|---|
| 2019 年 5 月 | OpenTracing 与 OpenCensus 合并,宣布 OpenTelemetry 项目 |
| 2020 年 8 月 | 发布第一个稳定版本(Trace API/SDK) |
| 2021 年 6 月 | 正式成为 CNCF 毕业项目 |
| 2023 年 | Logs API/SDK 稳定,三大信号(Traces、Metrics、Logs)全部 GA |
平台工程视角: OTel 的 CNCF 毕业身份意味着平台团队可以放心将其作为基础设施层标准,无需担心厂商锁定或项目夭折风险。它已被 AWS、Azure、Google Cloud、Datadog、Honeycomb 等主流厂商原生支持。
4.2 核心组件架构
OpenTelemetry 的架构分为四个核心层次,从应用内埋点到数据导出形成完整链路:
4.2.1 API
API 层定义了遥测数据的抽象接口,不依赖具体实现。开发者只需引入 API 包即可编写埋点代码,无需关心底层 SDK 或后端。支持的三大信号:
- Traces(链路):记录请求在分布式系统中的完整路径,包含 Span 和 SpanContext。
- Metrics(指标):聚合型数值数据,如请求延迟、错误率、CPU 使用率。
- Logs(日志):带时间戳的结构化或非结构化事件记录。
4.2.2 SDK
SDK 是 API 的具体实现,提供以下关键能力:
- 采样(Sampling):控制数据采集比例,降低存储成本。
- 上下文传播(Context Propagation):跨进程传递 Trace 上下文(W3C TraceContext 标准)。
- 处理管道(Pipeline):支持自定义 Processor 对 Span/Metric 进行过滤、修改、聚合。
4.2.3 Collector
Collector 是 OTel 架构中的“数据中枢”,以独立服务运行。它接收来自 SDK 或其他来源的遥测数据,经过处理后再转发到后端。Collector 分为两种模式:
| 模式 | 说明 | 平台工程用途 |
|---|---|---|
| Agent | 与应用程序同主机部署,轻量级 | 边缘采集,减少应用负载 |
| Gateway | 独立集群部署,集中处理 | 多租户路由、数据脱敏、后端切换 |
4.2.4 Exporter
Exporter 负责将处理后的数据发送到指定的后端系统。OTel 原生支持多种导出协议:
- OTLP(OpenTelemetry Protocol):官方标准协议,性能最优。
- Prometheus:导出 Metrics 到 Prometheus 或兼容系统。
- Jaeger / Zipkin:导出 Traces 到分布式追踪后端。
- Datadog / New Relic / AWS X-Ray:商业后端适配器。
4.3 与 OpenTracing / OpenCensus 的关系
OpenTelemetry 并非从零开始,而是融合了前两个项目的优势。理解这段历史有助于避免混淆:
| 项目 | 状态 | 特点 | 与 OTel 的关系 |
|---|---|---|---|
| OpenTracing | 已归档(2022) | 仅定义 Trace API,无 Metrics/Logs | OTel 继承了其 API 设计理念和上下文传播模型 |
| OpenCensus | 已归档(2022) | 支持 Trace + Metrics,但绑定 Google 后端 | OTel 继承了其 SDK 实现和 Collector 架构 |
| OpenTelemetry | 活跃(CNCF 毕业) | 统一 Trace + Metrics + Logs,厂商中立 | — |
迁移建议: 如果现有系统使用了 OpenTracing 或 OpenCensus 的 SDK,OTel 提供了兼容性桥接库(Bridge),可以在不修改业务代码的情况下逐步迁移。平台团队应优先推动新服务直接使用 OTel API,旧服务通过桥接过渡。
4.4 平台工程中的集成价值
在平台工程自助目录中,OpenTelemetry 扮演了“通用数据平面”的角色:
- 标准化埋点:平台提供 OTel API 模板,开发者无需学习多种后端 SDK。
- 动态路由:Collector 根据租户、环境、服务等级动态切换后端,无需修改应用代码。
- 自助接入:开发者通过配置即可将遥测数据接入平台目录,实现“声明式可观测性”。
注意: 在平台工程中,不要将 OTel SDK 与特定后端绑定。始终通过 Collector 做中间层,这样后端切换时只需修改 Collector 配置,无需重新部署应用。这是实现“自助目录”灵活性的关键原则。