SpringCloud分布式链路追踪组件Sleuth配置详解
什么是Sleuth
Sleuth是Spring Cloud的一个分布式跟踪解决方案,主要解决微服务架构下的复杂分布式系统中的链路追踪问题。它通过为每个请求分配唯一的traceId和spanId,来实现对分布式系统中各个微服务请求的跟踪。Sleuth通过将traceId和spanId绑定到每个服务请求的Header中,并将请求传递给下游服务,实现了整个分布式系统的链路追踪工作。
Sleuth的配置
添加依赖
首先,在pom.xml
文件中添加Sleuth的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
配置Sleuth参数
在配置文件中添加Sleuth的参数:
spring:
sleuth:
sampler:
probability: 1.0 # 抽样率
traceId128: true # TraceID是否使用128位
其中sampler.probability
用于控制采样率,默认值为0.1,即只有10%的请求会进行链路追踪;traceId128
用于控制TraceID是否使用128位,默认为false。
示例1:打印请求链路信息
在Controller中通过调用Tracer.getCurrentSpan()
方法来获取当前请求对应的Span,从而获取TraceId和SpanId。示例如下:
@RestController
public class HelloController {
@Autowired
private Tracer tracer;
@GetMapping("/hello")
public String hello() {
Span currentSpan = tracer.currentSpan();
System.out.println("TraceId: " + currentSpan.context().traceId());
System.out.println("SpanId: " + currentSpan.context().spanId());
return "hello";
}
}
示例2:记录请求耗时
在请求的开始和结束处记录时间,计算请求的耗时时间。示例如下:
@RestController
public class HelloController {
@Autowired
private Tracer tracer;
private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
@GetMapping("/hello")
public String hello() {
long startTime = System.currentTimeMillis();
String result = "hello";
long endTime = System.currentTimeMillis();
logger.info("TraceId: {}, Time: {}", tracer.currentSpan().context().traceId(), (endTime - startTime));
return result;
}
}
通过在控制台中查看输出日志,就可以在Sleuth中查看请求的链路信息和请求耗时时间。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringCloud分布式链路追踪组件Sleuth配置详解 - Python技术站