一、基础概述
1、为什么会出现Sleuth这个技术,为了解决哪些问题?
在微服务框架中,一个由客户端发起的请求,在后端系统中会经过多个不同的服务节点调用,来协同产生最后的请求结果,每一个前端请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时、或错误都会引起整个请求最后的失败:
2、Sleuth是什么?
SpringCloud Sleuth提供了一套完整的服务追踪的解决方案;
在分布式系统中提供追踪解决方案并且兼容支持了Zipkin;
可以这么理解:一个管监控收集整理(Sleuth),一个管展现(Zipkin)
二、Sleuth之Zipkin搭建
1、SpringCloud从F版开始已经不再需要我们自己构建Zipkin Server了,只需要调用jar包即可;
下载网址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
下载完成后,我们会获得到一个jar包: zipkin-server-2.12.9-exec.jar
直接使用 java -jar 运行即可:
java -jar zipkin-server-2.12.9-exec.jar
启动banner如下:
2、运行控制台:
http://localhost:9411/zipkin/
3、完整的调用链路:
表示一条请求链路,一条链路通过Trace Id作为唯一标识,Span标识发起的请求信息,各Span通过Parent Id关联起来:
上图太复杂,我们可以精简一下再看:
整个链路的依赖关系如下:
名词解释:
-
Trace:类似于树结构的Span集合,标识一条调用链路,存在唯一标识 traceId;
-
Span:标识调用链路来源,通俗的理解span就是一次请求信息;
三、Sleuth链路监控展示
1、为了方便,就不新增模块了:我们使用最初的 cloud-provider-payment8001和cloud-consumer-order80进行测试:
首先在这两个模块中增加zipkin的依赖pom.xml:
<!--Zipkin--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
2、在配置文件 application.yml 中增加zipkin的配置:
spring: application: name: cloud-payment-service zipkin: base-url: http://localhost:9411 sleuth: sampler: #采样率:介于0到1之间,1代表全部采集,一般生产中0.5差不多了 probability: 1
3、在payment8001的业务类PaymentController中增加一个用于测试zipkin的方法接口:
@GetMapping("/payment/zipkin") public String paymentZipkin(){ return "Hi, i'm paymentZipkin server fall back, welcome to jiguiquan'home O(∩_∩)O哈哈~"; }
4、在order80的业务类OrderController中,增加以下接口:
//========> Zipkin + Sleuth @GetMapping("/consumer/payment/zipkin") public String paymentZipkin(){ return restTemplate.getForObject("http://localhost:8001" + "/payment/zipkin/", String.class); }
5、依次启动项目7001/8001/80进行测试:
使用以下链接通过order80调用payment8001的服务: http://localhost/consumer/payment/zipkin
可以多点几次:
6、此时我们访问Zipkin的前端界面: http://localhost:9411/zipkin
界面如下,可见是相当的丰富:
随便点进一个:
调用过程及消耗时间,都记录得很详细!
7、还可以看到各个服务之间的依赖关系:
可以,Sleuth+Zipkin的功能非常强大,在实际生产中意义重大!
到这里,Sleuth+Zipkin的链路追踪和展示就基本结束了!
个人此项目代码地址(持续更新):