简介
Sleuth 的作用是在系统中自动埋点并把数据发送给 ZipKin,ZipKin 的作用是存储这些数据并展现
ZipKin 默认 http 消息传输,本地存储追踪数据,服务不可用或重启之后,数据就会丢失;本文介绍如何实现 ZipKin 客户端和服务端之间使用 RabbitMQ 异步消息传输、使用 ElasticSearch 实现追踪数据持久化
一、ZipKin 下载地址
https://repo1.maven.org/maven2/io/zipkin/zipkin-server/
二、启动 Zipkin
zipkin-server 连接到 RabbitMQ、ElasticSearch,执行启动命令:
java -jar zipkin-server-2.24.4-exec.jar --RABBIT_ADDRESSES=127.0.0.1:5672 --RABBIT_USER=guest --RABBIT_PASSWORD=guest --STORAGE_TYPE=elasticsearch --ES_HOSTS=127.0.0.1:9200 -Dfile.encoding=utf-8
访问控制台链接
http://127.0.0.1:9411/zipkin/
三、业务代码整合 Sleuth + Zipkin
- POM 文件添加
<!--sleuth-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<!--zipkin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
<!-- 使用 Rabbit 连接方式启动才需要下面依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- 使用es存储链路追踪 -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId>
<version>2.8.4</version>
</dependency>
- application.yml 文件添加
spring:
sleuth:
sampler:
probability: 1.0
zipkin:
base-url: http://localhost:9411
sender:
type: rabbit
rabbitmq:
host: 127.0.0.1
port: 5672
password: guest
username: guest
zipkin:
storage:
type: elasticsearch
elasticsearch:
hosts: http://127.0.0.1:9200
username: elastic
password: 123456
cluster: elasticsearch
index: zipkin
index-shards: 1
index-replicas: 1
logging:
level:
root: INFO
org.springframework.web.servlet.DispatcherServlet: DEBUG
org.springframework.cloud.sleuth: DEBUG
- 请求接口后,访问 http://127.0.0.1:9411/zipkin/ 查看请求链路
四、问题
使用 ElasticSearch 实现追踪数据持久化后,发现依赖无法查看,可以参考这篇博文来解决:
【微服务链路追踪】windows下zipkin持久化数据到ES后没有生成依赖关系dependencies问题