在搭建zipkin服务端的时候,以前通常的做法是:
在pom文件中加入jar包:

<dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-server</artifactId>
    <version>2.11.12</version>
</dependency>

然后在启动类上加入注解:@EnableZipkinServer。但是,却发现这个注解被打上了过时的标记,查看源码知道:
在这里插入图片描述官方已经不建议自己来写zipkin服务端了,直接到官方地址下载相应的jar包就可以了。


服务端

下载jar包

直接到官方地址下载相应的jar包就可以了。这里我下载的是zipkin-server-2.15.0-exec.jar

编写启动脚本

在官方的文档中zipkin-server,介绍了如何配置。在这里,我们配置一个基于ELK的链路收集:

@echo off  
START "zipkin-server" java -Xmx256m -Xms256m -Xss256k -DKAFKA_BOOTSTRAP_SERVERS=192.168.xx.xxx:9092 -DSTORAGE_TYPE=elasticsearch -DES_HOSTS=192.168.xx.xxx:9200 -jar zipkin-server-2.15.0-exec.jar --server.port=9005
pause

客户端

引入jar包

在原有的spring boot项目中,引入jar包:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

添加配置文件

在spring boot项目的application.properties文件中,加入配置:

#将采样比例1.0是全部都采集,默认是0.1
spring.sleuth.sampler.probability=1.0
spring.zipkin.sender.type=kafka
#zipkin里看到的的service name
spring.zipkin.service.name=${spring.application.name}
#集群的情况直接用“,”分割
spring.kafka.bootstrap-servers=192.168.13.192:9092

总结

这里,zipkin展示的信息,其实不是直接来自于微服务客户端,而是客户端先将数据推送到kafka,然后zipkin再异步的消费这些信息。无论是客户端还是服务端,在指定kafka的时候,都不需要指定topic,会自动将信息推送到kafka中名为zipkin的主题上。
信息倒是消费了,但是kafka并不管存储这些信息,所有这个时候需要把这些信息存储起来,便于日后查看。这些信息可以存储于内存(测试用,重启zipkin后就没有了),MySql等,这里采用的是Elasticsearch来持久化数据存储。
另外,也可以不基于ELK来收集这些信息,具体配置,参见官方文档:
https://github.com/openzipkin/zipkin#quick-start
https://github.com/openzipkin/zipkin/tree/master/zipkin-server
https://zipkin.io/pages/quickstart.html

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