Collector 配置是什么
OpenTelemetry Collector 的配置文件由四段组成:receivers 定义入口协议与端口,processors 做批处理、限流与属性改写,exporters 决定数据发往哪个后端,service 段把前三者组装成一条条管道并声明启用哪些组件。组件只有被 service 段引用才会生效——写了 receivers 却忘了在 pipelines 里引用,采集端不报错但数据一条都不会流出去。
基本信息
| 适用平台 | OpenTelemetry Collector 核心版或 contrib 版 |
|---|---|
| 默认端口 | OTLP gRPC 4317、OTLP HTTP 4318 |
| 必需段落 | receivers、exporters、service.pipelines |
| 校验命令 | otelcol validate --config=config.yaml |
典型使用场景
- 统一采集入口:所有服务只对接 Collector,后端更换不影响业务侧
- 批量与压缩:batch 处理器聚合后发送,降低后端请求压力
- 内存保护:memory_limiter 在内存逼近上限时主动拒绝,避免被系统杀掉
- 属性改写:统一注入或清理资源属性,避免各服务自说自话
- 多路导出:同一份数据同时发往链路后端与对象存储做长期留存
config.yaml 骨架
config.yaml 骨架
receivers:
otlp:
protocols:
grpc: { endpoint: 0.0.0.0:4317 } # 应用侧 gRPC 上报
http: { endpoint: 0.0.0.0:4318 } # HTTP 上报与探活
processors:
memory_limiter: # 必须放在管道首位
check_interval: 1s
limit_percentage: 80
spike_limit_percentage: 25
batch: {} # 批量聚合后再导出
exporters:
otlp/tempo: # 斜杠后缀是命名空间写法
endpoint: tempo:4317
tls: { insecure: true } # 内网无 TLS 时才这样写
service:
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [otlp/tempo]段落与职责
| 段落 | 作用 | 常见错误 |
|---|---|---|
| receivers | 接收 OTLP 与其它协议数据 | 端口被占用或未对应用开放 |
| processors | 批处理、限流、属性改写 | memory_limiter 未置于管道首位 |
| exporters | 把数据发往目标后端 | 端点写错时只报导出失败 |
| service.pipelines | 串联组件并声明类型 | 组件未引用等于不生效 |
| service.telemetry | Collector 自身指标暴露 | 自身指标无人采集,问题被动发现 |
改配置的正确顺序是:先改文件,跑一次 validate,再滚动重启并观察导出失败与队列指标;直接热替换容器内文件在下次同步时可能被覆盖。
本地排查用装饰器思路更简单:临时加一个 debug 或 logging 导出器,能在日志里看到实际收到的数据,确认属性与字段是否正确后再移除。