3. OpenTelemetry Collector 架构:Receiver、Processor、Exporter、Pipeline、部署模式

OpenTelemetry Collector 是 OTel 生态中的核心数据平面组件,负责接收、处理、导出遥测数据(Traces、Metrics、Logs)。理解其内部架构是构建自动化 Runbook 响应体系的基础——只有掌握数据流经 Collector 的每个环节,才能精准定位异常事件发生的阶段。

3.1 核心组件与数据流

Collector 采用管道(Pipeline)驱动架构,由三大核心组件构成:Receiver(接收器)、Processor(处理器)、Exporter(导出器)。数据从 Receiver 进入,经过 Processor 链处理,最终由 Exporter 发送到后端。

关键概念: Collector 本身不存储数据,它是一个无状态的数据路由与处理中间层。所有组件通过 Pipeline 串联,Pipeline 定义了数据类型的流向(Traces / Metrics / Logs)。
OpenTelemetry Collector 核心架构图 OpenTelemetry Collector 核心架构 应用/服务 Receiver OTLP / Jaeger / Prometheus / 自定义 Processor 链 批处理 / 采样 / 过滤 / 属性修改 / 内存限制 / 重试 Exporter OTLP / Prometheus / Jaeger / 日志 / 自定义 后端 Pipeline 定义示例 pipelines: traces: receivers: [otlp] processors: [batch, memory_limiter] exporters: [otlp] 数据流方向:Receiver → Processor 链 → Exporter

3.2 组件详解

3.2.1 Receiver(接收器)

Receiver 是数据进入 Collector 的入口。它监听网络端口或读取本地数据,将外部遥测数据转换为 Collector 内部统一的 pdata(Pipeline Data)格式。每个 Receiver 通常对应一种协议或数据源。

Receiver 名称 协议/数据源 端口(默认) 适用场景
OTLP Receiver gRPC / HTTP 4317 (gRPC) / 4318 (HTTP) OTel SDK 直接上报
Jaeger Receiver Thrift / gRPC / HTTP 14250 / 14268 / 16686 兼容 Jaeger Agent 上报
Prometheus Receiver HTTP Scrape 8889 抓取 Prometheus 指标端点
Kafka Receiver Kafka Consumer 9092 从 Kafka Topic 消费遥测数据
Filelog Receiver 文件尾随 无(本地文件) 采集容器/主机日志文件
最佳实践: 在自动化 Runbook 场景中,建议优先使用 OTLP Receiver 作为统一入口,因为它支持 Traces/Metrics/Logs 三种信号,且与 OTel SDK 原生兼容,减少协议转换带来的异常点。

3.2.2 Processor(处理器)

Processor 是 Pipeline 中的数据处理中间件,可以串联多个形成处理链。Processor 的执行顺序决定了数据变换的最终结果。常见的 Processor 按功能分为以下几类:

  • 数据增强: attributes(添加/修改属性)、resource(修改资源信息)、span(修改 Span 属性)
  • 数据过滤: filter(基于条件丢弃数据)、tailsampling(尾部采样)
  • 数据聚合: batch(批处理合并)、memory_limiter(内存限制与背压)
  • 数据路由: routing(根据属性路由到不同 Exporter)
  • 数据转换: transform(使用 OTTL 语法转换数据)
注意: Processor 链的顺序至关重要。例如,memory_limiter 应放在 batch 之前,以确保在批处理前就进行内存控制,防止 OOM。错误的 Processor 顺序可能导致数据丢失或性能下降。

3.2.3 Exporter(导出器)

Exporter 负责将处理后的数据发送到指定的后端系统(如监控平台、存储、分析工具)。每个 Exporter 对应一种输出协议或目标系统。

Exporter 名称 目标系统 协议 关键配置
OTLP Exporter 另一个 Collector / 后端 gRPC / HTTP endpoint, tls, headers
Prometheus Exporter Prometheus / VictoriaMetrics HTTP namespace, const_labels
Logging Exporter 标准输出(调试用) stdout loglevel, sampling_initial
Kafka Exporter Kafka Topic Producer brokers, topic, encoding
Elasticsearch Exporter Elasticsearch HTTP Bulk endpoints, index, pipeline

3.3 Pipeline 定义与配置

Pipeline 是 Collector 配置的核心,它将 Receiver、Processor、Exporter 组合成一个完整的数据处理链路。一个 Collector 实例可以同时运行多个 Pipeline,每个 Pipeline 处理一种信号类型(Traces / Metrics / Logs)。

以下是一个典型的 Collector 配置示例,包含 Traces 和 Metrics 两个 Pipeline:

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

