第10章-Sletuh调用链
# 10.1 Sleuth介绍
# 10.1.1 Sleuth简介
Sleuth是一个Spring Cloud的分布式跟踪解决方案
Sleuth是调用链监控的客户端,负责产生监控数据
# 10.1.2 Sleuth术语
Span(跨度):Sleuth的基本工作单元,它用一个64位的id唯一标识。除ID外,spah还包含其他数据,例如描述、时间戳事件、键值对的注解(标签)、span ID、span父ID等。
上一节图中表格的一条数据就是一个Span
trace(跟踪):一组span组成的树状结构称为trace
上一节图中表格的所有数据就是trace
Annotatio(标注)
- CS(Client Sent客户端发送):客户端发起一个请求,该annotation描述了span的开始。
- SR(Server Received 服务器端接收):服务器端获得请求并准备处理它。
- SS(Server Sent 服务器端发送):该annotation表明完成请求处理(当响应发回客户端时)。
- CR(Client Received 客户端接收):span结束的标识。客户端成功接收到服务器端的响应。
# 10.1.3 整合Sleuth
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
2
3
4
不需要做配置和注解,Sleuth就整合好了,启动服务可以观察到日志形式变了
2021-03-18 10:44:13.559 INFO [user-center,,,] 16408 --- [lientSelector_1] RocketmqRemoting : closeChannel: close the connection to remote address[] result: true
2021-03-18 10:44:14.630 WARN [user-center,351c4abde1a39181,351c4abde1a39181,true] 16408 --- [nio-8001-exec-1] c.l.usercenter.auth.CheckLoginAspect : token check failed, token=null
2
日志中括号中有四项信息,以[user-center,351c4abde1a39181,351c4abde1a39181,true]
为例,信息含义分别为:
- user-center:服务名称
- 351c4abde1a39181:trace id
- 351c4abde1a39181: span id
- true:是否上传到zipkin
还可以配置
logging.org.springframework.cloud.sleuth=debug
,来观察更详细的日志
# 10.2 Zipkin搭建与整合
Zipkin是Twitter开源的分布式跟踪系统,主要用来收集系统的时序数据,从而追踪系统的调用问题
搭建Zipkin Server
下载zipkin的jar包之后,使用java -jar zipkin.jar
启动,浏览器访问 http://localhost:9411
查看Zipkin记录的内容
参考:
整合zipkin
第一步:加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
2
3
4
上述依赖中引入了sleuth依赖,添加后就不需要sleuth依赖了
第二步:写配置
# Zipkin Server的地址
spring.zipkin.base-url=http://localhost:9411/
# 请求取样率,上报到zipkin的trace比例,默认是 0.1(10%),这里为了测试方便配置所有trace都上传
spring.sleuth.sampler.proability: 1.0
2
3
4
此时启动服务,调用服务上的端点,就可以在Zipkin控制台查看请求的记录情况了
参考:
# 10.3 Zipkin持久化
# 10.3.1 数据持久化
前面实例中Zipkin中的数据是基于内存的,不适用与生产。Zipkin的存储组件支持将数据存储在内存、Cassandra、Elasticsearch和MySQL中,官方文档中介绍如果存在MySQL性能不优。这里以使用Elasticsearch进行持久化为例。
非常简单,只需要启动ES实例,然后在启动zipkin server的时候加上相关环境变量即可。以下步骤为最简单示例:
- 启动ES
- 启动Zipkin Server:
STORAGE_TYPE=elasticsearch ES_HOSTS=http://myhost:9200 java -jar zipkin.jar
参考:
# 10.3.2 生成调用链接
有请求记录后,在Zipkin控制台上可以查看服务依赖关系,但是如果使用了数据持久化,就无法生成了。根据官方文档,需要使用执行一个任务来生成依赖图
根据官方文档 (opens new window),执行操作后即可生成。