3. 数据采集架构设计:基于 OTel 的 DORA 数据采集整体架构、数据流与组件角色

本章聚焦于如何利用 OpenTelemetry(OTel)生态构建一套面向 DORA 指标的数据采集架构。我们将从整体架构蓝图出发,逐层拆解数据流路径,并深入分析 Collector、Exporter、Processor 三大核心组件的职责与协作方式。

3.1 整体架构蓝图

基于 OTel 的 DORA 数据采集架构采用“边缘采集 → 集中处理 → 多后端分发”的分层模型。该架构确保从 CI/CD 流水线、版本控制系统、生产运行时环境等异构数据源中,以统一格式提取事件与指标,最终汇聚到可观测性后端,用于计算部署频率、变更前置时间、变更失败率、故障恢复时间等 DORA 核心指标。

基于 OTel 的 DORA 数据采集整体架构 数据源层(Data Sources) CI/CD 流水线 Git 仓库事件 应用运行时 告警与事件 采集层(OTel Collector) Receiver(接收器) OTLP / Jaeger / Prometheus Processor(处理器) 过滤 / 采样 / 聚合 Exporter(导出器) OTLP / Prometheus / 自定义 后端层(Backends) Prometheus + Thanos Elasticsearch / Loki Jaeger / Tempo DORA 仪表盘 DORA 指标计算与可视化层

3.2 核心数据流

数据从产生到最终形成 DORA 指标,经历以下关键阶段:

  1. 事件产生:CI/CD 工具(如 Jenkins、GitLab CI)、Git 平台(如 GitHub、GitLab)、应用运行时(通过 OTel SDK 或 Agent)产生原始事件或指标。
  2. 协议转换与接收:OTel Collector 通过 Receiver 组件接收多种协议的数据(OTLP、Jaeger Thrift、Prometheus Remote Write 等),统一转换为内部 pdata 格式。
  3. 处理与增强:Processor 对数据进行过滤(去除无关事件)、采样(降低高基数数据量)、属性增强(添加部署环境标签、团队归属信息),并执行 DORA 相关的预聚合(如计算每日部署次数)。
  4. 导出与分发:Exporter 将处理后的数据发送至一个或多个后端系统。例如,指标数据写入 Prometheus,事件日志写入 Elasticsearch,链路数据写入 Jaeger。
  5. 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 之间的协作顺序与数据转换关系。

Collector 内部组件协作流程 Receiver 接收 OTLP / HTTP / gRPC pdata Processor 管道 Filter → Attributes → MetricsTransform 增强后数据 Exporter Prometheus / OTLP / Loki 数据流说明 原始事件 → 统一 pdata 格式 → 过滤/增强/聚合 → 多后端分发 步骤 1:接收 CI/CD 事件、Git 事件 运行时链路、告警 → 统一为 pdata 步骤 2:处理 过滤无关事件 添加 DORA 标签 预聚合部署计数 步骤 3:导出 指标 → Prometheus 事件 → Elasticsearch 链路 → Jaeger

3.5 架构设计要点总结

  • 统一数据模型:所有数据源必须转换为 OTel 的 pdata 格式,确保下游 Processor 和 Exporter 能够一致处理。
  • 管道化处理:Processor 按顺序组成管道,每个 Processor 只负责单一职责(过滤、增强、聚合),便于测试与复用。
  • 多后端分发:利用 Exporter 的并发能力,一份数据同时写入指标存储、日志存储和链路存储,避免数据孤岛。
  • 弹性与容错:Collector 支持队列与重试机制,在网络抖动或后端不可用时保证数据不丢失。
  • 安全与合规:在 Exporter 层面启用 TLS 加密,对敏感标签(如用户 ID)进行脱敏处理。
常见陷阱:避免在 Processor 中执行过于复杂的计算逻辑,否则会阻塞 Collector 的数据管道,导致背压(backpressure)和丢数据。建议将复杂的 DORA 指标计算下沉到后端查询层。