ToB企服应用市场:ToB评测及商务社交产业平台

标题: 08.Sleuth(Micrometer)+ZipKin分布式链路追逐 [打印本页]

作者: 铁佛    时间: 2024-10-23 20:38
标题: 08.Sleuth(Micrometer)+ZipKin分布式链路追逐
1.Sleuth进入维护模式

替代方案 -> Micrometer Tracing
2.分布式链路追踪概述

2.1 出现背景

在微服务框架中,一个由客户端发起的哀求在后端系统中会经过多个不同的服务节点调用来协调产生最后的结果,每一个前端哀求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个哀求最后的失败。
随着系统的复杂化,导致微服务的增多,调用链路的变长
2.2 要办理的题目

在大规模分布式与微服务集群下,如何实时的观测系统的团体调用链路情况、如何快速发现并定位到题目、如何尽可能精确的判断故障对系统的影响范围与影响程度、如何尽可能精确的梳理出服务之间的依赖关系,并判断出服务之间的依赖关系是否合理、如何尽可能精确的分析整个系统调用链路的性能与瓶颈点、如何尽可能精确的分析系统的存储瓶颈与容量规划。
分布式链路追踪技术要办理的题目,分布式链路追踪(Distributed Tracing),就是将一次分布式哀求还原成调用链路,举行日志记录,性能监控并将一次分布式哀求的调用情况集中展示。比如各个服务节点上的耗时、哀求详细到达哪台机器上、每个服务节点的哀求状态等等。
3.新一代Spring Cloud Sleuth:Micrometer

3.1 相关地点

Micrometer官网
Sleuth官网
Sleuth_GItHub地点
Spring Cloud Sleuth will not work with Spring Boot 3.x onward. The last major version of Spring Boot that Sleuth will support is 2.x.
GitHub介绍,Spring Clour Sleuth不支持SpringBoot 3.x。
3.2 ZipKin

Micrometer负责收集数据,ZipKin复杂数据的显现。因为收集到的数据是一个个节点,不直观。
3.3 小总结

将前端哀求到,后端系统响应结果的这个过程中,所走过的分布式节点,举行日志记录和性能监控,并举行Web展示。
3.4 其他的分布式链路追踪的办理方案

技术说明Cat由大众点评开源,基于Java开发的实时应用监控平台,包罗实时应用监控,业务监控。集成方案是通过代码埋点的方式来实现监控,比如:拦截器,过滤器等。对代码的侵入性很大,集成成本较高。风险较大。ZipKin由大众点评开源,基于Java开发的实时应用监控平台,包罗实时应用监控,业务监控。集成方案是通过代码埋点的方式来实现监控,比如:拦截器,过滤器等。对代码的侵入性很大,集成成本较高。风险较大。PinpointPinpoint是一款开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强盛,接入端无代码侵入。SkywalkingSkywalking是国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。4.分布式链路追踪原理

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

5.Zipkin

5.1 官网

https://zipkin.io
5.2 概述

Zipkin是一种分布式链路跟踪系统图形化的工具,Zipkin 是 Twitter 开源的分布式跟踪系统,可以或许收集微服务运行过程中的实时调用链路信息,并可以或许将这些调用链路信息展示到Web图形化界面上供开发职员分析,开发职员可以或许从ZipKin中分析出调用链路中的性能瓶颈,识别出存在题目的应用程序,进而定位题目息争决题目。
5.3 下载地点

https://zipkin.io/pages/quickstart.html
In this section we’ll walk through building and starting an instance of Zipkin for checking out Zipkin locally. There are three options: using Java, Docker or running from source.
java 方式,下载的是jar包,直接实行就好。
6.案例

6.1 Micrometer和Zipkin分工

Micrometer 收罗数据,Zipkin图像展示
6.2 总体父工程POM

新增的
  1. <properties>
  2.     <micrometer-tracing.version>1.2.0</micrometer-tracing.version>
  3.     <micrometer-observation.version>1.12.0</micrometer-observation.version>
  4.     <feign-micrometer.version>12.5</feign-micrometer.version>
  5.     <zipkin-reporter-brave.version>2.17.0</zipkin-reporter-brave.version>
  6. </properties>
  7. <dependency>
  8.     <groupId>io.micrometer</groupId>
  9.     <artifactId>micrometer-tracing-bom</artifactId>
  10.     <version>${micrometer-tracing.version}</version>
  11.     <type>pom</type>
  12.     <scope>import</scope>
  13. </dependency>
  14. <dependency>
  15.     <groupId>io.micrometer</groupId>
  16.     <artifactId>micrometer-tracing</artifactId>
  17.     <version>${micrometer-tracing.version}</version>
  18. </dependency>
  19. <dependency>
  20.     <groupId>io.micrometer</groupId>
  21.     <artifactId>micrometer-tracing-bridge-brave</artifactId>
  22.     <version>${micrometer-tracing.version}</version>
  23. </dependency>
  24. <dependency>
  25.     <groupId>io.micrometer</groupId>
  26.     <artifactId>micrometer-observation</artifactId>
  27.     <version>${micrometer-observation.version}</version>
  28. </dependency>
  29. <dependency>
  30.     <groupId>io.github.openfeign</groupId>
  31.     <artifactId>feign-micrometer</artifactId>
  32.     <version>${feign-micrometer.version}</version>
  33. </dependency>
  34. <dependency>
  35.     <groupId>io.zipkin.reporter2</groupId>
  36.     <artifactId>zipkin-reporter-brave</artifactId>
  37.     <version>${zipkin-reporter-brave.version}</version>
  38. </dependency>
