当前位置: 首页 > news >正文

5-SpringCloud-服务链路追踪 Micrometer Tracing

1.5 服务链路追踪 Micrometer Tracing

Micrometer Tracing 是 Sleuth 的替代方案。服务链路追踪技术 Micrometer Tracing 是用来进行数据采样的,最后通过 ZipKin 将数据通过 Web 进行可视化展示。分布式链路追踪技术主要是为了将一个分布式请求转换成调用链路的形式,通过记录日志、性能监控将一次分布式请求的链路调用集中展示。如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。分布式链路追踪技术能够在微服务出现异常情况时能够更轻松的发现是哪一个服务单元的问题。

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

在这里插入图片描述

Micrometer Tracing 是新一代的 Sleuth,该组件只支持3.x版本以上的 Spring Boot 框架。老版本的 Sleuth 仍然支持2.x版本的 SprintBoot 版本的框架。具体信息可参考官方网址https://docs.spring.io/spring-cloud-sleuth/docs/current/reference/html/、https://spring.io/projects/spring-cloud-sleuth#overview、https://micrometer.io/docs/tracing、https://github.com/spring-cloud/spring-cloud-sleuth。

在这里插入图片描述

Spring Cloud Sleuth(Micrometer Tracing)提供了一套完整的分布式链路追踪解决方案且兼容支持 Zipkin 展现。将一次分布式请求还原成调用链路,进行日志记录、性能监控。最后将分布式请求的调用链路通过 Zipkin 展现。

在这里插入图片描述

行业内比较成熟的分布式链路追踪技术解决方案如下图所示。

在这里插入图片描述

分布式链路追踪原理:

假定三个微服务调用的链路如下图所示:Service 1 调用 Service 2,Service 2 调用 Service 3 和 Service 4。

在这里插入图片描述

那么一条链路追踪会在每个服务调用的时候加上Trace ID 和 Span ID链路通过TraceId唯一标识,Span标识发起的请求信息,各span通过parent id 关联起来 (Span:表示调用链路来源,通俗的理解span就是一次请求信息)。

在这里插入图片描述

一条链路通过Trace Id唯一标识,Span标识发起的请求信息,各span通过parent id 关联起来。

在这里插入图片描述

1.5.1 Zipkin 分布式链路追踪系统展现工具

Zipkin是一种分布式链路跟踪系统图形化的工具,Zipkin 是 Twitter 开源的分布式跟踪系统,能够收集微服务运行过程中的实时调用链路信息,并能够将这些调用链路信息展示到Web图形化界面上供开发人员分析,开发人员能够从ZipKin中分析出调用链路中的性能瓶颈,识别出存在问题的应用程序,进而定位问题和解决问题。Zipkin 官方网址为https://zipkin.io/。

在这里插入图片描述

当没有配置 Sleuth 链路追踪的时候,INFO 信息里面是 [passjava-question,],后面跟着三个空字符串。当配置了 Sleuth 链路追踪的时候,追踪到的信息是 [passjava-question,504a5360ca906016,e55ff064b3941956,false] ,第一个是 Trace ID,第二个是 Span ID。**只有日志没有图,观看不方便,不美观,so,**引入图形化Zipkin链路监控让你好看,O(∩_∩)O。

在这里插入图片描述

Zipkin 的下载安装运行

Zipkin 可以在 Java、Docker 和 running三种支持方式,下载网址为https://zipkin.io/pages/quickstart.html。本节主要下载 Java 版本的Zipkin,版本信息为 zipkin-server-3.5.1-exec.jar。具体操作如下所示。

在这里插入图片描述

在这里插入图片描述

然后找到包含 zipkin-server-3.5.1-exec.jar文件的目录,在目录搜索框内输入 cmd 并回车。

在这里插入图片描述

接着输入命令 java -jar zipkin-server-3.5.1-exec.jar并回车,看到如下信息后,表示 Zipkin 成功运行。

在这里插入图片描述

接着,打开浏览器,输入网址http://localhost:9411/访问 Zipkin 的 Web 页面。若看到如下信息,则表示 Zipkin 启动成功。

在这里插入图片描述

1.5.2 Micrometer 和 Zipkin 搭建链路监控案例

Micrometer Tracing 和 Zipkin 是相互协作的关系,Micrometer Tracing 负责调用链路数据采样的工作,Zipkin 负责将采集到的调用链路数据以可视化的方式通过 Web 页面展示出来。

