Sleuth是一个SpringCloud的分布式跟踪解决方案
一、术语
- Span(跨度):Sleuth的基本工作单元,他用一个64位的id唯一标识。除ID外,span还包含其他数据,例如:描述、时间戳事件、键值对的注解(标签)、spanID、span父ID等
- trace(跟踪):一组span组成的树状结构称为trace
Annotation(标注):
CS(ClientSent客户端发送):客户端发起一个请求,该annotation描述了span的开始;
SR(ServerReceived服务器端接收):服务器端获得请求并准备处理它;
SS(ServerSent服务器端发送):该annotation表明完成请求处理(当响应发回客户端时);
CR(ClientReceived客户端接收):span结束的标识。客户端成功接收到服务器端的响应。
二、Zipkin的搭建与整合
Zipkin是Twitter开源的分布式跟踪系统,主要用来收集系统的时序数据,从而追踪系统的调用问题
搭建ZipkinServer
参考:https://www.imooc.com/article/291572
启动ZipkinServer,命令:java -jar zipkin-server-2.12.9-exec.jar
浏览器访问地址:http://localhost:9411
三、为用户中心整合Sleuth和Zipkin
3.1、在pom.xml中添加依赖
<!-- 使用Zipkin之后,Sleuth就不需要了,因为Zipkin已经包含了Sleuth -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
3.2、 在application.yml中添加属性
spring:
zipkin:
base-url: http://localhost:9411/
sleuth:
sampler:
#抽样率,默认0.1(10%),设置为1.0表示所有的数据都会上报给Zipkin
probability: 1.0
3.3、测试:启动用户中心
http://localhost:8081/users/1
3.4、整合Zipkin之后Nacos报错解决
参考:https://www.imooc.com/article/291578
只需要添加discoveryClientEnabled属性就可以解决问题
spring:
zipkin:
base-url: http://localhost:9411/
sleuth:
sampler:
#抽样率,默认0.1(10%),设置为1.0表示所有的数据都会上报给Zipkin
probability: 1.0
#将Zipkin地址设置为绝对地址,nacos不会将其认作是一个服务名称,从而解决nacos报错
discoveryClientEnabled: false
四、Zipkin数据持久化
Zipkin数据持久化依赖Elasticsearch数据库
下载地址:下载6.8.2
https://www.elastic.co/cn/downloads/past-releases#elasticsearch
启动Elasticsearch,在bin目录执行命令:./elasticsearch
浏览器访问:http://localhost:9200/
启动Zipkin时需要指定STORAGE_TYPE和ES_HOSTS环境变量来完成持久化
命令:STORAGE_TYPE=elasticsearch ES_HOSTS=localhost:9200 java -jar zipkin-server-2.12.9-exec.jar
五、 Zipkin的环境变量
环境变量 | 描述 |
STORAGE_TYPE | 指定存储类型,可选项为elasticsearch、mysql、cassandra等 |
ES_PIPELINE | 指定span被索引之前的pipeline(pipeline是Elasticsearch的概念) |
ES_TIMEOUT | 连接Elasticsearch的超时时间,单位是毫秒;默认10000(10秒) |
ES_INDEX | Zipkin所使用的索引(Zipkin会每天建索引)前缀,默认是zipkin |
ES_DATA_SEPARATOR | Zipkin建立索引的日期分隔符,默认是- |
ES_INDEX_SHARDS | shard(shard是Elasticsearch的概念)个数,默认5 |
ES_IMDEX_REPLICAS | 副本(replica是Elasticsearch的概念)个数,默认1 |
ES_USERNAME/ES_PASSWORD | Elasticsearch账号密码 |
ES_HTTP_LOGGING | 控制Elasticsearch API的日志级别,可选项为BASIC、HEADERS、BODY |
特别声明:本系列教程(SpringCloudAlibaba)参考自慕课网大目老师提供的网上视频课程,有需要的同学可以自行搜索学习