processors:
  batch:
    timeout: 1s
    send_batch_size: 1024
  memory_limiter:
    check_interval: 1s
    limit_mib: 512
    spike_limit_mib: 128
  attributes:
    actions:
      - key: environment
        value: production
        action: upsert

exporters:
  otlp:
    endpoint: otel-backend.example.com:4317
    tls:
      insecure: false
  logging:
    loglevel: debug

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [memory_limiter, batch, attributes]
      exporters: [otlp, logging]
    metrics:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [otlp]
Pipeline 设计原则:
  • 每个 Pipeline 必须至少包含一个 Receiver 和一个 Exporter。
  • Processor 是可选的,但生产环境建议至少包含 batch 和 memory_limiter。
  • 不同信号类型的 Pipeline 可以共享相同的 Receiver 实例(如 OTLP Receiver 同时接收 Traces 和 Metrics)。
  • Exporter 可以被多个 Pipeline 复用,但需注意数据隔离。

3.4 部署模式

OpenTelemetry Collector 支持多种部署模式,以适应不同的基础设施规模和架构需求。选择合适的部署模式是保障遥测数据可靠性和可观测性的关键。

OpenTelemetry Collector 部署模式对比 OpenTelemetry Collector 部署模式 模式 1: Agent 模式 每个节点部署一个 Collector 与应用同主机/同 Pod 轻量级,本地处理 适合:K8s DaemonSet / 主机部署 优点:低延迟,故障隔离 缺点:管理节点多,资源分散 模式 2: Gateway 模式 独立部署 Collector 集群 作为中心化数据网关 负责聚合、过滤、路由 适合:K8s Deployment / 物理机 优点:集中管理,数据治理 缺点:单点风险(需高可用) 模式 3: 混合模式 Agent + Gateway 组合 Agent 做本地采集与预处理 Gateway 做聚合与路由 适合:大规模生产环境 优点:弹性伸缩,故障冗余 缺点:架构复杂,运维成本高 部署模式对比 维度 Agent 模式 Gateway 模式 混合模式 资源消耗 低(每个节点少量) 中(集中部署) 中(分层分配) 数据延迟 低(本地处理) 中(网络传输) 低-中(可调) 故障影响 单节点故障 可能影响全局 局部故障可隔离 运维复杂度 低 中 高 推荐场景 小规模 / 边缘节点 中大规模 / 集中管控 大规模生产 / 高可用要求

3.5 部署模式选择建议

在自动化 Runbook 响应异常事件的场景中,部署模式的选择直接影响异常检测的时效性和数据完整性:

  • Agent 模式:适合边缘节点或小型集群,异常事件可在本地快速处理,减少网络依赖。但需注意 Agent 本身的资源限制可能导致数据丢失。
  • Gateway 模式:适合需要集中数据治理的场景,可以在 Gateway 层实现全局采样、过滤和路由规则。但 Gateway 成为单点,需配置高可用(多副本 + 负载均衡)。
  • 混合模式:生产环境推荐方案。Agent 负责本地采集和预处理(如批处理、内存限制),Gateway 负责跨集群聚合、数据脱敏、路由到多个后端。异常事件可以在 Agent 层快速响应,也可以在 Gateway 层进行全局分析。
Runbook 自动化建议: 在混合模式下,建议在 Agent 层配置 memory_limiter 和 batch Processor,在 Gateway 层配置 filter 和 routing Processor。这样,当异常事件发生时,Agent 可以快速丢弃无效数据或进行本地采样,Gateway 则负责将关键异常路由到专门的告警通道。

3.6 高可用与扩展性

Collector 本身是无状态的,这为实现高可用提供了天然优势。以下是生产环境中的关键实践:

维度 实践方案 说明
负载均衡 Receiver 前加 LB(如 Nginx / Envoy) 将 OTLP 请求分发到多个 Collector 实例
水平扩展 增加 Collector 副本数 无状态设计,支持按 CPU/内存指标自动扩缩
数据缓冲 启用 Exporter 的 retry_on_failure 和 sending_queue 后端不可用时,数据暂存内存或磁盘
故障转移 Exporter 配置多个 endpoint 主后端故障时自动切换到备用后端
监控自身 启用 Collector 的内部指标(telemetry) 暴露自身运行状态,纳入可观测体系
关键提醒: 虽然 Collector 无状态,但 sending_queue 的持久化队列(persistent_storage_enabled: true)会写入本地磁盘。在 K8s 环境中,需确保 Pod 重建时磁盘数据不丢失(使用 PVC 或 hostPath),否则可能导致数据丢失。