spring_boot_sleuth实践
简介
官网: https://docs.spring.io/spring-cloud-sleuth/docs/current/reference/html/
Sleuth是Spring cloud的分布式跟踪解决方案。
提供链路追踪: 通过sleuth可以很清楚的看出一个请求经过了哪些服务,可以方便的理清服务局的调用关系。
性能分析: 通过sleuth可以很方便的看出每个采集请求的耗时,分析出哪些服务调用比较耗时,当服务调用的耗时。随着请求量的增大而增大时,也可以对服务的扩容提供一定的提醒作用。
数据分析、优化链路:对于频繁地调用一个服务,或者并行地调用等,可以针对业务做一些优化措施。
可视化:对于程序未捕获的异常,可以在zipkpin界面上看到。
术语
span(跨度),基本工作单元。一次链路调用,创建一个span,
span用一个64位id唯一标识。包括:id,描述,时间戳事件,spanId,span父id。
span被启动和停止时,记录了时间信息,初始化span叫:root span,它的span id和trace id相等。
trace(跟踪),一组共享“root span”的span组成的树状结构 称为 trace,trace也有一个64位ID,trace中所有span共享一个trace id。类似于一颗 span 树。
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 开始
搭建sleuth
Gateway、sevice-a、service-b添加以下依赖
1 |
|
启动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 |
|
1 |
|
下载zipkin server
入门:https://zipkin.io/pages/quickstart
1 |
|
这时访问:http://localhost:9000/service-a/test2
点击:找到一个痕迹。再点击 run query。发现一个trace。点击show。
流程
sleuth收集跟踪信息通过http请求发送给zipkin server,zipkin将跟踪信息存储,以及提供RESTful API接口,zipkin ui通过调用api进行数据展示。
默认内存存储,可以用mysql,ES等存储。