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

Spring Boot集成OpenTelemetry对接Jaeger报UNIMPLEMENTED未知服务错误

问题原因

你遇到的报错本质是导出协议和端口不匹配导致的,核心问题有三个:

  • 原生Jaeger二进制包默认暴露的14250端口是Jaeger私有gRPC协议的接收端口,仅支持Jaeger格式的链路数据,不支持OpenTelemetry标准的OTLP协议,你将OTLP导出器的端点指向14250端口,自然会触发未知服务的报错。
  • 启动参数配置冲突:你同时指定了otel.traces.exporter=jaeger(使用Jaeger私有协议导出)和一系列otel.exporter.otlp.*参数,Java Agent会同时加载两个导出器,导致多余的OTLP导出请求发往错误端口。
  • 依赖冗余:使用OpenTelemetry Java Agent做无侵入埋点时,不需要在应用中手动引入OpenTelemetry相关依赖,Agent会自动注入所需的所有类,手动引入反而可能引发版本冲突。
解决方案

两种方案二选一即可:

方案1:使用Jaeger私有协议导出

删除所有otel.exporter.otlp.*开头的启动参数,若不需要导出指标可直接关闭指标导出器,修正后的启动命令如下:

java -javaagent:/Users/<user-name>/temp/opentelemetry-javaagent-all.jar -Dotel.traces.exporter=jaeger -Dotel.exporter.jaeger.endpoint=localhost:14250  -Dotel.resource.attributes=service.name=playground-app -Dotel.javaagent.debug=false -Dotel.metrics.exporter=none -jar playground-app-0.0.1-SNAPSHOT.jar

方案2:使用OTLP协议导出(推荐,为OpenTelemetry官方标准协议)

首先确认你本地运行的Jaeger版本 >= 1.35.0,该版本开始默认开启OTLP协议接收端口4317,修正启动参数如下:

java -javaagent:/Users/<user-name>/temp/opentelemetry-javaagent-all.jar -Dotel.traces.exporter=otlp -Dotel.metrics.exporter=otlp -Dotel.exporter.otlp.endpoint=localhost:4317 -Dotel.resource.attributes=service.name=playground-app -Dotel.javaagent.debug=false -jar playground-app-0.0.1-SNAPSHOT.jar
依赖修正建议

可以删除build.gradle中所有手动引入的OpenTelemetry相关依赖,仅保留业务所需的依赖即可,避免版本冲突:

// 删掉如下配置即可
// implementation platform("io.opentelemetry:opentelemetry-bom:1.9.0")
// implementation platform('io.opentelemetry:opentelemetry-bom-alpha:1.9.0-alpha')
// implementation('io.opentelemetry:opentelemetry-api')
// implementation('io.opentelemetry:opentelemetry-api-metrics')
// implementation group: 'io.opentelemetry', name: 'opentelemetry-proto', version: '1.7.1-alpha'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:06:02