springcloud-分布式请求链路追踪Sleuth(十一)
概述
- 该技术出现的, 解决哪些问题
- 在微服务框架中, 一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果, 每一个前段请求都会形成一条复杂的分布式服务调用链路, 链路中任何一环出现高延时或错误都会引起整个请求的最后失败.
- 所以我们有必要知道该服务的服务调用的个数, 以及每一步所耗事件.
- Sleuth是什么
- Sleuth提供了一套完整的服务跟踪的解决方案.
- 兼容支持了zipkin(一个管监控, 一个管展示)
搭建链路监控步骤
- zipkin
- SpringCloud从F版起已不需要自己构建Zipkin server了, 只需要调用jar包即可.
- 下载: zipkin-server-2.12.9-exec.jar
- 运行该jar包
- java -jar zipkin-server-2.12.9-exec.jar
- java -jar zipkin-server-2.12.9-exec.jar
- 运行控制台
- http://localhost:9411/zipkin
- 调用链路
- 一请求链路, 一条链路通过Trace Id唯一标识, Span标识发起的请求信息, 各span通过parent id关联.
- 整个链路的依赖关系如下
- 一请求链路, 一条链路通过Trace Id唯一标识, Span标识发起的请求信息, 各span通过parent id关联.
- 名词解释
- Trace: 类似于树结构的Span集合, 表示一条调用链路, 存在唯一标识.
- span: 表示调用链路来源, 通俗的理解span就是一次请求信息.
- 服务提供者的编写
- 使用微服务cloud-provider-payment8001
- pom
<!-- 包含了sleuth+zipkin --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
- yml
- 增加如下操作
- 增加如下操作
- 业务类PaymentController
@GetMapping("/payment/zipkin ") public String paymentZipkin() { return "Hi, I am paymentZipkin server fall back"; }
- 服务消费者(调用方)
- 修改微服务cloud-consumer-order80
- pom
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
- yml
spring: application: name: cloud-order-service zipkin: base-url: http://localhost:9411 sleuth: sampler: probability: 1
- 业务类OrderController
@GetMapping("/consumer/payment/zipkin") public String paymentZipkin() { String result = restTemplate.getForObject("http://localhost:8001" + "/payment/zipkin/", String.class); return result; }
- 测试
- 依次启动7001, 7002, 8001, 80
- 访问 http://localhost/consumer/payment/zipkin
- 访问http://localhost:9411
- 出现以下界面
- 查看
- 出现以下界面