一、Sleuth概述

1、为什么会出现这个技术?要解决哪些问题?

在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。
image.png
image.png

2、是什么

3、解决

image.png

二、Sleuth之zipkin搭建安装

1、下载zipkin

2、运行jar

  1. java -jar zipkin-server-2.12.9-exec.jar

3、运行控制台

http://localhost:9411/zipkin/
image.png

4、术语

完整的调用链路
表示一请求链路,一条链路通过Trace ld唯一标识,Span标识发起的请求信息,各span通过parent id关联起来image.png—条链路通过Trace ld唯一标识,Span标识发起的请求信息,各span通过parent id关联起来。image.png整个链路的依赖关系如下:image.png名词解释

  • Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识
  • span:表示调用链路来源,通俗的理解span就是一次请求信息


三、Sleuth链路监控展现

1、服务提供者

  1. cloud-provider-payment8001
  2. POM

    1. <!--包含了sleuth+zipkin-->
    2. <dependency>
    3. <groupId>org.springframework.cloud</groupId>
    4. <artifactId>spring-cloud-starter-zipkin</artifactId>
    5. </dependency>
  3. YML

    1. spring:
    2. application:
    3. name: cloud-payment-service
    4. zipkin: #<-------------------------------------关键
    5. base-url: http://localhost:9411
    6. sleuth: #<-------------------------------------关键
    7. sampler:
    8. #采样率值介于 0 到 1 之间,1 则表示全部采集
    9. probability: 1
    10. datasource:
    11. type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型
    12. driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动包
    13. url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false
    14. username: root
    15. password: 123456
  4. 业务类PaymentController

    1. @RestController
    2. @Slf4j
    3. public class PaymentController {
    4. ...
    5. @GetMapping("/payment/zipkin")
    6. public String paymentZipkin() {
    7. return "hi ,i'am paymentzipkin server fall back,welcome to here, O(∩_∩)O哈哈~";
    8. }
    9. }

2、服务消费者(调用方)

  1. cloue-consumer-order80
  2. POM

    1. <dependency>
    2. <groupId>org.springframework.cloud</groupId>
    3. <artifactId>spring-cloud-starter-zipkin</artifactId>
    4. </dependency>
  3. YML

    1. spring:
    2. application:
    3. name: cloud-order-service
    4. zipkin:
    5. base-url: http://localhost:9411
    6. sleuth:
    7. sampler:
    8. probability: 1
  4. 业条类OrderController

    1. // ====================> zipkin+sleuth
    2. @GetMapping("/consumer/payment/zipkin")
    3. public String paymentZipkin()
    4. {
    5. String result = restTemplate.getForObject("http://localhost:8001"+"/payment/zipkin/", String.class);
    6. return result;
    7. }

    3、依次启动eureka7001/8001/80 - 80调用8001几次测试下

    http://localhost/consumer/payment/zipkin

    4、打开浏览器访问: http://localhost:9411![image.png](https://cdn.nlark.com/yuque/0/2021/png/22277845/1629102601188-5d036dac-c89e-4adb-a59a-13dd5cdcac51.png#clientId=uc638da47-7b8b-4&from=paste&height=352&id=ua8ad9278&margin=%5Bobject%20Object%5D&name=image.png&originHeight=352&originWidth=1848&originalType=binary&ratio=1&size=34281&status=done&style=none&taskId=u41039848-e4e4-4a49-b230-cdd963c0c06&width=1848)