Java Spring应用集成Jaeger后无法在Jaeger UI中看到服务名求助
看起来你遇到的问题核心是旧版Jaeger客户端与新版Jaeger Collector的协议不兼容,再加上手动配置Tracer时的细节疏漏。我来一步步帮你梳理解决:
1. 替换为最新的Jaeger Spring Starter依赖
你当前使用的com.uber.jaeger是旧版客户端,现在Jaeger已经迁移到io.jaegertracing组织,并且提供了适配Spring Boot的自动配置依赖,能大幅减少手动配置的错误。先把你的项目依赖替换为以下内容:
Maven 依赖:
<dependency> <groupId>io.opentracing.contrib</groupId> <artifactId>opentracing-spring-jaeger-starter</artifactId> <version>3.2.2</version> <!-- 建议使用最新稳定版 --> </dependency>
Gradle 依赖:
implementation 'io.opentracing.contrib:opentracing-spring-jaeger-starter:3.2.2'
2. 移除手动Tracer Bean,改用配置文件自动配置
手动编写jaegerTracer() Bean很容易因为版本适配问题出错,Spring Starter会帮我们自动完成Tracer的初始化。只需要在application.properties(或application.yml)中添加以下配置:
application.properties:
# 服务名称 spring.application.name=pilot-tracking # Jaeger核心配置 opentracing.jaeger.service-name=${spring.application.name} opentracing.jaeger.http-sender.url=http://localhost:14268/api/traces opentracing.jaeger.sampler.type=probabilistic opentracing.jaeger.sampler.param=1.0 # 测试阶段设置100%采样,生产环境可按需调整
配置完成后,直接删掉你手动编写的jaegerTracer()方法即可,Spring会自动生成符合要求的Tracer实例,并且默认使用HTTP协议与Collector通信,避开旧版TChannel协议的兼容性问题。
3. 验证Jaeger容器运行状态
你启动Jaeger容器的命令是正确的,但可以先确认容器是否正常运行:
docker ps | grep jaegertracing/all-in-one
确保14268(HTTP Sender端口)和16686(UI端口)都正常映射。
4. 重新启动应用并检查Jaeger UI
启动你的Spring应用后,先触发一些业务请求(比如调用API接口),因为Jaeger只有接收到链路数据后,才会在UI中显示服务。之后访问http://localhost:16686,在服务下拉列表中就能找到pilot-tracking了。
关于采样策略错误的原因解释
你访问5778端口时遇到的错误,是因为旧版Jaeger客户端默认使用TChannel协议请求采样策略,但新版Jaeger Collector已经不再支持TChannel的SamplingManager::getSamplingStrategy接口。换成Spring Starter后,客户端会自动使用HTTP协议获取采样策略,这个问题就会自然消失。
内容的提问来源于stack exchange,提问作者blossoms

