https://www.jianshu.com/p/466556685781
1、Sleuth
Sleuth将一个完整的request定义为一个trace,而每经过一个服务则会生成一个span,附加到trace下,形成对这个request的链路追踪
2、Zipkin
- 客户端:指微服务应用,客户端会配置服务端的 URL 地址,一旦发生服务间的调用的时候,会被配置在微服务里面的 Sleuth 的监听器监听,并生成相应的 Trace 和 Span 信息发送给服务端,发送的方式主要有两种,一种是 HTTP 报文的方式,还有一种是消息总线的方式如 RabbitMQ
- 服务端:服务端负责将接收到的消息根据 traceId 和 spanId 整理成一个完整的request时序链路,并通过web页面直观的展示出来
sleuth 与 zipkin 的组合只能完成链路信息的追踪,不具备统一日志收集的功能
Zipkin服务端
Zipkin 的服务端,在使用 Spring Boot 2.x 版本后,官方就不推荐自行定制编译了,反而是直接提供了编译好的 jar 包来给我们使用,官方提供了一键脚本(Windows下需要安装curl,不过如果你安装了Git客户端,可以直接在Git Bash中使用)
curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar
如果用 Docker 的话,直接
docker run -d -p 9411:9411 openzipkin/zipkin
任一方式启动后,访问 http://localhost:9411/zipkin/ 就能看到管理页面
Zipkin客户端
1、引入依赖
这个依赖会引入进一步引入sleuth的依赖:spring-cloud-starter-sleuth
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
2、添加配置,指定 Zipkin 服务器的地址
spring:
zipkin:
base-url: http://localhost:9411
将数据存储到mysql
默认启动的zipkin将数据保存在内存,Zipkin支持将追踪数据持久化到mysql或者elasticsearch中
1、持久化到mysql
- 创建mysql数据库zipkin
CREATE DATABASE `zipkin` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
- 创建数据表,参考:GitHub openzipkin/zipkin
- 命令行参数
java -jar zipkin.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=123456