Sleuth链路追踪是非常重要的微服务组件,也是大厂经常考察的,下面我就全面来详解Sleuth链路追踪@mikechen
Sleuth定义
Spring Cloud Sleuth 是 Spring Cloud的链路追踪组件,实现了分布式跟踪解决方案。
什么是链路追踪
链路追踪就是将一次分布式请求,还原成调用链路,进行:日志记录、性能监控、并将一次分布式请求的调用情况集中展示。
比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
Sleuth作用
随着微服务架构的流行,服务按照不同的维度进行拆分,在复杂的微服务架构系统中,会形成一个复杂的分布式服务调用链路,如下图所示:
面对复杂的调用链路就带来一系列问题:
- 如何快速发现问题?
- 如何判断故障影响范围?
- 如何梳理服务依赖以及依赖的合理性?
- 如何分析链路性能问题以及实时容量规划?
而链路追踪的出现正是为了解决这种问题,它可以在复杂的服务调用中定位问题。
Sleuth原理
Sleuth核心概念
Spring Cloud Sleuth采用的是Google的开源项目Dapper的专业术语,span、Trace、Annotations。
Spring Clpud Sleuth 实现分布式系统中的服务跟踪功能,主要在于这三个关键点:
1.Span基本工作单元
例如:每次发送一个远程调用服务就会产生一个 Span,Span通过一个64位ID唯一标识,span还有其他数据信息,比 如摘要、时间戳事件、关键值注释(tags)、span的ID、以及进度ID(通常是IP地址) span在不断的启动和停止,同时记录了时间信息,当你创建了一个span,你必须在未来的某个时 刻停止它。
通过计算 Span 的开始和结束时间,就可以统计每个服务调用所花费的时间。。
2.Trace
一系列spans组成的一个树状结构,例如:如果你正在跑一个分布式大数据工程,你可能 需要创建一个Trace。
一个 Trace 认为是一次完整的链路,内部包含 n 多个 Span,Trace 和 Span 存在一对多的关系,Span 与 Span 之间存在父子关系。
3.Annotations
用来及时记录一个事件的存在,一些核心 annotations 用来定义一个请求的开始和结束。
Sleuth基本原理
Sleuth基本原理很简单,就是在入口生成(traceid,spanid),并在调用中将traceid传递下去。
如下图所示:显示了Span和Trace在系统中的外观。
每个颜色的注解表明一个span,总计7个spans,从A到G。
Sleuth使用
通过查看日志分析微服务的调用链路并不是一个很直观的方案,Sleuth可以结合Zipkin可以很直观地显示微服务之间的调用关系。
如果你要追踪的服务实例,Sleuth的使用分为如下2步:
1.添加Maven依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
2.添加配置
spring: zipkin: base-url: http://localhost:9411 #zipkin的服务地址,完成数据的展示 sleuth: sampler: probability: 1 #采样率 1为全部采集,实际开发0.5即可
3.后台显示
然后就可以启动服务了,服务的调用在后台的zipkin界面会有显示,如下图所示:
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》