在 OpenTelemetry 中,OTel 是框架整体的简称,代表开源可观测性框架;OTLP 是其核心协议,负责标准化数据传输。以下是两者的详细解析:
OTel(OpenTelemetry)
定义:
OTel 是一个开源的、与供应商无关的云原生可观测性框架,由 OpenTracing 和 OpenCensus 合并而成,旨在统一日志、指标和追踪(Logs、Metrics、Traces)的收集标准。
核心目标:
- 标准化:提供跨语言的 API、SDK 和工具,统一数据模型(如 OTLP 协议)。
- 兼容性:支持多种后端系统(如 Jaeger、Prometheus、Elasticsearch、Datadog 等)。
- 灵活性:允许开发者自由选择后端,避免供应商锁定。
- 降低门槛:简化遥测数据收集流程,减少重复埋点。
核心组件:
- API/SDK:提供跨语言的编程接口,用于生成遥测数据。
- Collector:中间网关,负责接收、处理和导出数据(支持多种格式,如 OTLP、Zipkin、Jaeger)。
- 语义约定(Semantic Conventions):确保所有语言生成的遥测数据包含相同的语义信息。
应用场景:
- 微服务系统的分布式追踪(如定位延迟瓶颈、错误源)。
- 将自定义指标导出到 Prometheus 或 Grafana。
- 日志与追踪联动(通过
trace_id
和span_id
实现关联)。
OTLP(OpenTelemetry Protocol)
定义:
OTLP 是 OpenTelemetry 的原生协议,用于在遥测数据源(如应用程序)、中间节点(如 Collector)和后端系统之间编码、传输和传递数据。
核心特性:
标准化数据模型:
- 基于 ProtoBuf 定义,支持追踪(Traces)、指标(Metrics)和日志(Logs)的统一传输。
- 例如,一个 Trace 由多个 Span 构成的有向无环图(DAG),Span 代表最小粒度的调用(如 HTTP 请求或数据库查询)。
高效传输:
- 支持 gRPC(OTLP/gRPC)和 HTTP(OTLP/HTTP)两种传输方式。
- 通过二进制编码(ProtoBuf)减少数据体积,提升传输效率。
协议无关性:
- Collector 可接收多种格式数据(如 Zipkin、Jaeger),但仅 OTLP 是官方原生支持的格式。
- 导出时也可转换为其他格式(如 Prometheus 指标、Loki 日志)。
在 Collector 中的角色:
Collector 的 Pipeline 由三部分组成:
- Receiver:监听并接收数据(支持 OTLP、Zipkin 等格式)。
- Processor:处理数据(如添加标签、降采样、限速)。
- Exporter:将数据导出到后端(如 Jaeger、Elasticsearch、OTLP 兼容系统)。
示例流程:
- 应用程序通过 OTel SDK 生成遥测数据,使用 OTLP 格式发送到 Collector。
- Collector 的 OTLP Receiver 接收数据,Processor 进行处理(如过滤敏感字段)。
- Exporter 将数据导出到 Elasticsearch,供 Kibana 分析。
OTel 与 OTLP 的关系
- OTel 是框架:提供 API、SDK、工具和 Collector,解决可观测性领域的标准化问题。
- OTLP 是协议:作为 OTel 的核心传输机制,确保数据在不同组件间无缝流动。
类比理解:
- OTel 类似“邮政系统”,提供寄信、收信、分拣的完整流程。
- OTLP 类似“信封标准”,规定信封的尺寸、格式,确保邮件能在不同邮政系统间传递。
总结
两者相辅相成,OTEL 提供了数据的生成和处理能力,而 OTLP 提供了数据的传输方式。通过 OTLP,开发者可以轻松地将遥测数据发送到各种后端,实现统一的可观测性。