[07] 入门Spring Cloud_Sleuth 分布式链路请求跟踪
一、Sleuth 分布式链路请求跟踪
在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前端请求都会形成一个复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。
Spring Cloud Sleuth 提供了一套完整的服务跟踪的解决方案。在分布式系统中提供追踪解决方案并且兼容支持了zipkin(负责图形化展现)
二、完整链路请求介绍
在一条链路中,Request 请求通过 service 1 后再调用 service 2 ,service 2 可能会调用 service 3 或者 service 4。然后 Response 响应经过 service 2 后再经过 service 1 返回。
以上图中请求链路为例,每一条链路通过唯一标识 Trace Id 来区别,链路中的每一个节点都有一个 Span 标识,各 span 标识之间通过 parent id 关联,这样整个链路就串联起来了。
三、下载 Zipkin
完整的链路监控需要 Zipkin 来进行图形化展示
1. 下载 zipkin
Spring Cloud 从 F 版起已不需要自己构建 Zipkin server 了,只需要调用 jar 包即可
选择 zipkin-server-2.*-exec.jar 下载
下载完成后移动到自己想要的目录下
2. 运行 zipkin
在 jar 包路径下打开 cmd ,运行 jar 包
java -jar zipkin-server-2.23.4-exec.jar
在浏览器中输入 http://localhost:9411/zipkin/ 打开
注意:该服务只是一个仪表盘,一个图形化展示界面,还需要在项目中进行配置才能进行监控。
四、当前项目结构介绍
当前项目中包含九个模块:
-
公有API:cloud-api-commons 服务提供者: cloud-provider-payment8001/8002 (端口号8001 和 8002 ) 服务消费者(restTemplate): cloud-consumer-order80 (端口号80 ) 服务消费者(OpenFeign): cloud-consumer-feign-order80(端口号80 ) 注册中心 Eureka: cloud-eureka-server7001(端口号7001 ) 使用断路器实现的服务提供者 (Hystrix):cloud-provider-hystrix-payment8001(端口号8001) 使用断路器实现的服务消费者(Hystrix):cloud-consumer-feign-hystrix-order80(端口号80) 服务监控(hystrixDashboard):cloud-consumer-hystrix-dashboard9001(端口号9001) 网关(Gateway):cloud-gateway-gateway9527(端口号9527)
前文链接: 项目源码:
五、搭建链路监控
对服务提供者(cloud-provider-payment8001)模块进行修改,搭建链路监控。
1. POM 中新增引用
<!--包含了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: #采样率值介于0~1之间,1表示全部采样 probability: 1
3. Controller 中新增请求
@GetMapping("/user/zipkin")
public String paymentZipkin(){
return "hi ,iam userzipkin server,welcome to atguigu.";
}
接下来对服务消费者(cloud-consumer-order80)模块进行修改
4. POM 中新增引用
<!--包含了sleuth+zipkin--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
5. 新增 YML 配置
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
probability: 1
6. Controller 中新增请求
//==> zipkin+sleuth
@GetMapping("/consumer/user/zipkin")
public String paymentZipkin(){
String result = restTemplate.getForObject("http://localhost:8001"+"/user/zipkin/", String.class);
return result;
}
7.测试
依次启动eureka7001/8001/80,然后先用 80 调用 8001 几次
http://localhost/consumer/user/zipkin
然后访问 http://localhost:9411/zipkin/
点击 Run Query 按钮,可以查看到刚刚进行的请求信息,点击 Service filters 对服务进行过滤,点击 show 可以查看请求的详细信息
点击依赖
