Spring Cloud Sleuth 是 Spring Cloud 生态系统中的一个跟踪解决方案,用于在分布式系统中实现请求追踪和日志聚合。它基于 OpenTracing 和 Zipkin 实现,可以跟踪分散在不同微服务中的请求,生成一条完整的分布式事务链路。下面介绍 Spring Cloud Sleuth 的实现和使用:
- 引入依赖
要使用 Spring Cloud Sleuth,需要在项目的 Pom.xml 文件中添加以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
- 生成跟踪 ID
在 Spring Boot 应用程序中,Spring Cloud Sleuth 会自动为每个请求生成一个唯一的跟踪 ID,并将跟踪 ID 添加到日志信息中。例如,在控制器类中添加以下代码:
@RestController
public class MyController {
private static final Logger logger = LoggerFactory.getLogger(MyController.class);
@GetMapping("/hello")
public String hello() {
logger.info("Hello, World!");
return "Hello, World!";
}
}
在日志输出中可以看到 Sleuth 自动为这个请求生成的唯一跟踪 ID:
2021-11-01 10:15:34.612 INFO [my-service,737997d35cb07d08,737997d35cb07d08,false] 15472 --- [nio-8080-exec-1] c.e.s.controller.MyController : Hello, World!
其中,my-service
表示应用程序名称,737997d35cb07d08
表示唯一跟踪 ID,false
表示该请求不在一个跨度内。
- 集成 Zipkin
为了实现分布式链路跟踪和日志聚合,可以使用 Zipkin 服务器。在 Spring Boot 应用程序中,需要添加以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
然后,在应用程序的配置文件中添加以下配置:
spring.zipkin.base-url = http://localhost:9411
spring.sleuth.sampler.probability = 1.0
其中,spring.zipkin.base-url
是 Zipkin 服务器的地址,spring.sleuth.sampler.probability
是 Sleuth 的采样率,这里设置为 1.0 代表全部采样。
- 启动 Zipkin 服务器
在 Zipkin 服务器上运行以下命令启动 Zipkin 服务器:
java -jar zipkin-server-2.23.0-exec.jar
然后访问 Zipkin 服务器的 Web 界面,可以查看到分布式链路跟踪信息。
以上就是 Spring Cloud Sleuth 的实现和使用。Spring Cloud Sleuth 可以跟踪分散在不同微服务中的请求,生成一条完整的分布式事务链路,通过集成 Zipkin 服务器可以实现分布式链路跟踪和日志聚合,方便开发者快速定位和解决分布式应用中的问题。