一、剖析调用链监控原理
1. 需求
- 跨微服务的API调用发生异常,要求快速定位出问题出在哪里;
- 跨微服务的API调用发生性能瓶颈,要求迅速定位出性能瓶颈。
2. 调用链监控原理
3. 常用调用链监控工具
- Spring Cloud Sleuth + Zipkin
- Skywalking、Pinponit
二、整合Sleuth
1.什么是Sleuth
Sleuth是一个Spring Cloud的分布式跟踪解决方案。
2. Sleuth
- **Span(跨度):**Sleuth的基本工作单元,它用一个64位的ID唯一标识。除ID外,span还包含其他数据,如描述、时间戳事件、键值对的注解(标签)、span ID、Span父ID等。
- **trace(跟踪):**一组span组成的树状结构称为trace。
- Annotation(标注):
- **CS(Client Sent 客户端发送):**客户端发起一个请求,该annotation描述了一个span的开始;
- **SR(Server Received 服务器端接收):**服务器端获得请求并准备处理它;
- **SS(Server Send 服务器端发送):**该annotation表明完成请求处理(当响应发回客户端时);
- **CR(Client Received 客户端接收):**span结束的标识。客户端成功接收到服务器端的响应。
3. 整合Sleuth
-
pom.xml
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
-
应用报异常时,控制台日志
三、Zipkin搭建与整合
1. 什么是Zipkin
Zipkin是Twitter开源的分布式跟踪系统,主要用来收集系统的时序数据,从而追踪系统的调用问题。
2. 搭建Zipkin Server
3. Zipkin控制台
访问http://localhost:9411
4. 整合Zipkin
-
pom.xml
当使用spring-cloud-starter-zipkin之后,就不需要spring-cloud-starter-sleuth这个坐标了,因为spring-cloud-starter-zipkin已经包含了spring-cloud-starter-sleuth
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
-
写配置
spring: zipkin: base-url: http://localhost:9411/ sleuth: sampler: # 抽样率,默认是0.1(10%,表示90%的数据都会丢弃) #1.0表示100%,表示所有数据都会上报给zipkin probability: 1.0
-
控制台显示调用详情
5. 整合Zipkin后Nacos报错解决
整合zipkin后控制台一直报nacos的异常,原因是Nacos把Zipkin Server地址当成了一个微服务,而Zipkin Server并不是一个微服务,且官方也不允许把Zipkin Server注册成一个微服务。
**解决方法:**设置 discovery-client-enabled: false
spring:
zipkin:
base-url: http://localhost:9411/
# 是否把zipkin注册为微服务
discovery-client-enabled: false
sleuth:
sampler:
# 抽样率,默认是0.1(10%,表示90%的数据都会丢弃)
#1.0表示100%,表示所有数据都会上报给zipkin
probability: 1.0
6. 为所有微服务整合Zipkin
为每一个微服务添加相同的坐标与配置即可,在控制台就能查询到微服务之间的调用情况
7. Zipkin数据持久化
-
支持的数据持久化方式:
- MySQL
- ElasticSearch
- Cassandra
-
数据持久化的官方文档
-
使用ElasticSearch对Zipkin数据持久化
-
搭建ElasticSearch
ES7.0以后的版本需要jdk11的支持
根据系统选择下载对应版本:
下载后解压,进入
bin
目录:然后
./elasticsearch
就可以启动ES了./elasticsearch –d
表示后台运行访问http://localhost:9200,能够看到以下界面,说明ES已经启动成功
-
让Zipkin使用ES存储数据
Zipkin提供了很多的环境变量,配置这些环境变量就可以把数据存入ES了
如:
-
-
关系依赖图的显示
尽管使用ES实现了对Zipkin的数据持久化,但其关系依赖图却没有展示出来
官方文档解释:
点击
spark job
,其实就是Zipkin-dependencies:Zipkin-dependencies使用ElasticSearch的环境变量:
Zipkin-dependencies指定分析日期的数据:
四、其他的微服务监控
1. Spring Boot Admin
为Spring Boot量身打造的一个简单易用的监控数据管理工具