Micrometer Tracing和Zipkin实现链路追踪

news2024/9/22 5:28:43

一、为什么使用链路追踪

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

出现问题:

  • 微服务之间的调用错综复杂,用户发送的请求经历哪些服务,调用链不清楚,没有一个自动化的工具类来维护调用链。

  • 无法快速定位调用链中哪个环节出了问题

  • 无法快速定位调用链中哪个环节比较耗时

链路追踪是分布式系统下的一个概念,它的目的就是要解决上面所提出的问题,也就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如,各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。

它主要的作用如下:

  • 自动采取数据

  • 分析数据,产生完整调用链:有了请求的完整调用链,问题有很大概率可复现

  • 数据可视化:每个组件的性能可视化,能帮助我们很好地定位系统的瓶颈,及时找出问题所在

通过分布式追踪系统,我们能很好地定位请求的每条具体请求链路,从而轻易地实现请求链路追踪,进而定位和分析每个模块的性能瓶颈。

1、链路追踪原理

分布式链路的数据模型有以下几个:

  • traceID:单个完整链路的唯一 id,客户端请求微服务1,微服务1请求微服务2拥有同一个traceID

  • spanID:每一个请求链路的id,客户端请求微服务1,微服务1请求微服务2都会有一个spanID

  • parentID:接收到的请求来源id,客户端请求微服务1,则微服务1的parentID是客户端id,客户端的parentID为null
    在这里插入图片描述

上图中

service1接受到网页的请求,traceId=x,spanId=null,parentId=null;
service2接受到service1请求,traceId=x,spanId=B,parentId=service1;
service3接受到service2请求,traceId=x,spanId=C,parentId=service2;

2、Sleuth(弃用了解)

Sleuth 是一个基于 Spring Cloud 的分布式跟踪系统,主要用来解决微服务架构中的分布式链路追踪问题,在分布式系统中,请求往往需要涉及多个服务之间的调用,这时候就需要一种工具来帮助我们进行跟踪和监控。Sleuth 就是这样一种工具,它可以记录下请求在分布式系统中的完整流程,从而方便开发人员进行问题定位和排除。

Sleuth 的工作原理很简单:在服务请求发送过程中,Sleuth 首先会为请求生成一个 Trace ID,Trace ID 是一串唯一标识符,用于唯一标识这个请求,然后在请求的头信息中添加 Trace ID 和 Span ID ,最后将请求发送到相应的服务端。当服务端收到请求后,在请求头信息中取出 Trace ID 和 Span ID,根据这些信息,Sleuth 可以将整个分布式系统中的请求流程记录下来。

Spring Cloud Sleuth不适用于Spring Boot3x及以版本。Sleuth支持的最后一个Spring Boot主要版本是2×。

3、Micrometer Tracing和Zipkin

  • Micrometer Tracing

    Micrometer Tracing是一个基于度量库Micrometer的模块,用于在分布式系统中跟踪请求的流转,并收集相关的性能度量数据。
    Micrometer Tracing提供了与各种分布式跟踪工具(如Brave、Zipkin和Jaeger等)的集成,以帮助用户实现跨服务的请求跟踪和性
    能监控。
    Micrometer Tracing使用的跟踪数据格式通常是OpenTracing和OpenTelemetry格式,这些格式提供了跟踪数据的标准表示方法和
    传递协议,以便于不同的跟踪工具之间的互操作性。

    在Micrometer Tracing中,每个请求都被赋予一个唯一的跟踪ID,跟踪ID会被传递到所有服务和组件中,以便将整个请求路径的类
    据聚合在一起,并可视化其性能瓶颈。Micrometer Tracing还可以为每个请求收集各种度量数据,如请求的持续时间、调用服务的
    数量、请求成功或失败的次数等。

  • Zipkin

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

    ZipKin是一个独立的服务程序,只需要在服务器上安装即可

简单来说Micrometer是用来上传服务的信息,而Zipkin是用界面来显示服务的链路信息

二、SpringCloud整合Micrometer Tracing

