Docker容器运行OTEL Collector与Jaeger时遇配置错误求助
错误信息
otel-collector | Error: failed to get config: cannot unmarshal the configuration: 1 error(s) decoding:
error decoding 'exporters': unknown type: "jaeger" for id: "jaeger" (valid values: [logging otlp otlphttp file kafka prometheus debug opencensus prometheusremotewrite zipkin])
我用Docker Compose部署Jaeger和OTEL Collector,相关配置如下:
Docker Compose文件
version: '3' services: otel-collector: container_name: otel-collector image: otel/opentelemetry-collector command: ["--config=/etc/otel-collector-config.yaml"] volumes: - ./Configuration/collector-config.yaml:/etc/otel-collector-config.yaml ports: - "4317:4317" jaeger: container_name: jaeger image: jaegertracing/all-in-one ports: - "16686:16686" - "14250"
OTEL Collector配置文件
receivers: otlp: protocols: grpc: processors: batch: exporters: logging: loglevel: debug jaeger: endpoint: jaeger:14250 tls: insecure: true service: pipelines: traces: receivers: [otlp] processors: [batch] exporters: [logging, jaeger]
请问哪里操作出错了?
原因与解决方法
问题根源
你使用的otel/opentelemetry-collector是核心版镜像,仅包含最基础的组件,Jaeger exporter不在核心组件清单里,所以配置里的jaeger会被识别为未知类型。
解决方法二选一
方法1:改用全量组件镜像
把Docker Compose中OTEL Collector的镜像替换为otel/opentelemetry-collector-contrib,这个镜像打包了所有官方支持的exporter、receiver和processor,直接兼容你的现有配置。修改后的服务块:
otel-collector: container_name: otel-collector image: otel/opentelemetry-collector-contrib # 替换为contrib镜像 command: ["--config=/etc/otel-collector-config.yaml"] volumes: - ./Configuration/collector-config.yaml:/etc/otel-collector-config.yaml ports: - "4317:4317"
方法2:用OTLP exporter对接Jaeger
Jaeger的all-in-one镜像默认支持OTLP协议,你可以把Collector里的Jaeger exporter换成OTLP exporter,无需更换镜像。修改Collector配置如下:
exporters: logging: loglevel: debug otlp: endpoint: jaeger:4317 # Jaeger默认OTLP gRPC端口为4317 tls: insecure: true service: pipelines: traces: receivers: [otlp] processors: [batch] exporters: [logging, otlp]
同时记得在Docker Compose的Jaeger服务中暴露4317端口:
jaeger: container_name: jaeger image: jaegertracing/all-in-one ports: - "16686:16686" - "14250:14250" - "4317:4317" # 新增OTLP端口映射
内容的提问来源于stack exchange,提问作者Peter Pie

