You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过OpenTelemetry Collector向Jaeger Query发送遥测数据

问题诊断与解决方案

核心问题梳理

  1. 端口冲突:OpenTelemetry Collector(以下简称OTel Collector)的OTLP Receiver绑定了localhost:4317,而Jaeger all-in-one启动时默认也会占用4317端口,导致Jaeger启动失败,同时OTel Collector无法将数据导出到未正常启动的Jaeger服务。
  2. 主机名解析失败:OTel Collector配置中exporters.otlp.endpoint设为jaeger-all-in-one:4317,如果是本地直接运行(非Docker容器环境),这个主机名无法被系统解析,导致导出请求报错。
  3. 错误的Jaeger组件使用:Jaeger Query仅负责从存储中查询并展示追踪数据,不具备接收追踪数据的能力,直接将Collector导出指向Query的端口完全无效。

分步解决方案

1. 解决端口冲突

调整Jaeger的OTLP端口(保持Collector端口不变,减少客户端配置修改):
启动Jaeger all-in-one时指定新的OTLP端口:

./jaeger-all-in-one --collector.otlp.grpc.host-port=:4319 --collector.otlp.http.host-port=:4320 --query.port=16686

这样Jaeger的OTLP GRPC端口改为4319,HTTP端口改为4320,彻底避开Collector占用的4317/4318端口。

2. 修正OTel Collector导出配置

更新config.yaml中的OTLP exporter配置,将endpoint指向Jaeger的新OTLP GRPC端口:

exporters:
  debug:
    verbosity: detailed
  otlp:
    endpoint: localhost:4319  # 改为Jaeger的OTLP GRPC端口
    tls:
      insecure: true
  # 其他exporter配置保留

如果是Docker容器环境运行两者,需确保容器在同一网络,此时可直接用容器名称作为主机名(比如jaeger:4319),同时Jaeger的启动命令也要对应调整端口映射。

3. 确保客户端数据发送到OTel Collector

启动telemetrygen时明确指定Collector的OTLP端点,避免数据直接发送到Jaeger:

$GOBIN/telemetrygen traces --otlp-insecure --endpoint localhost:4317 --traces 3

4. 验证数据流程

  • 先启动OTel Collector:
/usr/bin/otelcol --config=file:/etc/otelcol/config.yaml --feature-gates=-component.UseLocalHostAsDefaultHost
  • 再启动调整后的Jaeger all-in-one
  • 运行telemetrygen发送数据
  • 查看Collector日志,确认数据被接收并成功导出到Jaeger;打开Jaeger UI(默认http://localhost:16686),即可看到带some.ip属性的追踪数据。

Docker Compose 正确配置示例

如果用Docker Compose部署,确保两者在同一网络,端口不冲突,配置如下:

version: '3.8'
services:
  otel-collector:
    image: otel/opentelemetry-collector-contrib:latest
    command: ["--config=/etc/otelcol/config.yaml"]
    volumes:
      - ./otel-config.yaml:/etc/otelcol/config.yaml
    ports:
      - "4317:4317"   # OTLP GRPC
      - "4318:4318"   # OTLP HTTP
    networks:
      - tracing-network

  jaeger:
    image: jaegertracing/all-in-one:latest
    command: ["--collector.otlp.grpc.host-port=:4319", "--collector.otlp.http.host-port=:4320"]
    ports:
      - "16686:16686" # Jaeger UI
      - "4319:4319"   # Jaeger OTLP GRPC
      - "4320:4320"   # Jaeger OTLP HTTP
    networks:
      - tracing-network

networks:
  tracing-network:
    driver: bridge

对应的OTel Collector配置(otel-config.yaml)中,exporter endpoint改为jaeger:4319即可。


额外说明

  • 你的attributes processor配置是正确的,只要数据经过该processor,some.ip属性会被插入到追踪数据中,可通过Jaeger UI的Span详情查看。
  • 如果需要过滤数据,可以添加filter processor到traces pipeline中,例如:
processors:
  filter:
    traces:
      span:
        exclude:
          attributes:
            - key: "some.key"
              value: "exclude-value"

然后在traces pipeline的processors列表中加入filter即可。

内容的提问来源于stack exchange,提问作者Stan Mchof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 03:35:01