前言:
将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点的耗时情况,请求具体到哪个机器上,以及服务节点的请求状态等;
微服务现状
技术(基于google的Dapper)
Span:Span包括一个64位的唯一ID,一个64位trace码,描述信息,时间戳事件,key-value 注解(tags),span处理者的ID(通常为IP)。
Trace:一组Span形成的树形结构。
- Twitter的Zipkin
- 阿里的鹰眼
- 美团的Mtrace
- 大众点评的cat
SpringCloud Sleuth 结合Zipkin
1.SpringCloud Sleuth特点
特点 | 说明 |
---|---|
提供链路追踪 | 通过sleuth可以很清楚的看出一个请求经过了哪些服务,可以方便的理清服务局的调用关系 |
性能分析 | 通过sleuth可以很方便的看出每个采集请求的耗时,分析出哪些服务调用比较耗时,当服务调用的耗时随着请求量的增大而增大时,也可以对服务的扩容提供一定的提醒作用 |
数据分析优化链路 | 对于频繁地调用一个服务,或者并行地调用等,可以针对业务做一些优化措施 |
可视化 | 对于程序未捕获的异常,可以在zipkpin界面上看到 |
2.导入sleuth依赖
需要监控的微服务都需要添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
3.需要打印日志的服务添加application.yml配置
#
logging:
level:
root: info
org.springframework.web.servlet.DispatcherServlet: DEBUG
org.springframework.cloud.sleuth: DEBUG
运行项目即可看到相关日志
4.Sleuth示意图
5.Zipkin
Zipkin是Twitter开源的分布式跟踪系统,基于Dapper的论文设计而来。它的主要功能是收集系统的时序数据,从而追踪微服务架构的系统延时等问题。Zipkin还提供了一个非常友好的界面,帮助我们分析追踪数据。
-
使用java -jar 启动zipkin-server-x.x.x-exec.jar
-
访问 localhost:9411 : zipkin 默认端口9411
-
需要进行链路追踪的微服务上添加zipkin依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
- 配置yml
spring:
application:
name: demo
# 配置zipkin
zipkin:
base-url: http://localhost:9411/
sender:
type: web #以http请求的方式上报
sleuth:
sampler:
# 采样率值介于 0 到 1 之间,1 则表示全部采集
probability: 1
- 此时有ziplin进行链路追踪查询,则可将sleuth链路追踪日志关闭
#
#logging:
# level:
# root: info
# org.springframework.web.servlet.DispatcherServlet: DEBUG
# org.springframework.cloud.sleuth: DEBUG
6. 微服务访问
7. 注意
因zipkin默认使用内存存储,所以链路追踪日志不断增加会导致内存不断增加;此时可选用数据库方式存储链路追踪日志。