7. Spring Cloud Sleuth+ZipKin 链路监控的配置详细解析
7. Spring Cloud Sleuth+ZipKin 链路监控的配置详细解析
@
前言:
- 对应上一篇学习内容:???6. Spring Cloud Gateway网关超详细内容配置解析说明-CSDN博客
- 对应下一篇学习内容:???
1. Spring Cloud Sleuth + ZipKin 的概述
Spring Cloud Sleuth 的官方文档地址:https://github.com/spring-cloud/spring-cloud-sleuth
1.1 Sleuth / ZipKin 是什么 ?
- 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用 ,来协同产生最后的请求结果,每一个请求都会形成一条复杂的分布式服务调用链路。
- 链路中的任何一条出现高延时 或错误 都会引起整个请求最后的失败,因此对整个服务的调用进行链路追踪和分析 就非常的重要。
而
Spring Cloud Sleuth
就是来解决这个我们在整个服务的调用的过程的各个服务节点上的链路追踪+链路分析的 。+ ZipKin 在这整个服务的调用过程的数据搜集+存储+可视化
。
在微服务系统中,少则五六个服务,多则上百个服务,如果某个环节出现问题了,一次调用可能涉及到很多服务,如果服务之间的日志没有关联,那么排查起来非常困难,这个时候就需要链路追踪 。
链路追踪 可以可视化 地追踪请求从一个微服务到另一个微服务的调用情况,从而帮助问题的排查。另外一个方面就是链路追踪还可以帮助优化性能,可视化服务之间的依赖关系,并进行服务的监控 与报警 。
简单的实现就是在日志中定义一个统一的 TraceId
,串联整体调用链路,每个服务之间还会定义一个 spanId
,标志服务内的调用链路 。
Spring Cloud 中常用的微服务链路追踪方案:
Spring Cloud Sleuth + ZipKin(组合使用简单,集成度高,是 Spring Cloud 生态中常用的链路追踪解决方案)
- Spring Cloud Sleuth : 是 Spring Cloud 提供的分布式链路追踪库,它会在每个请求中自动生成
Trace ID
和Span ID
,并将这些 ID 传递到调用链中的所有服务中,确保请求的追踪信息在各个微服务之间的传递。- ZipKin :是一种分布式追踪系统,支持收集和展示 Spring Cloud Sleuth 生成的追踪数据。她能够将每个请求详细路径进行可视化展示,便于开发者分析和排查问题。
1.2 Sleuth 和 Zipkin 的简单关系图:
重点:
- Sleuth 做
链路追踪
,ZipKin 做数据搜集+存储+可视化
。- Sleuth 提供了一套完整的服务跟踪的解决方案 ,并兼容 ZipKin(数据收集) 。
1.3 Sleuth 工作原理解析
Span 和 Trace 在一个系统中使用 Zipkin 的过程-图形化。如下图所示:
讲解说明:
- 表示一请求链路,一条链路通过
Trace Id
唯一标识,Span
标识发起的请求信息,各span
通过parent id
关联起来。- Trace: 类似于树结构的
Span
集合,表示一条调用链路,存在唯一标识 。- Span: 基本工作单元,表示调用链路来源,通俗的理解
span
就是一次请求信息。
- Trace ID: 表示整个调用链的唯一标识。当一个请求发起时,系统会生成一个 Trace ID,用于表示该请求在整个系统中的流转路径。
- Trace: 是由一系列 Span 组成,呈树状结构。请求一个微服务系统的
API
接口,整个API接口需要调用多个微服务单元,调用每个微服务单元都会产生一个新的 Span,所有由这个请求产生的 Span 组成了整个 Trace - Span ID: 每个服务处理请求的一个单元称为一个
Span
,每个 Span 都有一个唯一的Span ID
。Span 记录了每个微服务在调用链中的处理时间,日志和元数据。 - Span: 是基本工作单元,发送一个远程调度任务就会产生一个 Span ,Span是用一个 64位ID,唯一标识的,Trace 是用另一个64位ID 唯一标识的,Span 还包含了其它信息,例如:摘要,时间戳事件,Span的ID以及进程ID。
- Span 关系: Span 之间可以有父子关系 ,一个 Trace 可以包含多个 Span ,用于描述微服务之间的调用关系。这些关系构成了调用链树。
spans 的 parent/child 关系图形化
讲解说明:
- 注意
看老师标识的红线
,后
一个 span节点的parent Id
指向/记录 的是 上一个Span
。- span就是一次请求信息,多个Span集合就构成一条调用链路,在span=C 这个节点存在分支。Sleuth/ZipKin-搭建链路监控实例。
2. Sleuth + ZipKin 的安装 + 运行
安装 Sleuth 的官网网址:https://repo1.maven.org/maven2/io/zipkin/java/zipkin-server/2.12.9/
下载得到 : zipkin-server-2.12.9-exec.jar
把 zipkin-server-2.12.9-exec.jar 放到指定的目录 , 比如 G:\dev
在该(G:\dev)目录下,进入 cmd , 执行指令运行: java -jar zipkin-server-2.12.9-exec.jar
java -jar zipkin-server-2.12.9-exec.jar
浏览器输入:http://localhost:9411/zipkin/。注意:不要关闭命令窗口,不要关闭 刚刚运行的ziplin程序 。
3. Sleuth / ZipKin-搭建链路监控实例
需求说明/图解
在浏览器输入 : http://localhost/member/consumer/get/1 , 会返回对应的结果(如图)
要求: 通过 Sleuth 和 Zipkin 可以对服务调用链路进行监控, 并在 Zipkin 进行显示(如 图)
- 修改我们前面 member-service-provider-10000 的 模块当中的,
pom.xml
, 增加引入 sleuth+zipkin。
<!--包含了 sleuth+zipkin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
- 修改 member-service-provider-10000 的模块当中的
appliaction.xml
, 指定 Zipkin的同时,配置 sleuth 信息如下:
server:
port: 10000
spring:
application:
name: member-service-provider # 配置应用的名称
# 配置 sleuth 和 zipkin
zipkin:
# 配置 zipkin 的 url 地址,是网络当中给的哪个 zipkin 地址
base-url: http://localhost:9411/
# 配置 sleuth 信息
sleuth:
sampler:
# 采样率: 在 0~1之间,1表示全部采集
probability: 1
- 服务消费方集成 Sleuth/Zipkin:修改 member-service-consumer-80 的模块当中的
pom.xml
, 增加引入sleuth+zipkin
即可。
<!--包含了 sleuth+zipkin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
- 修改 member-service-consumer-80 的模块
appliaction.xml
, 指定 Zipkin的同时,配置 sleuth 信息如下:
server:
port: 80 # 浏览器默认就是 80 端口
spring:
application:
name: member-service-consumer-80 # 该项目/模块名称
# 配置 zipkin + sleuth 信息
zipkin:
# zipkin 网络当中的哪个 zipkin
base-url: http://localhost:9411
# 配置 sleuth 信息
sleuth:
sampler:
# 采样率: 在0-1之间 ,1表示全部采集
probability: 1
测试:
- 启动 e-commerce-eureka-server-9001
- 启动 member-service-provider-10000
- 启动 member-service-consumer-80
- 浏览器: 浏览器输入: http://localhost/member/consumer/get/1
浏览器输入: http://localhost/member/consumer/get/1 , 多访问几次,方便看监控结果:
查看监控&分析结果:
查看 Zipkin : http://localhost:9411/zipkin/:
选择某个服务,看结果:
查看一次调用链路的深度,以及该链路包含请求 各个请求耗时,找到请求瓶颈,为 ,
优化提供依据(重要):
查看服务调用的依赖关系:
4. 总结:
- 简单的实现就是在日志中定义一个统一的
TraceId
,串联整体调用链路,每个服务之间还会定义一个spanId
,标志服务内的调用链路 。 - Spring Cloud Sleuth + ZipKin(组合使用简单,集成度高,是 Spring Cloud 生态中常用的链路追踪解决方案)
- Spring Cloud Sleuth : 是 Spring Cloud 提供的分布式链路追踪库,它会在每个请求中自动生成
Trace ID
和Span ID
,并将这些 ID 传递到调用链中的所有服务中,确保请求的追踪信息在各个微服务之间的传递。 - ZipKin :是一种分布式追踪系统,支持收集和展示 Spring Cloud Sleuth 生成的追踪数据。她能够将每个请求详细路径进行可视化展示,便于开发者分析和排查问题。
- Spring Cloud Sleuth : 是 Spring Cloud 提供的分布式链路追踪库,它会在每个请求中自动生成
5. 最后:
“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”