AlibabaCloud微服务下的链路追踪系统实战详解

🚀 作者 :“二当家-小D”
🚀 博主简介:⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8年开发架构经验,精通java,擅长分布式高并发架构,自动化压力测试,微服务容器化k8s等
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬
🍅文末获取源码联系 配套笔记打包🍅

🔗往期文章传送门:

快速入门SpringCloudAlibaba实战篇【SpringBoot3.x + JDK17】!

高并发解决方案:Sentinel的流量控制、熔断与OpenFeign整合实战 !
构建微服务网关:SpringCloud Gateway快速入门!

目录

    • 一、 微服务架构下的排查问题复杂性概述
    • 二、 SpringCloud的链路追踪组件Sleuth实战
    • 三、 Spring Boot3.x整合Micrometer Tracing实战
    • 四、 微服务下的可视化链路追踪系统Zipkin实战
    • 五、链路追踪组件Zipkin+Micrometer Tracing整合实战
    • 六、 微服务链路追踪系统Zipkin持久化配置
    • 结束语

一、 微服务架构下的排查问题复杂性概述

简介:讲解微服务链路追踪系统的作用

  • 抛两个常见的问题

    • 微服务调用链路出现了问题怎么快速排查?
  • 微服务调用链路耗时长怎么定位是哪个服务?

  • 链路追踪系统

    • 分布式应用架构虽然满足了应用横向扩展的需求,但是运维和诊断的过程变得越来越复杂,例如会遇到接口诊断困难、应用性能诊断复杂、架构分析复杂等难题,传统的监控工具并无法满足,分布式链路系统由此诞生
  • 核心:将一次请求分布式调用,使用GPS定位串起来,记录每个调用的耗时、性能等日志,并通过可视化工具展示出来

  • 注意:

    • AlibabaCloud全家桶还没对应的链路追踪系统,我们使用Sleuth/Micrometer Tracing和zipking(内部使用的鹰眼)
    • 需要注意的是,Sleuth 已经停止对 Spring Boot 3 的支持,而后续的替代者是 Micrometer Tracing。Micrometer Tracing 提供了类似的接口和功能。
  • 链路追踪解决方案:

    • Micrometer Tracing:作为 Sleuth 的后继者,Micrometer Tracing 提供了更强大和灵活的追踪功能。推荐
    • Zipkin:这是一个开源的分布式追踪系统,它可以收集和可视化服务之间的调用关系。
    • Skywalking:这是一个功能丰富的分布式追踪和监控系统,它提供了全面的监控和分析功能。推荐

二、 SpringCloud的链路追踪组件Sleuth实战

简介:讲解什么Sleuth链路追踪系统

  • 什么是Sleuth

    • 一个组件,专门用于记录链路数据的开源组件

    • 文档:Spring Cloud Sleuth

    • 案例

      [order-service,96f95a0dd81fe3ab,852ef4cfcdecabf3,false]
      
      第一个值,spring.application.name的值
      
      第二个值,96f95a0dd81fe3ab ,sleuth生成的一个ID,叫Trace ID,用来标识一条请求链路,一条请求链路中包含一个Trace ID,多个Span ID
      
      第三个值,852ef4cfcdecabf3、spanid 基本的工作单元,获取元数据,如发送一个http
      
      第四个值:false,是否要将该信息输出到zipkin服务中来收集和展示。
      
  • 各个微服务添加依赖

    <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    
  • 启动服务,发送请求

    在这里插入图片描述

三、 Spring Boot3.x整合Micrometer Tracing实战

