Spring Boot移除Zipkin与Sleuth依赖后,如何通过Docker实现微服务日志追踪?
Spring Boot 微服务日志追踪配置(替代已移除的Sleuth/Zipkin Client)
既然Spring Boot官方已经移除了Sleuth和Zipkin Client依赖,现在要实现日志链路追踪,得用Micrometer Tracing + Zipkin Exporter的组合,下面是具体步骤:
1. 替换核心依赖
别再用旧的spring-cloud-starter-sleuth或spring-cloud-starter-zipkin了,改成以下依赖:
Maven 配置
<dependencies> <!-- Micrometer Tracing 核心桥接 --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-bridge-brave</artifactId> </dependency> <!-- Zipkin 链路数据导出器 --> <dependency> <groupId>io.zipkin.reporter2</groupId> <artifactId>zipkin-reporter-brave</artifactId> </dependency> <!-- Web项目必备依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
Gradle 配置
dependencies { implementation 'io.micrometer:micrometer-tracing-bridge-brave' implementation 'io.zipkin.reporter2:zipkin-reporter-brave' implementation 'org.springframework.boot:spring-boot-starter-web' }
2. 项目配置文件调整
在application.yml(或application.properties)里添加追踪相关配置:
spring: application: name: your-service-name # 微服务名称,Zipkin界面会以此标识服务 management: tracing: sampling: probability: 1.0 # 采样率,1.0表示全量采集,生产环境可按需调低 zipkin: tracing: endpoint: http://localhost:9411/api/v2/spans # Zipkin容器的访问地址
如果你的微服务也是Docker容器部署,注意地址适配:
- 若微服务与Zipkin在同一个Docker网络,直接用容器名:
http://zipkin:9411/api/v2/spans - 若不在同一网络,用宿主机IP替代
localhost(比如http://192.168.1.100:9411/api/v2/spans)
3. 日志中显示TraceId/SpanId
要让日志携带链路ID方便排查,修改日志配置(比如logback-spring.xml),在日志格式中加入%X{traceId:-} %X{spanId:-}:
<configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %X{traceId:-} %X{spanId:-} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="CONSOLE"/> </root> </configuration>
启动服务后,日志会输出类似:2024-05-20 10:00:00.000 [http-nio-8080-exec-1] INFO com.example.controller.DemoController - 45678abc-123 9876def - 处理请求,其中45678abc-123是全局TraceId,9876def是当前请求SpanId。
4. Docker部署微服务的网络配置
如果微服务要打包成Docker镜像部署,推荐用Docker网络实现与Zipkin的互通:
- 创建专属Docker网络:
docker network create tracing-network - 重启Zipkin容器加入该网络:
docker run -d --network tracing-network --name zipkin -p 9411:9411 openzipkin/zipkin - 启动微服务容器时也加入同一网络:
docker run -d --network tracing-network -p 8080:8080 your-service-image
依赖未生效的排查方向
- 检查是否残留旧的Sleuth依赖,如有需排除避免版本冲突
- 确认Micrometer、Zipkin Exporter版本与Spring Boot版本兼容(Spring Boot 3.x对应Micrometer 1.10+)
- 启动服务后查看日志,是否有Zipkin连接失败的报错信息
- 调用微服务接口后,访问Zipkin UI(
http://localhost:9411)查询链路数据是否存在
内容的提问来源于stack exchange,提问作者Nihal
相关产品推荐
相关产品推荐

