OpenTelemetry (简称 OTel) 是云原生计算基金会 (CNCF) 下的一个开源项目,旨在为追踪 (Tracing)、指标(Metrics)和日志(Logging)提供统一的标准接口和工具集。
为什么会有 OpenTelemetry?
在 OTel 出现之前,观测性领域存在两个主要的分散标准:
- OpenTracing:专注于分布式链路追踪的 API 规范。
- OpenCensus:由 Google 发起,包含了追踪和指标的库。
为了结束这种标准之争,两者合并形成了 OpenTelemetry。它不仅继承了两者的优点,还实现了“三位一体”(Tracing, Metrics, Logging)的终极目标。
OTel 的核心组件
OpenTelemetry 不仅仅是一套 API,它提供了一个完整的观测性流水线:
| 组件 | 说明 |
|---|---|
| Specification (规范) | 定义了所有语言必须遵循的数据模型和 API 协议。 |
| SDK & API | 各种编程语言(Go, Java, Python 等)的官方实现,用于生成观测数据。 |
| Collector (收集器) | 一个独立的服务,负责接收、处理(过滤、聚合)并将数据转发到后端存储。 |
| OTLP 协议 | 基于 gRPC/HTTP 的统一传输协议,确保数据在不同组件间高效流动。 |
OpenTelemetry 的优势
- 统一模型:你不再需要为指标、追踪和日志分别安装三套完全不同的 SDK。
- 厂商中立:通过 Collector,你可以轻松地将数据同时发送到 Prometheus, Jaeger, Datadog 或阿里云 SLS,而无需修改业务代码。
- 自动埋点 (Instrumentation):OTel 提供了非常强大的自动埋点能力,许多库(如 Go 的 HTTP/gRPC)只需一行代码即可开启追踪。
与 OpenTracing 的关系
重要结论:OpenTracing 已经进入“维护模式”,不再增加新特性。OpenTelemetry 是其官方指定的继任者。
如果你正在启动一个新项目,强烈建议直接使用 OpenTelemetry。虽然 OTel 提供了兼容层来支持旧的 OpenTracing 代码,但直接使用 OTel 的 API 会获得更好的性能和更丰富的功能。
可视化流水线
graph LR App[App with OTel SDK] -- OTLP --> Coll[OTel Collector] Coll -- Export --> Jaeger[Jaeger / Tracing] Coll -- Export --> Prom[Prometheus / Metrics] Coll -- Export --> Loki[Loki / Logging]