spring_boot_sleuth实践

简介

官网: https://docs.spring.io/spring-cloud-sleuth/docs/current/reference/html/

Sleuth是Spring cloud的分布式跟踪解决方案。

提供链路追踪: 通过sleuth可以很清楚的看出一个请求经过了哪些服务,可以方便的理清服务局的调用关系。
性能分析: 通过sleuth可以很方便的看出每个采集请求的耗时,分析出哪些服务调用比较耗时,当服务调用的耗时。随着请求量的增大而增大时,也可以对服务的扩容提供一定的提醒作用。
数据分析、优化链路:对于频繁地调用一个服务,或者并行地调用等,可以针对业务做一些优化措施。
可视化:对于程序未捕获的异常,可以在zipkpin界面上看到。

术语

  1. span(跨度),基本工作单元。一次链路调用,创建一个span,

    span用一个64位id唯一标识。包括:id,描述,时间戳事件,spanId,span父id。

    span被启动和停止时,记录了时间信息,初始化span叫:root span,它的span id和trace id相等。

  2. trace(跟踪),一组共享“root span”的span组成的树状结构 称为 trace,trace也有一个64位ID,trace中所有span共享一个trace id。类似于一颗 span 树。

  3. annotation(标签),annotation用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。

    • CS(Client Send客户端发起请求)。客户端发起请求描述了span开始。
    • SR(Server Received服务端接到请求)。服务端获得请求并准备处理它。SR-CS=网络延迟。
    • SS(Server Send服务器端处理完成,并将结果发送给客户端)。表示服务器完成请求处理,响应客户端时。SS-SR=服务器处理请求的时间。
    • CR(Client Received 客户端接受服务端信息)。span结束的标识。客户端接收到服务器的响应。CR-CS=客户端发出请求到服务器响应的总时间。

其实数据结构是一颗树,从root span 开始

spring_cloud_sleuth调用流程

搭建sleuth

Gateway、sevice-a、service-b添加以下依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

启动eureka、service-a、service-b、gateway

调用http://localhost:9000/service-a/test2

gateway服务

TRACE [gateway,4c3632900494bee6,4c3632900494bee6,true]

service-a服务

DEBUG [service-a,4c3632900494bee6,3cbbc2dd6e73f7c4,true]

service-b服务

DEBUG [service-b,4c3632900494bee6,f0fcaca12060dc88,true]

[服务名称,traceId(一条请求调用链中 唯一ID),spanID(基本的工作单元,获取数据等),是否让zipkin收集和展示此信息]

添加zipkin

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
1
2
3
4
5
6
7
8
spring:
#zipkin
zipkin:
base-url: http://localhost:9411/
#采样比例1
sleuth:
sampler:
rate: 1

下载zipkin server

官网 https://zipkin.io/

入门:https://zipkin.io/pages/quickstart

1
2
curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar

这时访问:http://localhost:9000/service-a/test2

再访问http://localhost:9411/

点击:找到一个痕迹。再点击 run query。发现一个trace。点击show。

流程

sleuth收集跟踪信息通过http请求发送给zipkin server,zipkin将跟踪信息存储,以及提供RESTful API接口,zipkin ui通过调用api进行数据展示。

默认内存存储,可以用mysql,ES等存储。


spring_boot_sleuth实践
http://hanqichuan.com/2022/06/30/spring_cloud/spring_cloud_sleuth实践/
作者
韩启川
发布于
2022年6月30日
许可协议