• SpringCloud - Sleuth分布式请求链路跟踪


    一.概述

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

    在这里插入图片描述

    spring-cloud-sleuth 是什么?

    github地址:https://github.com/spring-cloud/spring-cloud-sleuth

    Spring Cloud Sleuth提供了一套完整的服务跟踪的解决方案,在分布式系统提供追踪解决方案并且兼容支持了zipkin

    二.zipkin搭建

    Zipkin是 Twitter 的一个开源项目,基于 Google Dapper实现。可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。除了面向开发的API接口之外,它也提供了方便的 UI 组件帮助我们直观的搜索跟踪信息和分析请求链路明细,比如:可以查询某段时间内各用户请求的处理时间等。

    SpringCloud从F版起已不需要自己构建Zipkin Server了,只需调用jar包即可

    zipkin-server-2.12.9-exec.jar

    运行:

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

    在这里插入图片描述

    访问地址:http://localhost:9411/zipkin/

    术语:

    完整的调用链路

    表示一请求链路,一条链路通过Trace Id唯一标识,Span标识发起的请求信息,各span通过parent id 关联起来
    在这里插入图片描述
    —条链路通过Trace ld唯一标识,Span标识发起的请求信息,各span通过parent id关联起来。

    在这里插入图片描述

    在这里插入图片描述

    名词解释:

    • Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识

    • span:表示调用链路来源,通俗的理解span就是一次请求信息

    三.Sleuth链路监控实现

    1. payment8001生产者修改

    添加依赖:

    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-zipkinartifactId>
    dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    application.yml

    spring:
      application:
        name: cloud-payment-service
      zipkin:
        base-url: http://localhost:9411
      sleuth:
        sampler:
          # 采样率在0 到 1 之间 1则表示全部采样
          probability: 1s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    新增controller方法:

    @GetMapping("/payment/zipkin")
    public String paymentZipkin()
    {
        return "hi ,i'am paymentzipkin server fall back,welcome to atguigu,O(∩_∩)O哈哈~";
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. Consumer80消费者修改

    添加依赖:

    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-zipkinartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    application.yml

    spring:
      application:
        name: cloud-order-server
      zipkin:
        base-url: http://localhost:9411
      sleuth:
        sampler:
          probability: 1 # 表示全部采样
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Controller新增方法

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

    3. 测试

    查看 zipkin控制台:http://localhost:9411

    在这里插入图片描述

    查看依赖关系:

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    小黑子—MyBatis:第一章
    原型链解释
    springBoot集成SpringSecurity(随笔记录)
    excel合并单元格
    redis的详细介绍与操作命令
    【Java Web】CSS
    效率工具3-计算机网络工具
    前端设计模式之【代理模式】
    汽车OBD2蓝牙诊断仪解决方案程序开发
    Request&Response有这一篇就够了
  • 原文地址:https://blog.csdn.net/m0_66689823/article/details/128088189