最近在使用zipkin做微服务链路追踪的时候,发现链路信息一直注册不到zipkin-server中,导致在zipkin-server中看不到链路信息,一度让我怀疑人生
zipkin-server 我是使用的是:zipkin-server-2.12.2-exec 版本,从Spring Cloud 的F版本之后,官方就建议我们不需要自己再去构建zipkin serve服务,我们可以通过:https://zipkin.io/pages/quickstart 官方文档来下载对应的zipkin版本,
我们可以通过docker,jar包,和编译源码的方式来启动对应的zipkin server服务。
后端spring Cloud我使用的是:Greenwich.SR2 版本,
具体的链路测试分析是:service-gateway --> service-feign --> service-hi 服务
后端在每一个服务模块中,我们在pom.xml文件中引入
org.springframework.cloud
spring-cloud-starter-zipkin
可以看到,基于Greenwich.SR2 版本引入的zipkin starter 的版本是 2.1.2.RELEASE 版本:
其内部引入了两个dependency, spring-cloud-starter-sleuth 和 spring-cloud-sleuth-zipkin
在每一个服务的服务配置文件中,我们都引入
spring.zipkin.base-url: http://localhost:9411 配置
启动每一个服务,并调用:
http://127.0.0.1:8999/feign/hi?name=zhoucg 接口的时候,改接口实际上就是会链路追踪:service-gateway --> service-feign --> service-hi 三个服务
发现在http://127.0.0.1:9411上并没有链路追踪的信息,空空如也
一番折腾之后(就是搜索),无意中发现这个博客和我的问题相似:https://blog.csdn.net/ruben95001/article/details/77460602,
所以我就在模块配置zipkin的配置项中加了:
spring.sleuth.sampler.probability = 1 配置,服务重启,再次调用之后发现可以了:
问题是解决了,所以我就稍微分析了这个问题
1,首先,关于zipkin的使用过程,我在任何的教程博客中都没有找到关于zipkin 是需要配置这个:spring.sleuth.sampler.probability 配置项,就包括官方的文档中,添加链接描述,也只是在Features:有这一行:
If spring-cloud-sleuth-zipkin is available then the app will generate and report Zipkin-compatible traces via HTTP. By default it sends them to a Zipkin collector service on localhost (port 9411). Configure the location of the service using spring.zipkin.baseUrl.
这句话的意思是说,如果sleuth-zipkin可用,服务会将对应的链路信息默认通过HTTP的方式去推送到zipkin-server中,zipkin-server的默认端口是9411,我们可以通过配置spring.zipkin.baseUrl去实现。
2,但是,我在看2.1.7版本的官方文档中,看到了这个说明:
意思是如果你在配置使用zipkin的时候,需要配置对应的spring.sleuth.sampler.probability,默认是0.1,就是10%,否则你可以会以为zipkin不工作,因为他省略了一下spans,
span的含义:
Span:基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识,trace以另一个64位ID表示,span还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span的ID、以及进度ID(通常是IP地址) span在不断的启动和停止,同时记录了时间信息,当你创建了一个span,你必须在未来的某个时刻停止它。
更骚的是,源码的官方注解中,是不支持默认的0.1f的
所以,你需要在使用zipkin的时候配置它
3,关于spring.sleuth.sampler.probability 配置,实际上是对应的链路调度信息的采样率,
建议学习官方文档:
https://cloud.spring.io/spring-cloud-static/spring-cloud-sleuth/2.1.7.RELEASE/single/spring-cloud-sleuth.html#_sampling_in_spring_cloud_sleuth 这一部分,写的很详细
4,通过这个小问题,我觉得对于中间件应用的使用,要牢记一句话:遇事不决看官方文档啊