首页 > 其他分享 >08.Sleuth(Micrometer)+ZipKin分布式链路追逐

08.Sleuth(Micrometer)+ZipKin分布式链路追逐

时间:2024-10-23 22:09:20浏览次数:6  
标签:Sleuth ZipKin tracing 08 zipkin micrometer io 链路 分布式

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开发的实时应用监控平台,包括实时应用监控,业务监控。集成方案是通过代码埋点的方式来实现监控,比如:拦截器,过滤器等。对代码的侵入性很大,集成成本较高。风险较大。
Pinpoint Pinpoint是一款开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
Skywalking Skywalking是国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,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

新增的

<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是一个门面工具自身并没有实现完整的链路追踪系统,具体的链路追踪另外需要引入的是第三方链路追踪系统的依赖。

引入组件说明

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不用引入

<!--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>
6.3.2 YML修改
# ========================zipkin===================
management:
  zipkin:
    tracing:
      endpoint: http://localhost:9411/api/v2/spans
  tracing:
    sampling:
      probability: 1.0 #采样率默认为0.1(0.1就是10次只能有一次被记录下来),值越大收集越及时。
6.3.3 新建PayMicrometerController
import cn.hutool.core.util.IdUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

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();
    }
}

6.4 API接口PayFeignApi修改

@GetMapping(value = "/pay/micrometer/{id}")
String myMicrometer(@PathVariable("id") Integer id);

6.5 服务调用者80修改

6.5.1 POM
 <!--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>
6.5.2 YML修改
# zipkin图形展现地址和采样率设置
management:
  zipkin:
    tracing:
      endpoint: http://localhost:9411/api/v2/spans
  tracing:
    sampling:
      probability: 1.0 #采样率默认为0.1(0.1就是10次只能有一次被记录下来),值越大收集越及时。
6.5.3 业务类修改
import com.atguigu.cloud.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
{
    @Resource
    private PayFeignApi payFeignApi;

    @GetMapping(value = "/feign/micrometer/{id}")
    public String myMicrometer(@PathVariable("id") Integer id)
    {
        return payFeignApi.myMicrometer(id);
    }
}

7.测试

访问 localhost:x/feign/micrometer/1,会看到

{"code":"500","message":"No fallback available.","data":null,"timestamp":1729692505995}

进入http://localhost:9411/

可以看到依赖关系,以及执行时间等

从本章节,也可以看出来,约定大于配置的思想体现,事先配置好各组件的版本信息,事半功倍。

只是为了记录自己的学习历程,且本人水平有限,不对之处,请指正。

标签:Sleuth,ZipKin,tracing,08,zipkin,micrometer,io,链路,分布式
From: https://www.cnblogs.com/changming06/p/18498463

相关文章

  • 【python学习记录篇】08.for、while、break、continue,在python里的使用比在英语阅读理
    小白学习纪实,跨专业学python的第八天~睡了一觉起来觉得自己又行了~   8.1循环    很多情况下,我们会比较讨厌重复着做着相同的事情,因为这样枯燥乏味。很直接的,在我们睡不着失眠的时候,我们会选择重复数绵羊加速我们睡眠。对于程序员来讲同样不喜欢重复地做......
  • springboot图书销售管理系统-计算机毕业设计源码38008
    摘要JavaEE的图书销售管理系统是一个基于JavaEE技术开发的综合性图书销售和管理平台,旨在帮助图书店管理者提高图书销售效率和管理水平。系统主要功能包括网站公告,图书资讯,图书中心,商城管理,图书信息,个人首页,图书信息,商品中心,订单配送等。图书信息管理模块可以实现图书的添加......
  • 《使用Gin框架构建分布式应用》阅读笔记:p108-p126
    《用Gin框架构建分布式应用》学习第8天,p108-p126总结,总计18页。一、技术总结1.Redisevictionpolicy(1)什么是evictionpolicy?Theevictionpolicydetermineswhathappenswhenadatabasereachesitsmemorylimit.(2)配置示例在redis.conf中配置。maxmemory-policy......
  • P11208 解题报告
    题目传送门将题意转化一下:将序列变为单调上升等价于逆序对总数量为\(0\)。首先看到交换相邻两个数,立马反应过来这种操作最好情况会使逆序对总数减一。为什么呢?首先肯定要前面大于后面才交换,否则一定不优。假设前为\(i\),后为\(j\),钦定我们计算逆序对的方式是从后往前,依次看......
  • django 新型农机网站 计算机专业毕业设计源码08514
    摘 要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于新型农机网站当然也不能排除在外,随着网络技术的不断成熟,带动了新型农机网站,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种个性化的......
  • AbMole|Apilimod mesylate Apilimod甲磺酸盐(CAS号 870087-36-8;目录号M9418)
    Apilimodmesylate(STA5326mesylate,Apilimod甲磺酸盐)是Apilimod的甲磺酸盐形式,也是一种具有口服活性的IL-12/IL-23抑制剂,抑制IFN-γ/LPS刺激的人PBMC产生IL-12的IC50值为10nM。可用于难治性葡萄膜炎的相关研究。生物活性Apilimod甲磺酸盐是一种IL-12/IL-23抑制剂,抑制IFN-......
  • AbMole|Erastin2(CAS号1695533-44-8;目录号M21708)
    Erastin2是一种ferroptosis铁死亡的诱导剂,是xc(-)胱氨酸/谷氨酸转运体系统的有效的选择性抑制剂。化学性质分子量623.14分子式C36H35ClN4O4CAS号1695533-44-8溶解性(25°C)DMSO90mg/mL储存条件4°C,protectfromlight运输方式冰袋运输,根据产品的不同,可能会有相应调整......
  • GBU608-ASEMI室内空调机专用GBU608
    编辑:llGBU608-ASEMI室内空调机专用GBU608型号:GBU608品牌:ASEMI封装:GBU-4安装方式:直插批号:2024+现货:50000+正向电流(Id):6A反向耐压(VRRM):800V正向浪涌电流:175A正向电压(VF):1.10V引脚数量:4芯片个数:4芯片尺寸:MIL功率(Pd):中小功率工作温度:-55°C~150°C类型:整流扁桥、插件整......
  • MH2457国产屏驱MCU,可驱动1080P分辨率屏幕
    MH2457屏驱MCU集成与IEEE-802.3-2002兼容的介质访问控制器(MAC),通过工业标准的介质独立接口(MII)或精简介质独立接口(RMII)进行以太网LAN通信。微控制器需要外部物理接口器件(PHY)以连接到物理LAN总线(双绞线、光纤等)。PHY连至器件的MII端口,对于MII使用17个......
  • 20222308 2024-2025-2《网络与系统攻防技术》实验二实验报告
    1.实验内容1.1实践目标使用netcat获取主机操作Shell,cron启动某项任务(任务自定)PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程使用socat获取主机操作Shell,任务计划启动使用MSFmeterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机......