初学zipkin搭建链路追踪服务注意事项
1.zipkinserver的搭建
注意:因为关于 Zipkin 的服务端,在Spring Boot 2.x 版本后,官方就不推荐自行定制编译了(自行搭建方式在本文末补充),反而是直接提供了编译好的 jar 包来给我们使用(下载zipkin-server-xxx.jar ,使用JAVA命令启动该JAR,zipkin-server.jar是一个打包好的springBoot应用,springBoot自带tomcat因此只要启动JAR包就可以访问了。 java -jar zipkin-server-xxx.jar 启动完后访问localhost:9411可以查看统计界面)。还有其他两种方式搭建zipkinserver方式,详细情况参看
2.构件网关工程以及服务提供工程,这两个工程作为Zipkin 客户端, 需要将链路数据上传给Zipkin Server,同时它也作为 EurekaClient。
a.网关pom如下:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> <version>1.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> <version>1.4.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
b.网关的配置文件如下:
====================================
server.port=8768
spring.application.name=zipkinzuulclient
#指定 Zipkin Server 地址
spring.zipkin.base-url=http://localhost:9411
#通过配置这个参数来决定了日志记录发送给采集器的概率,0-1交给使用者自己配置。开发阶段和运行初期,
#一般配置成1全量收集日志,在默认情况下,该值为 0.1
spring.sleuth.sampler.percentage=1.0
#以下两个配置就可以将以"/sayhi/**"开头的 Url路由指定的url
zuul.routes.sayhi.path=/sayhi/**
zuul.routes.sayhi.url=http://localhost:1000
===================================
c.服务提供工程的pom如下:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> <version>1.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
d.服务提供工程的配置
=====================================
spring.application.name=zipkinclient
server.port=1000
#设置服务注册中心的URL,本服务要向该服务注册中心注册自己
eureka.client.serviceUrl.defaultZone=http://ipa:8761/eureka
#指定 Zipkin Server 地址
spring.zipkin.base-url=http://localhost:9411
#通过配置这个参数来决定了日志记录发送给采集器的概率,0-1交给使用者自己配置。开发阶段和运行初期,
#一般配置成1全量收集日志,在默认情况下,该值 为 0.1
spring.sleuth.sampler.percentage=1.0
============================================
3.完整的项目搭建完毕,依次启动 eurekaserver、zipkinserver、zipkinzuulclient 和 zipkinclient。 在浏览器上访问http://localhost:8768/sayhi/GetTest/getTest, 浏览器显示:I am from :1000 再访问 http://localhost:9411 ,即访问 Zipkin 的展示界面,点击find traces可以看到对应的链路数据,例如请求的调用时间、消耗时间,以及请求调用的链路情况。(注意:需要先访问服务产生链路记录,才能在zipkin界面查到相应的servicename和spanname)
4.可以在链路中添加自定义数据,本案例在 zipkinzuulclient服务中新建一个过滤器,它的类型为 post 类型, order为0,开启拦截。在过滤器的拦截逻辑方法里, 通过 Tracer 的 addTag 方法在本案例中加上了链路的操作人,过滤器中部分代码如下:
@Autowired Tracer tracer;//首先注入Tracer对象 @Override public Object run() { //在链路中添加链路操作人员记录 tracer.addTag("user", "lucus"); return null; }