一、概述
1、为什么需要Sleuth
在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。
2、Sleuth是什么
Spring Cloud Sleuth提供了一套完整的服务跟踪的解决方案 。
在分布式系统中提供追踪解决方案并且兼容支持了zipkin。
二、搭建链路监控
1、下载zipkin
SpringCloud从F版起已不需要自己构建Zipkin Server了,只需调用jar包即可 。
下载地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
如果forbidden就换这个:Central Repository: io/zipkin/zipkin-server
下载后缀为jar的。
2、运行jar包
命令为
java -jar
3、访问可视化界面
在这个界面中我们可以看到完整的微服务调用链路
类似下图
4、两个术语
一条链路通过Trace Id唯一标识,Span标识发起的请求信息,各span通过parent id 关联起来。
(1)Trace
Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识
(2)Span
span:表示调用链路来源,通俗的理解span就是一次请求信息
三、服务提供者和消费者搭建
为了方便,我们就不再新建模块了,直接在之前写好的服务提供者8001(cloud-provider-payment8001)和服务调用者80(cloud-consumer-order80)的基础上进行修改。
80和8001要修改的内容相同。
1、pom文件修改
增加zipkin的依赖
<!--包含了sleuth+zipkin--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
2、yml文件修改
zipkin: base-url: http://localhost:9411 sleuth: sampler: probability: 1
注意缩进关系
3、controller类修改
// ====================> zipkin+sleuth @GetMapping("/consumer/payment/zipkin") public String paymentZipkin() { String result = restTemplate.getForObject("http://localhost:8001"+"/payment/zipkin/", String.class); return result; }
四、运行测试
依次启动eureka7001、8001、80。
访问 http://localhost:90//consumer/payment/zipkin 如果启动时报500错误,则将80中配置的负载均衡注解去掉(我也不知道为什么,如果有大佬知道的话麻烦评论区教教我)
多刷新几次,模拟80调用了几次8001。
选好后,点击查找
点击依赖也可以清楚地看到链路的调用关系