简介:讲解Micrometer Tracing介绍和部署实战

  • 什么是Micrometer Tracing

    • Spring Cloud Sleuth项目目前只维护到 3.1.9, 只支持到 Springboot 2.x 系列, 项目主页也说明了后续维护迁移到了 Micrometer Tracing 项目中。
      在这里插入图片描述
  • 如何迁移

    • 参考这篇文章Observability With Spring Boot 3 | Baeldung

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

      • micrometer-observation:一个基于度量库Micrometer的观测模块,用于收集应用程序的度量数据。
      • micrometer-tracing-bridge-brave:一个Micrometer模块,用于与分布式跟踪工具Brave 集成,以收集应用程序的分布式跟踪数据。
      • Brave是一个开源的分布式跟踪工具,它可以帮助用户在分布式系统中跟踪请求的流转。Brave使用一种称为"跟踪上下文"的机制,将请求的跟踪信息存储在请求的头部,然后将请求传递给下一个服务。在整个请求链中,Brave会将每个服务处理请求的时间和其他信息存储到跟踪数据中,以便用户可以了解整个请求的路径和性能。
    • 添加 Actuator Starter 和 Mircometer-Tracing-Bridge-Brave 的依赖

      <!-- Micrometer与Brave的追踪桥接器依赖 -->
      <dependency>
          <groupId>io.micrometer</groupId>
          <artifactId>micrometer-tracing-bridge-brave</artifactId>
      </dependency>
      <!-- Spring Boot的Actuator模块,用于监控和管理 -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>
      
    • Actuator 提供了可观测部分的自动注入, Mircometer-Tracing-Bridge-Brave 则是对 Sleuth 底层 Brave 的依赖传递, 使应用上层无需改动使用方式。

    • 注意:使用Micrometer Tracing,跟踪traceid和spanid不会显示在日志中

      • 解决方案:使用千分尺跟踪时自动记录相关 ID ·问题 #33280

        logging:
          pattern:
            level: ${spring.application.name:},%X{traceId:-},%X{spanId:-}
        

        在这里插入图片描述

四、 微服务下的可视化链路追踪系统Zipkin实战

简介:讲解zipkin介绍和部署实战

  • 什么是zipkin

    • 官网
      • https://zipkin.io/
      • https://zipkin.io/pages/quickstart.html
    • 大规模分布式系统的APM工具(Application Performance Management),基于Google Dapper的基础实现,和sleuth结合可以提供可视化web界面分析调用链路耗时情况
  • 同类产品

    • 鹰眼(EagleEye)
    • CAT
    • twitter开源zipkin,结合sleuth
    • Pinpoint,运用JavaAgent字节码增强技术
  • StackDriver Trace (Google)

  • 开始使用

    • 安装包在资料里面,启动服务
    java -jar zipkin-server-3.3.0-exec.jar
    
    • 访问入口:http://127.0.0.1:9411/zipkin/
    • zipkin组成:Collector、Storage、Restful API、Web UI组成

    architecture-1

五、链路追踪组件Zipkin+Micrometer Tracing整合实战

简介:使用Zipkin+Micrometer Tracing业务分析调用链路分析实战

  • Micrometer Tracing收集跟踪信息通过http请求发送给zipkin server

  • zipkin server进行跟踪信息的存储以及提供Rest API即可

  • Zipkin UI调用其API接口进行数据展示默认存储是内存,可也用mysql 或者elasticsearch等存储

  • 微服务加入依赖

    <dependency>
        <groupId>io.zipkin.reporter2</groupId>
        <artifactId>zipkin-reporter-brave</artifactId>
    </dependency>
    
    • zipkin-reporter-brave:一个用于将Brave跟踪数据报告到Zipkin跟踪系统的库。
  • 配置地址和采样百分比配置

    management:
      zipkin:
        tracing:
          endpoint: http://localhost:9411/api/v2/spans
      tracing:
        sampling:
          probability: 1.0 #采样率默认为0.1(0.1就是10次只能有一次被记录下来),值越大收集越及时。
    #默认为0.1,即10%,这里配置1,是记录全部的sleuth信息,是为了收集到更多的数据(仅供测试用)。
    #在分布式系统中,过于频繁的采样会影响系统性能,所以这里配置需要采用一个合适的值。
    
  • 发送请求

    在这里插入图片描述

  • 点击依赖,查看整条链路

    在这里插入图片描述

六、 微服务链路追踪系统Zipkin持久化配置

简介:实战zipkin链路追踪日志持久化

  • 现存在的问题

    • 服务重启会导致链路追踪系统数据丢失
  • 持久化配置:mysql或者elasticsearch

    • 创建数据库表SQL脚本 (资料包里面有)
    • 启动命令
    java -jar java -jar zipkin-server-3.3.0-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin_log --MYSQL_USER=root --MYSQL_PASS=xdclass.net
    

结束语

今天的文章分享了微服务架构下的链路追踪技术,从SpringCloud的Sleuth入手,到Micrometer Tracing的整合,再到Zipkin的可视化链路追踪,最后实现链路追踪数据的持久化配置。通过这些希望能帮助大家更好地理解和运用微服务架构中的链路追踪技术,后面还会分享Skywalking的整合,大家记得关注。

