Sleuth最全详解(作用原理及使用步骤)

Sleuth最全详解(作用原理及使用步骤)

Sleuth链路追踪是非常重要的微服务组件,是构建微服务的基石,下面我就全面来详解Sleuth链路追踪@mikechen

Sleuth定义

Sleuth链路追踪,是一种用于监视、和跟踪分布式系统中请求的传播路径的技术。

Sleuth链路追踪,也是Spring Cloud Sleuth库的一个关键功能,允许你跟踪分布式系统中请求的传播路径。

 

Sleuth作用

在复杂的微服务架构系统中,一个请求可能需要经过多个服务、和组件的处理,形成了一个复杂的服务调用链路。

如下图所示:

Sleuth最全详解(作用原理及使用步骤)

就会出现如下问题:

  • 当一个请求在系统中出现问题时,很难迅速定位问题的根源。
  • 每个服务的响应时间、吞吐量和资源利用率,以及服务之间的调用关系,如何跟踪?
  • 以及服务之间的调用关系非常复杂,开发人员很难理解整个系统的调用关系,以及每个服务之间的依赖关系。

因此,对于复杂的微服务架构系统,链路追踪工具和技术变得尤为重要了。

 

Sleuth原理

Sleuth的原理,如下图所示:

Sleuth最全详解(作用原理及使用步骤)

Sleuth的工作原理主要涉及三个核心概念:Span、Trace和Annotations。

1. Span(跨度)

  • Span是Sleuth中的基本工作单元,代表着系统中的一个工作单元。
  • 每个Span都有自己的唯一标识符(spanId),以及所属的Trace的标识符(traceId)。
  • 在分布式系统中,一个请求会由多个Span组成,它们共同构成了请求的传播路径。

2. Trace(跟踪):

  • Trace是由一系列Span组成的有向无环图(DAG),代表着一个请求在系统中的传播路径。
  • 每个Trace都有一个唯一的标识符(traceId),它用于标识整个请求链路。
  • 通过跟踪Trace,开发人员可以了解请求在系统中的整个传播路径,从而进行故障排除和性能优化。

3. Annotations(注解):

  • Annotations是Span中的一种注解,用于记录Span的各种事件和操作。
  • Sleuth预定义了一些常见的Annotations,如:Client Send(客户端发送请求)、Client Receive(客户端接收响应)、Server Send(服务端接收请求)等。
  • 开发人员还可以自定义Annotations,以记录特定操作或事件。

一句话总结:Span代表着系统中的一个工作单元,Trace代表着一个请求在系统中的传播路径,而Annotations则用于记录Span中的各种事件和操作。

 

Sleuth使用

1、添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

 

2、编写业务代码

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class MyController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/my-endpoint")
    public String myEndpoint() {
        // 发起一个外部服务调用
        restTemplate.getForObject("http://example.com/api/resource", String.class);
        return "Request processed successfully!";
    }
}

 

3、运行程序

在日志中查看Sleuth自动生成的traceId和spanId,以及记录了请求的传播路径。

Sleuth最全详解(作用原理及使用步骤)

[traceId=5b65bc9a15f3580f,spanId=5b65bc9a15f3580f] Received GET request for /api/resource
[traceId=5b65bc9a15f3580f,spanId=bd2a558185f3580f,parent=5b65bc9a15f3580f] Processed GET request for /api/resource
[traceId=5b65bc9a15f3580f,spanId=05d141cc35f3580f,parent=bd2a558185f3580f] Sending response for GET request for /api/resource

Sleuth将自动为每个请求生成traceId和spanId,并记录请求的传播路径,帮助你更好地理解系统的行为和性能。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