基于OpenTelemetry的DORA数据采集方案 - 第2节
2.1 OpenTelemetry 项目背景
OpenTelemetry(简称 OTel)是由 OpenTracing 与 OpenCensus 两大项目于 2019 年合并而成的统一可观测性标准。其诞生背景源于可观测性领域长期存在的“碎片化”问题:不同厂商、不同语言、不同协议各自为政,导致数据采集、传输、处理链路割裂,运维团队被迫维护多套 SDK 和 Agent。
| 时间 | 事件 | 影响 |
|---|---|---|
| 2016 | OpenTracing 发布 | 定义分布式追踪 API 标准 |
| 2017 | OpenCensus 发布 | Google 开源,支持 Traces + Metrics 采集 |
| 2019 | 两大项目合并为 OpenTelemetry | CNCF 孵化,统一可观测性数据面 |
| 2021 | OTel 达到 v1.0 GA | 生产就绪,主流语言 SDK 稳定 |
| 2023 | Logs 信号正式稳定 | 三大信号全部进入稳定阶段 |
2.2 三大信号:Traces、Metrics、Logs
OpenTelemetry 将可观测性数据抽象为三种信号(Signals),它们从不同维度描述系统状态,共同构成 DORA 数据采集的原始素材。
2.2.1 Traces(分布式追踪)
Traces 记录请求在分布式系统中的完整调用路径,以 Span 为基本单元。每个 Span 包含操作名称、开始/结束时间戳、属性(Attributes)、事件(Events)以及父子关系。DORA 中的变更前置时间和故障恢复时间可以通过 Trace 中的关键 Span 时间戳计算得出。
2.2.2 Metrics(指标)
Metrics 是聚合后的数值型数据,支持 Counter、Gauge、Histogram 等类型。DORA 中的部署频率和变更失败率本质上是基于事件计数的指标。OTel Metrics 通过 Exponential Histogram 等数据结构,能够在高基数场景下保持精度。
2.2.3 Logs(日志)
Logs 是带有时间戳的结构化或非结构化文本记录。OTel 将 Logs 与 Traces 通过 TraceId 关联,实现“日志即事件”的上下文打通。在故障恢复场景中,日志是定位根因的关键信号。
| 信号 | 基本单元 | DORA 关联指标 | 典型采集方式 |
|---|---|---|---|
| Traces | Span | 变更前置时间、故障恢复时间 | SDK 自动插桩、Agent |
| Metrics | DataPoint | 部署频率、变更失败率 | SDK 手动/自动采集、Prometheus Exporter |
| Logs | LogRecord | 故障根因分析(辅助) | Filebeat / Fluentd + OTel Collector |
2.3 OTel 架构与核心组件
OpenTelemetry 采用 采集器(Collector) 为中心的架构,将数据面与控制面分离。整体架构分为三层:应用层(SDK/API)、传输层(OTLP 协议)、处理层(Collector Pipeline)。
2.3.1 核心组件一览
| 组件 | 职责 | 部署形态 |
|---|---|---|
| API | 定义 Traces、Metrics、Logs 的数据模型与操作接口 | 语言库(JAR、npm、pip 等) |
| SDK | 实现 API,提供采样、处理、导出等运行时能力 | 应用内嵌 |
| Collector | 接收、处理、导出遥测数据,支持 Pipeline 编排 | 独立进程 / Sidecar / DaemonSet |
| Exporter | 将数据发送到后端(Jaeger、Prometheus、Loki 等) | SDK 或 Collector 插件 |
| Instrumentation | 自动插桩库,零代码接入常见框架 | Agent / 语言包 |
2.3.2 Collector Pipeline 工作流
Collector 内部通过 Receivers → Processors → Exporters 三段式 Pipeline 处理数据。每个阶段均可配置多个插件,实现数据过滤、采样、增强、路由等操作。
- Receivers:接收来自 SDK 或其他源的 OTLP 数据,也支持 Prometheus、Zipkin、Fluentd 等协议。
- Processors:对数据进行批处理、属性修改、采样、内存控制等。DORA 场景中常用
batch处理器合并 Span,attributes处理器注入部署标签。 - Exporters:将处理后的数据写入后端。支持多路导出,例如同时写入 Jaeger 和 S3 归档。
2.3.3 部署模式对比
| 模式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Agent 模式 | 每台主机部署一个 Collector | 低延迟、本地缓存、减少网络开销 | 需要管理大量实例 |
| Gateway 模式 | 集中式 Collector 集群 | 统一策略、全局采样、简化客户端 | 单点瓶颈、增加一跳延迟 |
| Sidecar 模式 | Kubernetes Pod 级别 | 隔离性好、配置灵活 | 资源占用较高 |
batch 和 memory_limiter 处理器,防止高并发部署事件导致 Collector OOM。同时建议在 Exporter 阶段使用 otlphttp 协议启用 gzip 压缩,减少网络带宽消耗。