今天的文章就到这了,关注D哥,下期分享更多关于SpringCloud Alibaba干货!

资料获取📚
完整代码和笔记已经准备好,如果有问题,可以在评论区留言讨论💬
原创不易,别忘了点赞👍+收藏⭐哦!
点击下方链接即可获取完整资料压缩包🎁,快来领取吧!↓↓↓↓

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

拼多多投产比和成交出价哪个好

拼多多推广可以使用3an推客。3an推客&#xff08;CPS模式&#xff09;给商家提供的营销工具&#xff0c;由商家自主设置佣金比例&#xff0c;激励推广者去帮助商家推广商品链接&#xff0c;按最终有效交易金额支付佣金&#xff0c;不成交不扣费。是商家破零、积累基础销量的重要…

2024年大学生三下乡社会实践活动投稿注意事项

随着2024年夏季的热浪一同涌来的,是我校一年一度的“大学生三下乡”社会实践活动。作为一名积极参与其中的大学生,我满怀激情地投身于这项旨在促进农村发展的公益行动中。然而,当活动圆满落幕,轮到我承担起向各大媒体投稿、传播实践成果的重任时,却遭遇了一系列意想不到的挑战,…

拼多多投产比怎么计算?

拼多多投产比&#xff08;ROI&#xff09;的计算公式为&#xff1a;ROI 成交金额 / 花费 100%。也可以简单理解为&#xff1a;ROI 点击量 * 转化率 * 客单价 / (点击量 * 平均点击花费)。 拼多多推广可以使用3an推客。3an推客&#xff08;CPS模式&#xff09;给商家提供的营…

Kubernetes概述及其组件/核心组件

目录 前言&#xff1a; 一、简介 1.Kubernetes 概述 2.为什么要用 K8S? 3.k8s特性 3.1自我修复 3.2弹性伸缩 3.3自动部署和回滚 3.4服务发现和负载均衡 3.5机密和配置管理 3.6存储编排 3.7批量处理 4.Kubernetes 集群架构与组件 4.1核心组件 4.2架构 4.3配置存…

【2024版】最新6款漏洞扫描工具来了!(附下载)看完这一篇就够了

目录 一、Nessus 二、AWVS 三、ZAP 四、w3af 五、北极熊 六、御剑 七、网络安全学习路线 &#xff08;2024最新整理&#xff09; 八、学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明&#xff1a; 渗透测试收集信息完成后&#xf…

Linux-笔记 uboot修改设备树

1. FDT介绍 扁平设备树&#xff08;Flattened Device Tree&#xff0c;FDT&#xff09;&#xff0c;也叫平坦设备树&#xff0c;是设备树的一种二进制表示形式&#xff0c;提高了在嵌入式系统中的传输和解析效率&#xff1b; 2. 在U-Boot中使用FDT 2.1. 进入U-Boot 开发板上…

汽车电子零部件(13):BMS电池管理系统

前言: 电池管理系统(BMS)确保电动汽车(EV)的能量分配安全高效。目前流行电动汽车中使用的有四种主要BMS架构,BMS与充电基础设施互为集成关系。BMS主要管理 的是电池组,电池组由很多电芯组成,比如下图是H/EV电池组的主要部件,显示了电池、连接、控制电路和包装的总体布…

TensorFlow、pytorch和python对应的版本关系

安装深度学习框架的时候需要考虑版本的关系&#xff0c;不然装了用不了就尴尬了。 深度学习首先得问题就是用CPU跑&#xff0c;还是GPU跑。。当然有英伟达显卡的都想用GPU跑&#xff0c;不然买显卡是做啥、、GPU跑得多块&#xff0c;一下就训练完了。但是有的同学没得gpu&…

Capl简单数据类型

Capl简单数据类型&#xff0c;分为三大类&#xff0c;分别是整形、浮点型、字符型。 1.整形 在数据保存到变量中的时候&#xff0c;如果超过了变量存储的范围&#xff0c;会被截断。 在capl语言中&#xff0c;系统会默认给常量分配四个字节的空间。 例如byte a255;其中255是…

EtherCAT总线速度轴控制功能块(COSESYS ST源代码)

测试环境为汇川PLC,型号 AM402-CPU1608TP、伺服驱动器为禾川X3E,具体通信配置可以参考下面文章链接: 1、使能和点动控制 汇川AM400PLC通过EtherCAT总线控制禾川X3E伺服使能和点动控制-CSDN博客文章浏览阅读31次。进行通信之前需要安装禾川X3E的XML文件,具体方法如下:1、汇…

