2. OTel Collector 基础架构:Pipeline、Receiver、Processor、Exporter 核心概念与数据流

在深入异常事件路由之前,必须理解 OpenTelemetry Collector 的管道式架构。Collector 的设计哲学是“接收 → 处理 → 导出”三段式,每一段由对应的组件负责。本章将拆解这四个核心概念,并展示数据在管道中的流动路径。

2.1 核心组件一览

组件 英文名称 职责 典型示例
接收器 Receiver 从外部源接收遥测数据(Trace/Metric/Log) otlp, jaeger, prometheus, filelog
处理器 Processor 对数据进行过滤、修改、采样、路由等中间处理 filter, batch, attributes, routing
导出器 Exporter 将处理后的数据发送到后端存储或分析系统 otlp, prometheusremotewrite, loki, splunkhec
管道 Pipeline 将 Receiver、Processor、Exporter 串联为一条完整的数据流 traces, metrics, logs
关键认知: Collector 本身不存储数据,它只是一个流式处理引擎。数据在内存中经过管道,由 Processor 决定“是否放行”、“如何修改”、“发往何处”。

2.2 Pipeline:数据流的骨架

Pipeline 是 Collector 配置中最顶层的编排结构。一个 Pipeline 由三部分组成:receivers、processors、exporters。数据从 Receiver 进入,依次经过 Processor 链,最终由 Exporter 送出。

以下是一个典型的 Pipeline 配置片段:

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch, attributes, routing]
      exporters: [otlp, debug]
    logs:
      receivers: [filelog]
      processors: [filter, batch]
      exporters: [loki]
注意: 同一个 Receiver 或 Exporter 可以被多个 Pipeline 引用,但 Processor 是 Pipeline 私有的,不能跨 Pipeline 共享。

2.3 数据流全景图

下图展示了数据从外部系统进入 Collector,经过 Pipeline 处理,最终路由到不同后端的完整路径。异常事件路由的核心逻辑发生在 Processor 阶段。

OTel Collector 数据流与 Pipeline 架构 OTel Collector 数据流与 Pipeline 架构 外部数据源 Receiver Processor A Processor B Processor C 路由 Exporter A Exporter B 后端系统 说明: 数据从 Receiver 进入,经过 Processor 链处理,由路由 Processor 根据规则分发到不同的 Exporter,最终写入后端系统。 异常事件路由通常发生在 Processor C 阶段,通过 routing 或 filter 处理器实现。

2.4 Receiver:数据入口

Receiver 是 Collector 与外部世界的接口。它监听端口或读取文件,将外部数据格式转换为 Collector 内部统一的 pdata(Pipeline Data)格式。

  • 协议接收器:如 otlp(gRPC/HTTP)、jaeger、zipkin,用于接收标准协议上报的数据。
  • 拉取接收器:如 prometheus,主动从目标端点抓取指标。
  • 日志接收器:如 filelog、syslog,从文件或系统日志中读取数据。
常见误区: 一个 Receiver 可以同时被多个 Pipeline 引用,但每个 Pipeline 会独立处理数据副本。如果不需要重复处理,应避免将同一个 Receiver 挂载到多个 Pipeline 上,以免造成资源浪费。

2.5 Processor:数据处理与路由核心

Processor 是 Pipeline 中最灵活、最强大的组件。它位于 Receiver 和 Exporter 之间,可以对数据执行任意操作。对于异常事件路由,以下 Processor 至关重要:

Processor 名称 功能 路由相关
filter 根据条件丢弃或保留数据 是(丢弃非异常事件)
routing 根据属性值将数据分发到不同的 Exporter 是(核心路由组件)
attributes 添加、修改、删除属性 是(为路由准备标签)
batch 合并数据批次,提高导出效率 否(通用优化)
memory_limiter 防止内存溢出 否(通用保护)

2.6 Exporter:数据出口

Exporter 负责将处理后的数据发送到指定的后端系统。每个 Exporter 通常对应一种后端协议或产品。

  • 标准导出器:otlp(发送到另一个 Collector 或后端)、debug(控制台输出,用于调试)。
  • 厂商导出器:prometheusremotewrite、loki、splunkhec、datadog 等。
  • 路由目标:在异常事件路由场景中,不同的 Exporter 代表不同的处理路径——例如,正常事件发往标准存储,异常事件发往告警系统。

2.7 数据流在异常路由中的特殊路径

当 Pipeline 中配置了 routing Processor 时,数据流会出现分支。下图展示了异常事件如何被识别并导向专用 Exporter:

异常事件路由数据流 异常事件路由数据流 所有事件 异常? 是 异常 Exporter 否 正常 Exporter 告警/事件平台 指标/日志存储 路由 Processor 根据事件属性(如 status.code、severity)判断是否为异常,然后分发到不同的 Exporter。

2.8 组件协作总结

Collector 的组件协作可以归纳为以下步骤:

  1. 接收:Receiver 从外部源获取遥测数据,转换为内部格式。
  2. 处理:Processor 链按顺序执行,每个 Processor 可以修改、过滤或路由数据。
  3. 路由决策:routing Processor 根据预定义规则(如属性匹配、正则表达式)决定数据流向。
  4. 导出:Exporter 将数据发送到对应的后端系统。
实战要点: 在配置异常事件路由时,routing Processor 必须放在 Processor 链的最后,以确保所有属性修改和过滤操作已经完成。同时,建议在路由前使用 batch Processor 合并数据,减少导出连接数。