本文主要使用Spring Cloud Sleuth来实现分布式链路追踪,利用Kafka实现异步的方式通信实现分布式追踪,使用Elasticsearch持久化追踪日志数据,使用Zipkin-Server查看追踪内容。
关于搭建Spring Cloud微服务,安装zk、kafka、elasticsearch的就不在此重复了。直接进入主题。
1、搭建Zipkin-Server
在Spring Cloud Finchley.SR1之前可以通过配置和代码自己搭建Zipkin-Server,笔者也是在此入坑,找相关资料试着搭建,始终找不到相关依赖。通过看官方文档才发现,可以直接下载Zipkin-Server的jar包直接运行,但是默认通过http方式进行通信,而且数据默认存到内存,缺点就是如果在Zipkin-Server挂了的情况下,http请求失败,造成数据丢失,存量数据可能也无法找回。所以可以通过运行参数,设置Zipkin-Server 通过利用Kafka实现异步的分布式追踪,使用Elasticsearch持久化追踪日志数据。
jar包下载地址:
https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec
启动命名如下:
java -DKAFKA_BOOTSTRAP_SERVERS=10.6.20.122:9092,10.6.20.165:9092 -DSTORAGE_TYPE=elasticsearch -DES_HOSTS=http://10.6.20.122:9200 -jar zipkin-server-2.10.1-exec.jar
参数说明:
KAFKA_BOOTSTRAP_SERVERS:kafka的ip和端口
STORAGE_TYPE 存储数据方式可以为 mem
, mysql
, cassandra
, elasticsearch
ES_HOSTS es的url
详细请移步官方githup https://github.com/openzipkin/zipkin/tree/master/zipkin-server
启动后访问url :
http://***:9411/zipkin
2、在需要追踪的服务中添加 dependency
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.1.8.RELEASE</version>
</dependency>
3、在需要追踪的服务中添加配置 修改 application.yml
spring: # zipkin: # base-url: http://127.0.0.1:9411 #默认http通信的配置方式 zipkin: sender: type: kafka # 支持三种 方式 RABBIT, KAFKA, WEB service: name: microservicedemo-orders #可以和 application.name 同名 但是必须设置 sleuth: sampler: probability: 1.0 # 定义抽样比率,默认为0.1 kafka: bootstrap-servers: 10.6.20.122:9092,10.6.20.165:9092
4、测试:模拟调用服务,可以测试A调B、B调C。打开 http://***:9411/zipkin