OpenTelemetry CollectorOpenTelemetry 的可执行采集与处理组件,用来接收、处理并导出 日志指标链路追踪遥测数据。

核心问题

如果每个应用都直接连接每个可观测性后端,应用代码就要承担导出协议、鉴权、批处理、重试、采样、脱敏和多后端转发逻辑。OpenTelemetry Collector 把这些横切逻辑从应用中剥离出来,让应用只需要把遥测发到本地或附近的 Collector,再由 Collector 统一处理和转发。

核心对象

对象作用工程关注点
Receiver接收或抓取遥测数据监听端口、协议、鉴权
Processor在管道中修改、过滤、批处理或采样数据顺序、内存、drop 策略
Exporter把处理后的数据发送到外部目标endpoint、重试、队列、TLS
Pipeline一条从接收到导出的数据路径signal 类型、组件顺序
Extension非数据流组件health check、auth、pprof、zpages
Connector连接两条 pipeline 的组件从一种信号派生另一种信号

核心机制

Collector 的核心模型是 pipeline:

receiver -> processor(s) -> exporter(s)

一个最小配置可以写成:

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
 
processors:
  batch:
 
exporters:
  otlp:
    endpoint: otlp-gateway:4317
 
service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp]

这段配置的含义是:

  1. otlp receiver 同时打开 gRPC 和 HTTP 入口,接收 OTLP 数据。
  2. batch processor 把收到的数据按批次合并,减少出口请求次数。
  3. otlp exporter 把处理后的 traces 发送到后端。
  4. service.pipelines.traces 把这些组件串成一条 trace pipeline。

Collector 可以同时有 tracesmetricslogs 等 pipeline。每条 pipeline 的数据类型是配置的一部分;组件必须支持该信号类型,否则启动加载配置时会报错。

工程用途

  • 在主机、容器或边缘设备上作为本地 Agent,缓冲和转发应用遥测。
  • 在集群内作为 Gateway,统一鉴权、采样、脱敏和多后端 fan-out。
  • 把非 OTLP 输入转换成 OTLP 或后端协议,例如从 Prometheus scrape、文件日志或其他协议接入。
  • 在迁移可观测性后端时,让应用保持 OTLP 出口不变,只改 Collector 出口。

观察 Collector 时,重点看 receiver 接收量、processor drop 数、exporter 队列长度、发送失败率、内存使用、批量大小、重试次数和自身健康检查。

边界与常见坑

  • Collector 不会自动给应用埋点:应用仍需要 SDK、自动 instrumentation、Agent 或日志采集器产生数据。
  • Collector 不是存储后端:它主要负责接收、处理和转发;长期存储、查询和看板仍由后端负责。
  • receiver 和 exporter 方向容易搞反:receiver 是入口,exporter 是出口;同名 otlp 可以同时出现在两边,但语义相反。
  • pipeline 漏配会导致“收到了但没发出”:组件配置存在不代表被使用,必须挂到 service.pipelines
  • 同一 receiver fan-out 会共享入口压力:某条下游 pipeline 阻塞时,可能影响挂在同一 receiver 上的其他 pipeline。
  • 生产环境要显式处理安全:远程 Collector 入口应配置 TLS、mTLS 或认证扩展;不要默认暴露未鉴权的 OTLP 端口。

相关术语

外部参考