注意:所有的服务都要配置

  • 添加依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    
        <properties>
            <java.version>17</java.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <spring-boot.version>3.0.2</spring-boot.version>
            <spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version>
            <spring-cloud.version>2022.0.0</spring-cloud.version>
            <!--链路追踪版本-->
            <micrometer-tracing.version>1.0.4</micrometer-tracing.version>
        </properties>
        
        <dependencies>
            <!--链路追踪相关-->
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-observation</artifactId>
            </dependency>
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-tracing-bridge-brave</artifactId>
            </dependency>
            <dependency>
                <groupId>io.zipkin.reporter2</groupId>
                <artifactId>zipkin-reporter-brave</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-micrometer</artifactId>
                <version>12.3</version>
            </dependency>
        </dependencies>
        
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>io.micrometer</groupId>
                    <artifactId>micrometer-tracing-bom</artifactId>
                    <version>${micrometer-tracing.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </project>
    

    依赖说明:

    • micrometer-observation:一个基于度量库 Micrometer 的观测模块,用于收集应用程序的度量数据。
    • micrometer-tracing-bridge-brave:一个 Micrometer 模块,用于与分布式跟踪工具 Brave 集成,以收集应用程序的分布式跟踪数据。
      • Brave是一个开源的分布式跟踪工具,它可以帮助用户在分布式系统中跟踪请求的流转。Brave使用一种称为“跟踪上下文”的机制,将请求的跟踪信息存储在请求的头部,然后将请求传递给下一个服务。在整个请求链中,Brave会将每个服务处理请求的时间和其他信息存储到跟踪数据中,以便用户可以了解整个请求的路径和性能。
    • zipkin-reporter-brave:一个用于将 Brave 跟踪数据报告到 Zipkin 跟踪系统的库
    • spring-boot-starter-actuator:Spring Boot 框架的一个模块,用于监视和管理应用程序。
    • feign-micrometer:一个 Feign HTTP 客户端的 Micrometer 模块,用于收集客户端请求的度量数据。
  • 修改yml

    #链路追踪配置
    management:
        zipkin:
            tracing:
                endpoint: http://192.172.0.14:9411/api/v2/spans #zipkin服务器地址
        tracing:
            sampling:
                probability: 1.0 # 采样率,0.1表示10次采样1次
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1997254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【经验分享】ShardingSphere+Springboot-03 : COMPLEX_INLINE 复杂行表达式分片算法

文章目录 3.3 复杂分片算法3.3.1 COMPLEX_INLINE 复杂行表达式分片算法 3.3 复杂分片算法 3.3.1 COMPLEX_INLINE 复杂行表达式分片算法 复合分片比较灵活&#xff0c;适合于分片的字段比较多&#xff0c;分片比较复杂的场景&#xff0c;使用这种分片的话必须对自己的业务比较…

深度学习——神经网络(neural network)详解(二). 带手算步骤,步骤清晰0基础可看

深度学习——神经网络&#xff08;neural network&#xff09;详解&#xff08;二&#xff09;. 手算步骤&#xff0c;步骤清晰0基础可看 前文如下&#xff1a;深度学习——神经网络&#xff08;neural network&#xff09;详解&#xff08;一&#xff09;. 带手算步骤&#x…

Java面试篇(JVM相关专题)

文章目录 0. 前言1. 为什么要学 JVM2. 什么是 JVM3. JVM 的好处3.1 一次编写&#xff0c;到处运行3.2 自动内存管理&#xff08;基于垃圾回收机制&#xff09; 4. 要学习哪些 JVM 的哪些内容5. JVM 的组成5.1 程序计数器5.2 堆5.3 什么是虚拟机栈常见问题一&#xff1a;垃圾回收…

代码+视频,R语言VRPM绘制多种模型的彩色列线图

列线图&#xff0c;又称诺莫图&#xff08;Nomogram&#xff09;&#xff0c;它是建立在回归分析的基础上&#xff0c;使用多个临床指标或者生物属性&#xff0c;然后采用带有分数高低的线段&#xff0c;从而达到设置的目的&#xff1a;基于多个变量的值预测一定的临床结局或者…

机器学习入门篇之监督学习(回归篇)——多元线性回归的原理介绍

在机器学习入门之监督学习&#xff08;分类篇&#xff09;-CSDN博客&#xff0c;以及初步接触了机器学习&#xff0c;在这片文章中我们继续沿着思维导图学习监督学习的剩下部分&#xff0c;回归。 在监督学习中&#xff0c;回归是一种预测型建模技术&#xff0c;它涉及预测一个…

尚硅谷谷粒商城项目笔记——十、调试前端项目renren-fast-vue【电脑CPU:AMD】

十、调试前端项目renren-fast-vue 如果遇到其他问题发在评论区&#xff0c;我看到后解决 1 先下载安装git git官网下载地址 2 登录gitee搜索人人开源找到renren-fast-vue复制下载链接。【网课视频中也有详细步骤】 3 下载完成后桌面会出现renren-fast-vue的文件夹 4 开始调…

【阿旭机器学习实战】【39】脑肿瘤数据分析与预测案例:数据分析、预处理、模型训练预测、评估

《------往期经典推荐------》 一、【100个深度学习实战项目】【链接】&#xff0c;持续更新~~ 二、机器学习实战专栏【链接】&#xff0c;已更新31期&#xff0c;欢迎关注&#xff0c;持续更新中~~ 三、深度学习【Pytorch】专栏【链接】 四、【Stable Diffusion绘画系列】专…

python如何判断中文是否一致

Python判断两个相等的中文字符串为false&#xff0c;将两个待比较的字符串都把unicode编码设为‘utf-8’也不能解决问题&#xff0c;具体原因如下&#xff1a; 1、首先查看待比较两个字符串的编码格式 &#xff0c;使用命令&#xff1a; import chardet ...... string_code c…

macos重装系统 启动U盘制作方法 - createinstallmedia 命令使用方法总结

macos重装系统比windows要稍微复杂一些&#xff0c;不过还好&#xff0c;macos系统安装app这个Apple官方提供的系统软件里面默认就内置了一个可用为我们制作启动盘的工具 createinstallmedia 我们下载的apple安装镜像要门是 dmg/pkg/iso 的压缩档案格式的&#xff0c;要么是 x…

智慧安监管理平台建设方案

1. 前言&#xff1a;智慧安监云平台概述 "互联网"安全生产监管监测大数据平台&#xff0c;利用移动互联网、物联网、云计算等技术&#xff0c;实现安全生产监管业务的智能化处理和统一集中管理。平台旨在构建服务导向的智慧安监管理平台&#xff0c;推动安全生产信息…

React 后台管理项目 入门项目 简洁清晰保姆级内容讲解

序章 React Hook的后台管理项目&#xff0c;从0到1搭建&#xff0c;内容非常丰富涵盖项目搭建、路由配置、用户鉴权、首页报表、用户列表、前后端联调等功能&#xff0c;推荐指数&#xff1a;5颗星&#xff01; 视频学习链接: React 通用后台管理-零基础从0到1详细的入门保姆…

PHYS_OPT_SKIPPED

当跳过候选基元单元的物理优化时 单元格的PHYS_OPT_MODIFIED属性已更新&#xff0c;以反映跳过的优化。 当对同一单元格跳过多个优化时&#xff0c;OPT_skipped值包含 跳过的优化列表。 架构支持 所有架构。 适用对象 PHYS_OPT_SKIPPED属性放置在单元格上。 价值观 下表列出了各…

【Qt】动态加载DLL之QLibrary类学习(内含完整Demo源码)

各位看官这里是目录↓↓↓&#xff0c;点击直达哦~ 前言一、QLibrary简介二、常用方法2.1 构造函数2.2 设置要访问的动态库——setFileName()2.3 加载动态库——load()2.4 获取动态库的名字——fileName()2.5 解析共享库中的符号——resolve() 三、示例&#xff08;Demo&#x…

入门学习使用overleaf和latex

文章目录 1.下载对应的latex论文模板2.overleaf平台的使用2.1overleaf平台的介绍2.2overleaf平台模板文件的上传2.3latex语法的学习2.3.2 分段(如下图显示)2.3.3 其他2.3.4简单latex实操2.3.5 换行符和换页符2.3.6左右居中对齐2.3.7 字体设置2.3.8插入固定位置图片2.3.9文字包围…

KillWxapkg 自动化反编译微信小程序,小程序安全评估工具,发现小程序安全问题,自动解密,解包,可还原工程目录,支持修改Hook,小程序

纯Golang实现&#xff0c;一个用于自动化反编译微信小程序的工具&#xff0c;小程序安全利器&#xff0c;自动解密&#xff0c;解包&#xff0c;可还原工程目录&#xff0c;支持微信开发者工具运行 由于采用了UPX压缩的软件体积&#xff0c;工具运行时可能会出现错误报告&…

Springboot整合Flowable入门-学习笔记

目录 1、定义流程&#xff08;画图&#xff09; 2、Springboot部署流程 3、Springboot删除所有流程 4、Springboot根据 流程部署ID 查询 流程定义ID 5、Springboot启动(发起)流程 6、Springboot查询任务 6.1全部任务 6.2我的任务&#xff08;代办任务&#xff09; 7、…

Ubuntu怎么进入救援模式或单用户模式

进入救援模式&#xff08;Rescue Mode&#xff09;或单用户模式&#xff08;Single User Mode&#xff09;的方法取决于你所使用的Linux发行版。以下是通用的步骤&#xff0c;适用于大多数基于GRUB引导的系统&#xff0c;如Ubuntu、Debian、CentOS等&#xff1a; 重启你的系统。…

【Python第三方库】Requests全面解析

文章目录 安装基本用法测试网站发送GET请求发送POST请求更多请求请求参数请求头其他常用请求属性处理响应响应状态码响应内容 处理超时处理异常 requests 是一个非常流行的 Python HTTP 库&#xff0c;用于发送所有类型的 HTTP 请求。它简洁易用&#xff0c;能够处理复杂的请求…

DAMA学习笔记(十三)-大数据和数据科学

1.引言 大数据不仅指数据的量大&#xff0c;也指数据的种类多&#xff08;结构化的和非结构化的&#xff0c;文档、文件、音频、视频、流数据等&#xff09;&#xff0c;以及数据产生的速度快。数据科学家是指从从数据中探究、研发预测模型、机器学习模型、规范性模型和分析方法…

数据结构与算法基础篇--有向无环

. - 力扣&#xff08;LeetCode&#xff09; 力扣-207题 要判定一个图是否为有向无环图&#xff08;DAG, Directed Acyclic Graph&#xff09;&#xff0c;可以使用拓扑排序&#xff08;Topological Sort&#xff09;的方法。如果一个有向图存在拓扑排序&#xff0c;那么它就是…