Micrometer Tracing 和 Zipkin 相互协作搭建链路监控的案例步骤如下所示。

  1. 总体父工程 pom.xml 文件。具体需要引入的依赖如下所示。

    <properties> <micrometer-tracing.version>1.2.0</micrometer-tracing.version><micrometer-observation.version>1.12.0</micrometer-observation.version><feign-micrometer.version>12.5</feign-micrometer.version><zipkin-reporter-brave.version>2.17.0</zipkin-reporter-brave.version>
    </properties><!--micrometer-tracing-bom导入链路追踪版本中心  1-->
    <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bom</artifactId><version>${micrometer-tracing.version}</version><type>pom</type><scope>import</scope>
    </dependency>
    <!--micrometer-tracing指标追踪  2-->
    <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing</artifactId><version>${micrometer-tracing.version}</version>
    </dependency>
    <!--micrometer-tracing-bridge-brave适配zipkin的桥接包 3-->
    <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bridge-brave</artifactId><version>${micrometer-tracing.version}</version>
    </dependency>
    <!--micrometer-observation 4-->
    <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-observation</artifactId><version>${micrometer-observation.version}</version>
    </dependency>
    <!--feign-micrometer 5-->
    <dependency><groupId>io.github.openfeign</groupId><artifactId>feign-micrometer</artifactId><version>${feign-micrometer.version}</version>
    </dependency>
    <!--zipkin-reporter-brave 6-->
    <dependency><groupId>io.zipkin.reporter2</groupId><artifactId>zipkin-reporter-brave</artifactId><version>${zipkin-reporter-brave.version}</version>
    </dependency>
    

    由于Micrometer Tracing是一个门面工具自身并没有实现完整的链路追踪系统,具体的链路追踪另外需要引入的是第三方链路追踪系统的依赖:

    1micrometer-tracing-bom导入链路追踪版本中心,体系化说明
    2micrometer-tracing指标追踪
    3micrometer-tracing-bridge-brave一个Micrometer模块,用于与分布式跟踪工具 Brave 集成,以收集应用程序的分布式跟踪数据。Brave是一个开源的分布式跟踪工具,它可以帮助用户在分布式系统中跟踪请求的流转,它使用一种称为"跟踪上下文"的机制,将请求的跟踪信息存储在请求的头部,然后将请求传递给下一个服务。在整个请求链中,Brave会将每个服务处理请求的时间和其他信息存储到跟踪数据中,以便用户可以了解整个请求的路径和性能。
    4micrometer-observation一个基于度量库 Micrometer的观测模块,用于收集应用程序的度量数据。
    5feign-micrometer一个Feign HTTP客户端的Micrometer模块,用于收集客户端请求的度量数据。
    6zipkin-reporter-brave一个用于将 Brave 跟踪数据报告到Zipkin 跟踪系统的库。

    补充包:spring-boot-starter-actuator SpringBoot框架的一个模块用于监视和管理应用程序。

  2. 服务提供者8001

    修改包 cloud-provider-payment8001,主要操作如下所示。

    • 修改 pom.xml 文件,主要添加如下依赖。

      <!--micrometer-tracing指标追踪  1--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing</artifactId></dependency><!--micrometer-tracing-bridge-brave适配zipkin的桥接包 2--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bridge-brave</artifactId></dependency><!--micrometer-observation 3--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-observation</artifactId></dependency><!--feign-micrometer 4--><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-micrometer</artifactId></dependency><!--zipkin-reporter-brave 5--><dependency><groupId>io.zipkin.reporter2</groupId><artifactId>zipkin-reporter-brave</artifactId></dependency>
      
    • 写 application.yml 文件。主要配置如下信息。

      # ========================zipkin===================
      management:zipkin:tracing:endpoint: http://localhost:9411/api/v2/spanstracing:sampling:probability: 1.0 #采样率默认为0.1(0.1就是10次只能有一次被记录下来),值越大收集越及时。
      
    • 新建业务类 PayMicrometerController,主要设置如下业务。

      package com.atguigu.controller;import cn.hutool.core.util.IdUtil;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.PathVariable;
      import org.springframework.web.bind.annotation.RestController;@RestController
      public class PayMicrometerController {/*** Micrometer(Sleuth)进行链路监控的例子* @param id* @return*/@GetMapping(value = "/pay/micrometer/{id}")public String myMicrometer(@PathVariable("id") Integer id){return "Hello, 欢迎到来myMicrometer inputId:  "+id+" \t    服务返回:" + IdUtil.simpleUUID();}
      }
      
  3. Api 接口 PayFeignApi

    在该接口内新增对应上述支付业务8001的抽象方法。

    /*** Micrometer(Sleuth)进行链路监控的例子* @param id* @return*/@GetMapping(value = "/pay/micrometer/{id}")public String myMicrometer(@PathVariable("id") Integer id);
    
  4. 服务调用者80

    修改订单服务80 包名为 cloud-consumer-feign-order80。

    • 修改 pom.xml 文件,添加如下依赖。

        <!--micrometer-tracing指标追踪  1--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing</artifactId></dependency><!--micrometer-tracing-bridge-brave适配zipkin的桥接包 2--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bridge-brave</artifactId></dependency><!--micrometer-observation 3--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-observation</artifactId></dependency><!--feign-micrometer 4--><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-micrometer</artifactId></dependency><!--zipkin-reporter-brave 5--><dependency><groupId>io.zipkin.reporter2</groupId><artifactId>zipkin-reporter-brave</artifactId></dependency>
      
    • 写 application.yml 文件,添加如下配置信息。

      # zipkin图形展现地址和采样率设置
      management:zipkin:tracing:endpoint: http://localhost:9411/api/v2/spanstracing:sampling:probability: 1.0 #采样率默认为0.1(0.1就是10次只能有一次被记录下来),值越大收集越及时。
      
    • 新建业务类 OrderMicrometerController,主要业务如下所示。

      package com.atguigu.controller;import com.atguigu.apis.PayFeignApi;
      import jakarta.annotation.Resource;
      import lombok.extern.slf4j.Slf4j;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.PathVariable;
      import org.springframework.web.bind.annotation.RestController;@RestController
      @Slf4j
      public class OrderMicrometerController {@Resourceprivate PayFeignApi payFeignApi;@GetMapping(value = "/feign/micrometer/{id}")public String myMicrometer(@PathVariable("id") Integer id){return payFeignApi.myMicrometer(id);}
      }
      
  5. 测试,依次启动8001和80,然后打开浏览器输入网址http://localhost/feign/micrometer/1。若访问网址成功,则接着打开网址http://localhost:9411/。根据下图进行操作。

    在这里插入图片描述

    根据上图的展示结果,带年纪按钮 show 进行查看服务链路追踪。

    在这里插入图片描述

    接着点击右上角的 Dependences(依赖),查看服务之间的依赖关系。

    在这里插入图片描述

