sleuth、zipkin 分布式链路追踪
sleuth
Distributed tracing for Spring Cloud applications, compatiblewith Zipkin, HTrace and log-based(e.g. ELK)tracing.
Spring cloud Sleuth 是 Spring Cloud 的组成部分之一,为SpringCloud 应用实现了一种分布式追踪解决方案,兼容 Zipkin ,HTrace 和 log-based
核心概念
Span 一个工作单元,比如一次RPC 或 Http 请求过程,spanId 变量使用唯一的 64 位ID 标识
Trace 一条请求调用链路组成的 Span 集合,类似树结构 , TraceId 标识一个Trace
spring boot 集成 sleuth
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
zipkin 设计背景
zipkin 是依据 google 发表的分布式链路追踪系统Dapper 论文 ,由 Twitter开发并开源的。
还有很多分布式追踪系统,如 naver 的 Pinpoint , Apache 的 HTrace ,阿里的鹰眼 Trace , 京东的Hydra 等
为什么需要zipkin
随着业务越来越负责,系统进行各种拆分,一个前端的请求可能需要多次的服务调用才能完成,当请求变慢或不可用,无法知道是哪个服务导致。通过zipkin分布式链路追踪可以解决这些问题
zipkin 可以将 sleuth 追踪信息可视化
Zipkin 支持将链路追踪保存到 mysql 数据库,需要首先准备好表
spring boot 使用 Zipkin
jar 包下载地址
https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
准备好表以及 zipkin jar 包后,启动服务
java -jar zipkin.jar --server.port=8402 --zipkin.storage.type=mysql --zipkin.storage.mysql.db=febs_cloud_base --zipkin.storage.mysql.username=root --zipkin.storage.mysql.password=123456 --zipkin.storage.mysql.host=localhost --zipkin.storage.mysql.port=3306 --zipkin.collector.rabbitmq.addresses=localhost:5672 --zipkin.collector.rabbitmq.username=febs --zipkin.collector.rabbitmq.password=123456
此处 zipkin 是通过读取 rabbitMQ 的消息,因此项目需要集成改消息队列
项目依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> </dependency>
yml 配置文件指定 rabbitmq
spring:
zipkin:
sender:
type: rabbit
sleuth:
sampler:
probability: 1
rabbitmq:
host: localhost
port: 5672
username: febs
password: 123456
通过浏览器打开 zipkin ui
上述是采用 sleuth rabbitmq zipkin 的优化版本,也可以单独的使用 sleuth + zipkin 进行链路查看
参考:https://blog.csdn.net/forezp/article/details/70162074
sleuth 原理: https://zhuanlan.zhihu.com/p/176481130