3. 数据采集架构设计:基于 OTel 的 DORA 数据采集整体架构、数据流与组件角色
本章聚焦于如何利用 OpenTelemetry(OTel)生态构建一套面向 DORA 指标的数据采集架构。我们将从整体架构蓝图出发,逐层拆解数据流路径,并深入分析 Collector、Exporter、Processor 三大核心组件的职责与协作方式。
3.1 整体架构蓝图
基于 OTel 的 DORA 数据采集架构采用“边缘采集 → 集中处理 → 多后端分发”的分层模型。该架构确保从 CI/CD 流水线、版本控制系统、生产运行时环境等异构数据源中,以统一格式提取事件与指标,最终汇聚到可观测性后端,用于计算部署频率、变更前置时间、变更失败率、故障恢复时间等 DORA 核心指标。
3.2 核心数据流
数据从产生到最终形成 DORA 指标,经历以下关键阶段:
- 事件产生:CI/CD 工具(如 Jenkins、GitLab CI)、Git 平台(如 GitHub、GitLab)、应用运行时(通过 OTel SDK 或 Agent)产生原始事件或指标。
- 协议转换与接收:OTel Collector 通过 Receiver 组件接收多种协议的数据(OTLP、Jaeger Thrift、Prometheus Remote Write 等),统一转换为内部 pdata 格式。
- 处理与增强:Processor 对数据进行过滤(去除无关事件)、采样(降低高基数数据量)、属性增强(添加部署环境标签、团队归属信息),并执行 DORA 相关的预聚合(如计算每日部署次数)。
- 导出与分发:Exporter 将处理后的数据发送至一个或多个后端系统。例如,指标数据写入 Prometheus,事件日志写入 Elasticsearch,链路数据写入 Jaeger。
- DORA 指标计算:后端系统或专门的 DORA 计算层对存储的数据执行查询与聚合,生成部署频率、变更前置时间等最终指标,并呈现在仪表盘上。
设计要点:建议在 Collector 内部完成尽可能多的 DORA 预聚合逻辑(如按天/按服务聚合部署计数),以减少后端存储压力并降低查询延迟。
3.3 组件角色详解
3.3.1 Collector(采集器)
Collector 是整个架构的“数据中枢”,负责接收、处理和转发遥测数据。在 DORA 场景中,Collector 通常以 Deployment(部署模式)或 DaemonSet(守护进程集)形式运行在 Kubernetes 集群中,或作为独立服务部署在 CI/CD 环境内。
| 部署模式 | 适用场景 | DORA 数据采集优势 |
|---|---|---|
| 独立 Collector(Gateway) | 集中式处理,多数据源汇聚 | 统一管理 DORA 处理规则,便于全局采样与聚合 |
| Agent Collector(Sidecar/DaemonSet) | 边缘采集,低延迟 | 贴近 CI/CD 流水线,快速捕获部署事件 |
| 混合模式 | 大规模生产环境 | Agent 负责初步过滤,Gateway 负责复杂聚合与分发 |
3.3.2 Processor(处理器)
Processor 是数据流中的“加工车间”,在 DORA 数据采集方案中承担以下关键职责:
- 过滤(Filter Processor):仅保留与 DORA 指标相关的事件,例如只采集
deployment、release、incident类型的事件,丢弃无关的调试日志。 - 采样(Sampling Processor):对于高频率的运行时链路数据,采用头部采样或尾部采样策略,在保证 DORA 指标准确性的前提下降低数据量。
- 属性增强(Attributes Processor):为事件添加 DORA 计算所需的上下文标签,如
dora.service、dora.environment、dora.team。 - 聚合(Metrics Transform / Span Metrics Processor):将事件流转换为预聚合的指标,例如从部署事件中生成
dora.deployment.count指标。
关键配置示例: 以下是一个 Processor 配置片段,用于过滤并增强部署事件。
processors:
filter:
error_mode: ignore
traces:
span:
- 'attributes["event.type"] == "deployment"'
attributes:
actions:
- key: dora.source
value: "ci-pipeline"
action: upsert
- key: dora.environment
from_attribute: deployment.environment
action: upsert
metricstransform:
transforms:
- include: dora.deployment.count
match_type: strict
action: update
operations:
- action: add_label
new_label: service
new_value: ""
3.3.3 Exporter(导出器)
Exporter 负责将处理后的数据发送至指定的后端系统。在 DORA 数据采集架构中,Exporter 的选型直接影响指标的可查询性与可视化能力。
| Exporter 类型 | 目标后端 | DORA 数据用途 |
|---|---|---|
| OTLP Exporter | OTel 原生后端(如 Jaeger、Tempo) | 传输链路数据,用于变更前置时间分析 |
| Prometheus Exporter | Prometheus / VictoriaMetrics / Thanos | 暴露 DORA 聚合指标(部署频率、失败率) |
| Loki Exporter | Grafana Loki | 存储事件日志,用于故障恢复时间计算 |
| Elasticsearch Exporter | Elasticsearch / OpenSearch | 存储结构化事件,支持复杂 DORA 查询 |
| 自定义 Exporter | 内部 DORA 计算平台 | 直接推送预计算指标至专有仪表盘 |
3.4 组件协作流程
以下 SVG 图展示了在一次典型的 DORA 数据采集中,Receiver、Processor、Exporter 之间的协作顺序与数据转换关系。
3.5 架构设计要点总结
- 统一数据模型:所有数据源必须转换为 OTel 的 pdata 格式,确保下游 Processor 和 Exporter 能够一致处理。
- 管道化处理:Processor 按顺序组成管道,每个 Processor 只负责单一职责(过滤、增强、聚合),便于测试与复用。
- 多后端分发:利用 Exporter 的并发能力,一份数据同时写入指标存储、日志存储和链路存储,避免数据孤岛。
- 弹性与容错:Collector 支持队列与重试机制,在网络抖动或后端不可用时保证数据不丢失。
- 安全与合规:在 Exporter 层面启用 TLS 加密,对敏感标签(如用户 ID)进行脱敏处理。
常见陷阱:避免在 Processor 中执行过于复杂的计算逻辑,否则会阻塞 Collector 的数据管道,导致背压(backpressure)和丢数据。建议将复杂的 DORA 指标计算下沉到后端查询层。