4. OpenTelemetry 架构:Collector、Exporter、Processor、Pipeline 组件详解
OpenTelemetry(OTel)是 CNCF 孵化的可观测性标准,其架构核心围绕 数据采集、处理、导出 三个环节展开。在值班台分布式追踪场景中,理解 Collector、Exporter、Processor 和 Pipeline 的协作关系,是构建稳定、低延迟、高吞吐追踪基础设施的前提。
4.1 整体架构与数据流
下图展示了 OpenTelemetry 在典型分布式追踪部署中的核心组件及其数据流转路径。SDK 负责在应用中生成 Span,通过 OTLP 协议发送至 Collector;Collector 内部通过 Pipeline 串联 Receiver、Processor、Exporter,最终将数据路由至后端存储或分析平台。
4.2 核心组件详解
4.2.1 Collector(收集器)
Collector 是 OpenTelemetry 的网关组件,负责接收、处理和导出遥测数据。它支持两种部署模式:Agent(与应用同进程或同节点部署)和 Gateway(独立集群部署)。值班台场景通常采用 Gateway 模式,实现中心化策略管理与数据路由。
| 部署模式 | 典型场景 | 优势 | 注意事项 |
|---|---|---|---|
| Agent | 轻量级采集,与应用同主机 | 低延迟,减少网络开销 | 资源占用随应用数量线性增长 |
| Gateway | 中心化数据汇聚与策略下发 | 统一管理、弹性伸缩、数据过滤 | 需考虑单点故障与网络带宽 |
4.2.2 Exporter(导出器)
Exporter 负责将处理后的数据发送至指定的后端系统。OpenTelemetry 支持多种 Exporter,常见的有 OTLP gRPC/HTTP、Jaeger、Prometheus、Datadog 等。每个 Exporter 可独立配置认证、压缩、重试与超时策略。
4.2.3 Processor(处理器)
Processor 是 Pipeline 中的数据处理单元,可对 Span 进行过滤、修改、聚合或采样。Processor 的执行顺序决定了数据变换的最终结果。常用 Processor 包括:
- batch:将多个 Span 合并为一批,减少网络请求次数,提升吞吐量。
- memory_limiter:防止 Collector 内存溢出,当内存达到阈值时主动丢弃数据。
- filter:根据属性或资源标签过滤 Span,仅保留关键业务链路。
- attributes:添加、删除或修改 Span 的标签(Attributes),用于统一命名规范。
- span:对 Span 进行重命名、修改状态或添加自定义属性。
- tail_sampling:基于尾部采样策略,保留高价值链路(如错误链路、慢链路)。
4.2.4 Pipeline(管道)
Pipeline 是 Collector 内部的数据处理流水线,由 Receiver → Processor(s) → Exporter(s) 组成。一个 Collector 实例可同时运行多个 Pipeline,每个 Pipeline 独立处理不同类型的数据(traces、metrics、logs)。Pipeline 的配置决定了数据流的拓扑结构。
4.3 组件配置示例
以下是一个典型的 Collector 配置文件片段,展示了 Pipeline 如何串联 Receiver、Processor 和 Exporter:
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
filter:
traces:
span:
- 'attributes["http.method"] == "OPTIONS"'
exporters:
otlp:
endpoint: "jaeger-collector:4317"
tls:
insecure: true
logging:
loglevel: debug
service:
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, batch, filter]
exporters: [otlp, logging]
memory_limiter 应放在 batch 之前,以防止批处理导致的内存积压。同时,filter 应尽早执行,避免无效数据进入后续处理环节。
4.4 组件选型与值班台场景适配
| 组件 | 值班台推荐配置 | 说明 |
|---|---|---|
| Receiver | OTLP gRPC + HTTP | 兼容多种 SDK 与语言,gRPC 优先用于高性能场景 |
| Processor | memory_limiter → batch → tail_sampling | 先限流防 OOM,再批量提升吞吐,最后采样保留关键链路 |
| Exporter | OTLP (Jaeger) + Logging (调试) | 主数据流向 Jaeger,Logging 用于本地调试与告警 |
| Pipeline | 单 Pipeline 处理 traces | 值班台初期建议单一 Pipeline,后续可按服务拆分多 Pipeline |
4.5 常见问题与排查思路
- 数据丢失:检查
memory_limiter是否触发丢弃;确认 Exporter 网络连通性与认证配置。 - 高延迟:调整
batch的timeout与send_batch_size;考虑增加 Collector 副本数。 - 采样策略不生效:确认
tail_sampling的decision_wait与num_traces参数是否匹配业务流量。 - 配置错误:使用
otelcol --validate命令校验配置文件语法。
logging Exporter 输出调试日志,确认数据格式与字段完整性,再切换至生产后端。同时,为 Collector 配置 Prometheus 指标暴露端口,监控其内存、CPU 与数据吞吐量。