Sleuth简介 #
一、Sleuth概述 #
1.1 什么是链路追踪 #
链路追踪用于追踪请求在微服务间的调用链路,帮助定位性能问题和故障。
text
请求链路:
客户端 ──► 服务A ──► 服务B ──► 服务C
│
└──► 服务D
Trace: 1234567890
├── Span: service-a (10ms)
├── Span: service-b (20ms)
│ ├── Span: service-c (5ms)
│ └── Span: service-d (8ms)
1.2 核心概念 #
| 概念 | 说明 |
|---|---|
| Trace | 一次完整请求的链路 |
| Span | 一个服务处理过程 |
| TraceId | 全局唯一链路ID |
| SpanId | 当前Span唯一ID |
二、基本使用 #
2.1 添加依赖 #
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
2.2 日志配置 #
xml
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId},%X{spanId}] [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
2.3 日志输出 #
text
2024-01-01 12:00:00.000 [1234567890,abcdef1234] [http-nio-8080-exec-1] INFO c.e.UserController - User request
三、手动创建Span #
java
@Autowired
private Tracer tracer;
public void doSomething() {
Span span = tracer.nextSpan().name("custom-span");
try (Tracer.SpanInScope ws = tracer.withSpan(span.start())) {
span.tag("key", "value");
span.event("event-name");
} finally {
span.end();
}
}
四、总结 #
| 要点 | 说明 |
|---|---|
| Trace | 完整请求链路 |
| Span | 服务处理过程 |
| 日志集成 | 自动注入TraceId |
接下来让我们学习 Zipkin集成!
最后更新:2026-03-28