小米SU7智能座舱揭秘:五音区语音交互,智能语音新体验

“小爱同学&#xff0c;打开右后方车门。” “小爱同学&#xff0c;前面的山是什么山&#xff1f;” “小爱同学&#xff0c;有没有离簋街和望京都比较近的川菜馆&#xff1f;” “小爱同学&#xff0c;右后视镜向外调20%&#xff0c;左后视镜往里调10%。” “小爱同学&#xf…

AI电视起风,三星电视打破“隔代飞跃”,在AI纪元再次领跑

作者 | 曾响铃 文 | 响铃说 要说什么是当下最热的话题&#xff0c;刚落下帷幕的北京车展一定是其中之一&#xff0c;除了各类让人眼花缭乱的新车&#xff0c;纷至沓来的各界行业大佬&#xff0c;也让车展话题度被不断拉高。在此之外&#xff0c;此次车展还刮起了一股“旋风”…

C++反汇编,指针和内存分配细节,面试题05

文章目录 20. 指针 vs 引用21. new vs malloc 20. 指针 vs 引用 指针是实体&#xff0c;占用内存空间&#xff0c;逻辑上独立&#xff1b;引用是别名&#xff0c;与变量共享内存空间&#xff0c;逻辑上不独立。指针定义时可以不初始化&#xff1b;引用定义时必须初始化。指针的…

通过MediaPipe+MiDaS实现人脸单目测距

MediaPipe&#xff1a;是Google开发的适用于直播和流媒体的开源、跨平台、可定制的机器学习解决方案。code地址&#xff1a;https://github.com/google/mediapipe &#xff0c;最新发布版本v0.10.11&#xff0c;license为Apache-2.0。MediaPipe Solutions提供了一套库和工具&am…

【Linux网络】HTTPS【上】{运营商劫持/加密方式/数据摘要/https的诞生}

文章目录 1.引入1.1http与https1.2SSL/TLS1.3VPN1.4认识1.5密码学1.6为什么要加密&#xff1f;运营商 1.7常见的加密方式对称加密非对称加密 2.加密与解密3.数据摘要 && 数据指纹MD5 数字 签名理解三者数据摘要&#xff08;Digital Digest&#xff09;&#xff1a;数字…

数据结构与算法之树和二叉树的一些概念和性质

目录 前言 一、树的定义 二、树的若干术语 1.结点的度 2.叶子 3.双亲与孩子 4.兄弟 5.祖先 6.树的度 7.结点的层次 8.树的深度 9.有序树和无序树 10.森林 三、树的逻辑结构 四、树的存储结构 1.顺序存储 2.链式存储 五、二叉树 1.定义 2.二叉树的五种状态 …

美食推荐网站设计

**中文摘要&#xff1a;**在当今信息化、网络化的时代背景下&#xff0c;美食文化正逐渐融入人们的日常生活&#xff0c;而网络平台成为人们获取美食信息、分享美食体验的重要途径。为了满足广大美食爱好者对美食信息的探索和推荐需求&#xff0c;本文提出了一种创新的美食推荐…

OS复习笔记ch5-3

引言 上一节我们学习了关于信号量机制的一些内容&#xff0c;包括信号量的含义&#xff0c;对应的PV操作等。 如图所示&#xff0c;上一节主要是针对信号量的互斥&#xff0c;其实信号量机制还可以做很多事情&#xff0c;比如实现进程同步和前驱关系&#xff0c;这一节我们先复…

Selenium 自动化 —— 常用的定位器(Locator)

什么是定位器 定位器&#xff08;Locator&#xff09;是识别DOM中一个或多个特定元素的方法。 也可以叫选择器 Selenium 通过By类&#xff0c;提供了常见的定位器。具体语法如下&#xff1a; By.xxx("");我们选择单个元素时可以使用findByElement&#xff1a; Web…

ICode国际青少年编程竞赛- Python-2级训练场-坐标与列表练习

ICode国际青少年编程竞赛- Python-2级训练场-坐标与列表练习 1、 for i in range(6):Spaceship.step(Item[i].x - Spaceship.x)Dev.step(Item[i].y - Dev.y)Dev.step(Spaceship.y - Dev.y)2、 for i in range(5):Spaceship.step(Item[i].x - Spaceship.x)Flyer[i].step(Item[…