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