上一页 4-SpringCloud-Resilience4J服务熔断与降级

http://www.dtcms.com/a/506608.html

相关文章:

  • 网站怎样做谷歌推广没有网站怎么做淘宝客
  • 【C/C++基本功】union联合体彻底详解
  • 万字 Apache ShardingSphere 完全指南:从分库分表到分布式数据库生态
  • WebPages PHP:深入理解与高效实践
  • 数据结构-滑动窗口三题
  • 做黑网站吗怎么建设营销型网站
  • 免费企业网站程序关注love石家庄公众号微信
  • 如何进行网站开发网站开发郑州
  • 东营建网站wordpress商城汉化主题
  • 合肥昱天建设有限公司网站2016手机网站制作规范
  • 网站制作 青岛seo工具下载
  • 做初中物理题目的网站photoshop 做网站logo
  • 网站开发技术项目邢台网站建设最新报价
  • 木地板企业网站模版网站空间到期怎么办
  • 佛山著名网站建设公司赣州瑞金网站建设
  • 免费模板下载网站推荐免费asp企业网站源码
  • 华企立方网站深圳广告设计公司深圳画册设计
  • 网站制作全包价格中国商标商标查询网
  • 做学校和企业对接的网站做企业网站接单
  • 开发区网站开发语言网站建设5000费用
  • 自己做网站用什么软件深圳建设交易宝安
  • 建站教程下载网站建设首页模板下载
  • 网站建设中英文版软件科技公司网站模板
  • 内部网站建设青青网站怎么做
  • 做孵化的网站php网站开发书籍
  • 手机网站app辅助wordpress 页面编辑器
  • 网站建设免费视频教程wordpress5.0.3下载
  • 网站的推广代码是什么河南搜索引擎推广公司
  • 小程序代理与加盟windows优化
  • 做网站的软件wd的叫啥源码网