OpenTelemetry (简称 OTel) 是云原生计算基金会 (CNCF) 下的一个开源项目,旨在为追踪 (Tracing)指标(Metrics)日志(Logging)提供统一的标准接口和工具集。

为什么会有 OpenTelemetry?

在 OTel 出现之前,观测性领域存在两个主要的分散标准:

  1. OpenTracing:专注于分布式链路追踪的 API 规范。
  2. OpenCensus:由 Google 发起,包含了追踪和指标的库。

为了结束这种标准之争,两者合并形成了 OpenTelemetry。它不仅继承了两者的优点,还实现了“三位一体”(Tracing, Metrics, Logging)的终极目标。

OTel 的核心组件

OpenTelemetry 不仅仅是一套 API,它提供了一个完整的观测性流水线:

组件说明
Specification (规范)定义了所有语言必须遵循的数据模型和 API 协议。
SDK & API各种编程语言(Go, Java, Python 等)的官方实现,用于生成观测数据。
Collector (收集器)一个独立的服务,负责接收、处理(过滤、聚合)并将数据转发到后端存储。
OTLP 协议基于 gRPC/HTTP 的统一传输协议,确保数据在不同组件间高效流动。

OpenTelemetry 的优势

  1. 统一模型:你不再需要为指标、追踪和日志分别安装三套完全不同的 SDK。
  2. 厂商中立:通过 Collector,你可以轻松地将数据同时发送到 Prometheus, Jaeger, Datadog 或阿里云 SLS,而无需修改业务代码。
  3. 自动埋点 (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]