简介
在分布式系统中,微服务有多个,服务之间调用关系也比较复杂,如果有的微服务网络或者服务器出现问题会导致服务提供失败,如何快速便捷的去定位出现问题的微服务,SpringCloud Sleuth 给我们提供了解决方案,它集成了Zipkin、HTrace 链路追踪工具,用服务链路追踪来快速定位问题。Zipkin使用较多。Zipkin 主要由四部分构成:收集器、数据存储、查询以及 Web 界面。Zipkin 的收集器负责将各系统报告过来的追踪数据进行接收;而数据存储默认使用 Cassandra,也可以替换为 MySQL;查询服务用来向其他服务提供数据查询的能力,而 Web 服务是官方默认提供的一个图形用户界面。
Sleuth Zipkin下载启动
- Zipkin-server 下载地址 : zipkin-server
- 运行命令 :
java - jar
文件名 - 如图
访问Zipkin控制台
- Zipkin默认端口号 :
9411
- 浏览器地址栏输入 :
http://localhost:9411/zipkin/
即可访问 - 如图
- 由于项目没有整合Zipkin,所有Zipkin控制台没有要进行追踪的微服务。
Zipkin术语
-
Span:基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识,trace以另一个64位ID表示,span还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span的ID、以及进度ID(通常是IP地址),span在不断的启动和停止,同时记录了时间信息,当你创建了一个span,你必须在未来的某个时刻停止它。 可以简单理解为一次请求到响应的信息
-
Trace:一系列spans组成的一个树状结构,例如,如果你正在跑一个分布式大数据工程,你可能需要创建一个trace。
-
Annotation:用来及时记录一个事件的存在,一些核心annotations用来定义一个请求的开始和结束 :
-
Client Sent : 客户端发起一个请求,这个annotion描述了这个span的开始。Server Received -服务端获得请求并准备开始处理它,如果将其sr减去cs时间戳便可得到网络延迟。
-
Server Sent -注解表明请求处理的完成(当请求返回客户端),如果ss减去sr时间戳便可得到服务端需要的处理请求时间
-
Client Received : 表明span的结束,客户端成功接收到服务端的回复,如果cr减去cs时间戳便可得到客户端从服务端获取回复的所有所需时间
整合Zipkin
- 在服务模块, pom文件添加Zipkin依赖
<!-- 引入 zipkin 的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
- yml文件配置zipkin
spring:
zipkin:
# 当前服务整合zipkin,会将span执行的过程数据交给zipkin服务处理
base-url: http://localhost:9411
sleuth:
sampler:
# 采样率0~1,值越大收集数据越多
probability: 1
- 用户模块整合Zipkin 步骤配置和服模块务整合Zipkin一样
- 之后运行即可查看控制台服务链路追踪
- 查看依赖关系如图