复制代码
由于Micrometer Tracing是一个门面工具自身并没有实现完整的链路追踪系统,详细的链路追踪另外须要引入的是第三方链路追踪系统的依赖。
引入组件说明
micrometer-tracing-bom:导入链路追踪版本中心,体系化说明
micrometer-tracing:指标追踪
micrometer-tracing-bridge-brave:一个Micrometer模块,用于与分布式跟踪工具 Brave 集成,以收集应用程序的分布式跟踪数据。Brave是一个开源的分布式跟踪工具,它可以帮助用户在分布式系统中跟踪哀求的流转,它使用一种称为"跟踪上下文"的机制,将哀求的跟踪信息存储在哀求的头部,然后将哀求传递给下一个服务。在整个哀求链中,Brave会将每个服务处置惩罚哀求的时间和其他信息存储到跟踪数据中,以便用户可以了解整个哀求的路径和性能。
micrometer-observation:一个基于度量库 Micrometer的观测模块,用于收集应用程序的度量数据。
feign-micrometer:一个Feign HTTP客户端的Micrometer模块,用于收集客户端哀求的度量数据。
zipkin-reporter-brave:一个用于将 Brave 跟踪数据报告到Zipkin 跟踪系统的库。
增补包:spring-boot-starter-actuator  SpringBoot框架的一个模块用于监视和管理应用程序。
6.3 服务提供者8001修改

6.3.1 pom修改

micrometer-tracing-bom不用引入
  1. <dependency>
  2.     <groupId>io.micrometer</groupId>
  3.     <artifactId>micrometer-tracing</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>io.micrometer</groupId>
  7.     <artifactId>micrometer-tracing-bridge-brave</artifactId>
  8. </dependency>
  9. <dependency>
  10.     <groupId>io.micrometer</groupId>
  11.     <artifactId>micrometer-observation</artifactId>
  12. </dependency>
  13. <dependency>
  14.     <groupId>io.github.openfeign</groupId>
  15.     <artifactId>feign-micrometer</artifactId>
  16. </dependency>
  17. <dependency>
  18.     <groupId>io.zipkin.reporter2</groupId>
  19.     <artifactId>zipkin-reporter-brave</artifactId>
  20. </dependency>
复制代码
6.3.2 YML修改
  1. # ========================zipkin===================
  2. management:
  3.   zipkin:
  4.     tracing:
  5.       endpoint: http://localhost:9411/api/v2/spans
  6.   tracing:
  7.     sampling:
  8.       probability: 1.0 #采样率默认为0.1(0.1就是10次只能有一次被记录下来),值越大收集越及时。
复制代码
6.3.3 新建PayMicrometerController
  1. import cn.hutool.core.util.IdUtil;
  2. import org.springframework.web.bind.annotation.GetMapping;
  3. import org.springframework.web.bind.annotation.PathVariable;
  4. public class PayMicrometerController {
  5.     /**
  6.      * Micrometer(Sleuth)进行链路监控的例子
  7.      * @param id
  8.      * @return
  9.      */
  10.     @GetMapping(value = "/pay/micrometer/{id}")
  11.     public String myMicrometer(@PathVariable("id") Integer id)
  12.     {
  13.         return "Hello, 欢迎到来myMicrometer inputId:  "+id+" \t    服务返回:" + IdUtil.simpleUUID();
  14.     }
  15. }
复制代码
6.4 API接口PayFeignApi修改
  1. @GetMapping(value = "/pay/micrometer/{id}")
  2. String myMicrometer(@PathVariable("id") Integer id);
复制代码
6.5 服务调用者80修改

6.5.1 POM
  1. <dependency>
  2.     <groupId>io.micrometer</groupId>
  3.     <artifactId>micrometer-tracing</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>io.micrometer</groupId>
  7.     <artifactId>micrometer-tracing-bridge-brave</artifactId>
  8. </dependency>
  9. <dependency>
  10.     <groupId>io.micrometer</groupId>
  11.     <artifactId>micrometer-observation</artifactId>
  12. </dependency>
  13. <dependency>
  14.     <groupId>io.github.openfeign</groupId>
  15.     <artifactId>feign-micrometer</artifactId>
  16. </dependency>
  17. <dependency>
  18.     <groupId>io.zipkin.reporter2</groupId>
  19.     <artifactId>zipkin-reporter-brave</artifactId>
  20. </dependency>
复制代码
6.5.2 YML修改
  1. # zipkin图形展现地址和采样率设置
  2. management:
  3.   zipkin:
  4.     tracing:
  5.       endpoint: http://localhost:9411/api/v2/spans
  6.   tracing:
  7.     sampling:
  8.       probability: 1.0 #采样率默认为0.1(0.1就是10次只能有一次被记录下来),值越大收集越及时。
复制代码
6.5.3 业务类修改
  1. import com.atguigu.cloud.apis.PayFeignApi;
  2. import jakarta.annotation.Resource;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.PathVariable;
  6. import org.springframework.web.bind.annotation.RestController;
  7. @RestController
  8. @Slf4j
  9. public class OrderMicrometerController
  10. {
  11.     @Resource
  12.     private PayFeignApi payFeignApi;
  13.     @GetMapping(value = "/feign/micrometer/{id}")
  14.     public String myMicrometer(@PathVariable("id") Integer id)
  15.     {
  16.         return payFeignApi.myMicrometer(id);
  17.     }
  18. }
复制代码
7.测试

访问 localhost:x/feign/micrometer/1,会看到
  1. {"code":"500","message":"No fallback available.","data":null,"timestamp":1729692505995}
复制代码
进入http://localhost:9411/
可以看到依赖关系,以及实行时间等
从本章节,也可以看出来,约定大于配置的思想体现,事先配置好各组件的版本信息,事半功倍。
只是为了记录本身的学习历程,且本人程度有限,不对之处,请指正。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4