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

OpenTelemetry与Jaeger容器Span传递问题调试求助

解决思路

1. 修正OpenTelemetry Collector导出器配置(核心问题)

你当前用jaeger导出器指向了Jaeger的OTLP端口(8096映射到Jaeger的4317),但jaeger导出器默认适配Jaeger传统Thrift协议端口,两者不兼容,这是Span无法传递的关键原因。提供两种修正方案:

方案A:改用OTLP导出器(推荐,符合现代标准)

修改OTel配置文件的exporters和pipelines部分:

exporters:
  otlp:
    endpoint: "host.docker.internal:8096"
    tls:
      insecure: true
  logging:
    verbosity: detailed
# 其他配置保持不变
service:
  # 其他配置保持不变
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp, logging]

方案B:继续使用Jaeger导出器,指向正确的Thrift端口

Jaeger all-in-one默认Thrift HTTP端口为14268,你已映射到主机8091,修改jaeger导出器的endpoint:

exporters:
  jaeger:
    endpoint: "host.docker.internal:8091"
    tls:
      insecure: true
  logging:
    verbosity: detailed
# 其他配置保持不变
service:
  # 其他配置保持不变
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [jaeger, logging]

2. 启用Batch处理器

你的traces pipeline中processors为空,添加batch处理器可优化Span批量发送逻辑,避免因单Span数量过少导致的导出延迟/失败,同时降低日志输出频率。

3. 排查网络连通性

进入OTel容器,测试到Jaeger目标端口的连通性:

# 进入OTel容器
docker exec -it oqm_otel sh
# 测试OTLP端口(方案A用)
telnet host.docker.internal 8096
# 测试Thrift端口(方案B用)
telnet host.docker.internal 8091

若连接失败,可尝试改用Jaeger容器的IP地址(通过docker inspect oqm_jaeger | grep IPAddress获取)替代host.docker.internal。

4. 过滤关键日志排查

用以下命令快速筛选OTel导出相关日志,定位问题:

# 过滤Jaeger导出器日志
docker logs oqm_otel | grep -i jaeger
# 过滤OTLP导出器日志(方案A用)
docker logs oqm_otel | grep -i otlp

若看到"successfully sent"类日志说明导出成功;若出现连接超时、拒绝等错误,针对性排查网络或端口配置。

5. 验证Jaeger的OTLP接收配置

确认Jaeger容器的COLLECTOR_OTLP_ENABLED=true环境变量生效,可通过Jaeger日志验证:

docker logs oqm_jaeger | grep -i otlp

若看到"OTLP collector started"类日志,说明OTLP接收已正常启用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:27:16