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

SpringBoot集成OpenTelemetry无法连接Jaeger问题求助

问题:SpringBoot集成OpenTelemetry后无法连接Jaeger,配置的OTEL_EXPORTER_OTLP_ENDPOINT未生效

已在SpringBoot服务的build.gradle中添加OpenTelemetry相关依赖:

implementation 'io.opentelemetry:opentelemetry-bom:1.39.0'
implementation 'io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.5.0-alpha'            

但连接Jaeger实例时出现错误:

io.opentelemetry.sdk.internal.ThrottlingLogger doLog SEVERE: Failed to export spans. The request could not be executed. Full error message: Failed to connect to localhost/127.0.0.1:4318

已在服务的ConfigMap中配置以下环境变量:

OTEL_TRACES_SAMPLER_ARG: "1"
OTEL_TRACES_SAMPLER: "parentbased_traceidratio"
OTEL_RESOURCE_ATTRIBUTES: service.name=myservice,service.version=1.0.0
OTEL_TRACES_EXPORTER: otlp
OTEL_METRICS_EXPORTER: otlp
OTEL_LOGS_EXPORTER: otlp
OTEL_EXPORTER_OTLP_COMPRESSION: gzip
OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger-collector.default:4317

但错误依旧,显示连接localhost/127.0.0.1:4318,说明OTEL_EXPORTER_OTLP_ENDPOINT配置未生效。


解决方法

1. 确认环境变量是否正确加载

  • 进入SpringBoot服务所在的Pod,执行printenv | grep OTEL,检查OTEL_EXPORTER_OTLP_ENDPOINT是否正确显示为http://jaeger-collector.default:4317。如果该变量不存在,说明ConfigMap未正确注入到Pod的环境变量中,需检查Pod的部署配置,确保ConfigMap被正确引用。

2. 修正协议与端口的匹配问题

OpenTelemetry的OTLP Exporter默认使用HTTP协议(对应端口4318),而Jaeger的4317端口是gRPC协议的OTLP端口,两者不兼容:

  • 若使用gRPC协议,修改endpoint为带grpc://前缀的地址,或单独配置追踪的endpoint:
    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: "grpc://jaeger-collector.default:4317"
    
  • 若使用HTTP协议,将端口改为Jaeger的OTLP HTTP端口4318:
    OTEL_EXPORTER_OTLP_ENDPOINT: "http://jaeger-collector.default:4318"
    

3. 补充必要的实现依赖

仅引入BOM依赖管理不足以提供OTLP Exporter的具体实现,需在build.gradle中添加以下依赖:

// OTLP Exporter核心实现
implementation 'io.opentelemetry:opentelemetry-exporter-otlp'
// SpringBoot自动配置支持(简化配置)
implementation 'io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter'

4. 检查代码中的硬编码配置

如果项目中存在自定义的OpenTelemetry配置类(如手动创建OtlpGrpcSpanExporter实例),可能会覆盖环境变量的配置。需确保代码中未硬编码endpoint,或删除自定义配置,依赖SpringBoot的自动配置逻辑。

5. 验证Jaeger Collector的网络可达性

在SpringBoot服务的Pod中,使用工具验证Jaeger Collector的端口是否可访问:

  • 对于HTTP端口4318:执行curl http://jaeger-collector.default:4318/v1/traces,若返回405 Method Not Allowed则说明端口可达;
  • 对于gRPC端口4317:使用grpcurl工具执行grpcurl -plaintext jaeger-collector.default:4317 list,若能返回服务列表则说明端口可达。
    如果无法访问,需检查Jaeger服务的状态、Kubernetes网络策略或Service配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:14:53