Sleuth(Micrometer) +ZipKin分布式链路追踪的解析以及使用

1、用另一种场景来类比Sleuth和Zipkin的作用

我们来设想一个快递公司的物流追踪系统。设你在网上购买了一本书,当你的订单提交后,后台系统会生成一个唯一的订单号,这个订单号就相当于Sleuth中的Trace ID。你的订单会经过几个主要的处理阶段:接单、打包、运输、配送,每个阶段都可以看作是微服务中的一个服务节点。
Sleuth的角色

  • 接单:订单系统接收订单,标记订单状态为“待打包”,并将订单信息传递给打包部门。
  • 打包:打包部门收到订单信息,开始准备商品,打包完成后,订单状态变为“待运输”,并通知运输部门。
  • 运输:运输部门接到通知,将包裹发往目的地,途中可能经过多个中转站。
  • 配送:最后,配送员从最近的仓库取出包裹,送到你的家门口。

在这个过程中,每个环节都是一个“Span”,Sleuth会记录每个Span的开始和结束时间,以及它与上一个Span的关系,比如打包环节是由接单环节触发的。这就像在每个包裹上贴上一个条形码,每次包裹经过一个处理点,条形码都会被扫描,记录下时间戳。

Zipkin的角色
Zipkin就像是快递公司的物流追踪网站,你可以输入订单号(Trace ID)来查看包裹的实时位置和历史轨迹。它收集了所有这些条形码扫描的信息,把它们整合起来,让你看到包裹从仓库到你手中的完整路径,包括每个处理点花费的时间。

为什么需要它们

在快递公司的场景中,如果没有物流追踪系统,一旦包裹丢失或延迟,查找原因会非常困难。同样,在微服务架构中,如果没有Sleuth和Zipkin,当某个服务调用失败或响应缓慢时,很难快速定位问题所在。有了Sleuth和Zipkin,开发人员可以像快递公司那样,迅速追踪到问题发生在哪个服务节点,以及它与其它服务的交互情况,从而更快地修复问题。

接下来我们就带着以下的问题走进微服务的世界里。
在分布式与微服务场景下,我们需要解决如下问题:

  1. 如何实时观测系统的整体调用链路情况。
  2. 如何快速发现并定位到问题。
  3. 如何尽可能精确的判断故障对系统的影响范围与影响程度。
  4. 如何尽可能精确的梳理出服务之间的依赖关系,并判断出服务之间的依赖关系是否合理。
  5. 如何尽可能精确的分析整个系统调用链路的性能与瓶颈点。
  6. 如何尽可能精确的分析系统的存储瓶颈与容量规划。

Spring Cloud Sleuth官方地址
ZipKin官方下载地址

提示:注意版本问题
在这里插入图片描述
在这里插入图片描述

2、分布式链路追踪的原理

分布式链路追踪是一种在分布式系统中跟踪请求流经多个服务的机制。在微服务架构中,一个用户请求可能需要跨越多个服务边界才能完成,而每个服务又可能调用其他服务。这种复杂的服务调用链使得传统的监控和日志记录难以有效诊断问题。分布式链路追踪正是为了解决这一难题而生,它的主要原理可以概括为以下几个关键点:

  1. Trace 和 Span 概念
  • Trace:一个 Trace 代表一个完整的请求链路,即从客户端发起请求直到最终响应返回的全过程。每个 Trace 都有一个全局唯一的 ID。
  • Span:Span 是 Trace 中的最小单位,表示一次服务调用,它可以包含开始时间、结束时间、调用耗时、调用的状态以及一些元数据(例如标签和注释)。每个 Span 也有一个唯一的 ID,并且可能关联到一个或多个 Tags。
  1. 传播 Context
    在请求跨服务边界时,链路追踪系统会传播一个上下文(Context),其中包含了 Trace ID 和 Span ID,以及可能的采样决策。这样,每个服务节点都能识别出它属于哪一个 Trace,以及它在 Trace 中的位置。
  2. 数据收集和报告
    每个服务节点在其本地会收集 Span 数据,包括时间戳、持续时间、状态代码等。这些数据随后会被报告给一个中央化的数据收集器,如 Zipkin 或 SkyWalking Server。
  3. 数据存储和查询
    收集到的数据会被存储在一个持久化存储中,以便后续分析和查询。存储系统通常支持基于 Trace ID 的查询,以及更复杂的查询条件,如服务名称、时间范围等。
  4. 可视化和分析
    通过可视化界面,链路追踪数据可以以图形化的方式展现出来,形成调用树或者调用链。这有助于快速识别瓶颈、异常和依赖关系。

3、ZipKin的使用

cmd中:java -jar zipkin-server-3.0.0-rc0-exec.jar
访问地址:http://localhost:94 11/zipkin/

4、Micrometer+ZipKin搭建链路监控步骤

  1. 父工程需要引入的依赖(POM文件):
<!--micrometer-tracing-bom导入链路追踪版本中心  1-->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bom</artifactId><version>1.2.0</version><type>pom</type><scope>import</scope>
</dependency>
<!--micrometer-tracing指标追踪  2-->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing</artifactId><version>1.2.0</version>
</dependency>
<!--micrometer-tracing-bridge-brave适配zipkin的桥接包 3-->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bridge-brave</artifactId><version>1.2.0</version>
</dependency>
<!--micrometer-observation 4-->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-observation</artifactId><version>1.12.0</version>
</dependency>
<!--feign-micrometer 5-->
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-micrometer</artifactId><version>12.5</version>
</dependency>
<!--zipkin-reporter-brave 6-->
<dependency><groupId>io.zipkin.reporter2</groupId><artifactId>zipkin-reporter-brave</artifactId><version>2.17.0</version>
</dependency>
  1. 配置文件配置
#========================zipkin===================
management:zipkin:tracing:endpoint: http://localhost:9411/api/v2/spanstracing:sampling:probability: 1.0 #采样率默认为0.1(0.1就是10次只能有一次被记录下来),值越大收集越及时。
  1. 测试
  • 测试之前要保证ZipKin已经成功启动了。。
  • 其次要测试的每个微服务工程也已经启动,并成功注册Concul服务注册中心。
  • 访问测试的地址,发送请求。
  • 浏览器地址栏输入http:/localhost:9411回车,会出现以下界面:
    在这里插入图片描述
  • 点击【show】按钮查看:
    在这里插入图片描述
  • 还可以查看依赖关系:
    在这里插入图片描述

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

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

相关文章

3.5 查找和排序算法

大纲 算法基础 常用的表示算法的方法 算法的复杂度 查找 顺序查找、二分查找 哈希查找 真题 排序 插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 排序算法总结

黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day4 重置版 全网最全最快

你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会…

UniCAVE实现融合输出或多屏输出

介绍 CAVE沉浸式系统包含单主机多屏和多主机多屏两种系统架构。此文档主要介绍融合输出与单机多屏输出&#xff0c;这两种方式都属于单主机多屏。均以使用UniCAVE输出到前左右下为例。引用的Package为UniCAVE2019。 融合输出 实现原理 &#xff08;猜测&#xff09;是将多块…

2024春秋杯网络安全联赛夏季赛Crypto(AK)解题思路及用到的软件

2024春秋杯网络安全联赛夏季赛Crypto(AK) 2024春秋杯网络安全联赛夏季赛Crypto解题思路以及用到的软件 所有题用到的软件 1.vm(虚拟机kali)和Ubuntu&#xff0c;正常配置即可B站有很多。 2.Visual Studio Code(里面要配置python&#xff0c;crypto库和Sagemath数学软件系统S…

基于微信小程序+SpringBoot+Vue的青少年科普教学系统平台(带1w+文档)

基于微信小程序SpringBootVue的青少年科普教学系统平台(带1w文档) 基于微信小程序SpringBootVue的青少年科普教学系统平台(带1w文档) 这个工具就是解决上述问题的最好的解决方案。它不仅可以实时完成信息处理&#xff0c;还缩短高校教师成果信息管理流程&#xff0c;使其系统化…

LINUX之MMC子系统分析

目录 1. 概念1.1 MMC卡1.2 SD卡1.3 SDIO 2. 总线协议2.1 协议2.2 一般协议2.3 写数据2.4 读数据2.5 卡模式2.5.1 SD卡模式2.5.2 eMMC模式 2.6 命令2.6.1 命令类2.6.2 详细命令 2.7 应答2.8 寄存器2.8.1 OCR2.8.2 CID2.8.3 CSD2.8.4 RCA2.8.5 扩展CSD 3. 关键结构3.1 struct sdh…

数学建模(7)——Logistic模型

一、马尔萨斯人口模型 import numpy as np import matplotlib.pyplot as plt# 初始人口 N0 100 # 人口增长率 r 0.02 # 时间段&#xff08;年&#xff09; t np.linspace(0, 200, 200)# 马尔萨斯人口模型 N N0 * np.exp(r * t)# 绘图 plt.plot(t, N, labelPopulation) plt.…

【数据结构】堆的实现以及建堆算法和堆排序

【数据结构】堆的实现以及建堆算法和堆排序 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;数据结构 文章目录 【数据结构】堆的实现以及建堆算法和堆排序前言一.堆的实现1.1 堆数据的插入1.2堆数据的删除 二.建堆算法和堆排序2.1思路分析2.…

java的转义字符,注释和代码规范

目录 1.Java运行机制 Java开发快速入门 Java开发注意事项和细节说明 Java学习方法 2.Java的转义字符 Java常用的转义字符 代码示例&#xff1a; 转义字符练习 3.初学java易犯错误 4.注释&#xff08;comment&#xff09; 单行注释与多行注释 文档注释 5.Java代码规…

Spark轨迹大数据处理_scalaSpark代码实两个GIS点(经纬度点)之间的方位角计算

终于有时间来搞一搞这个专栏了 首先声明一下 1、我这个代码是基于一个简化方位角模型&#xff0c;忽略了地球的曲率&#xff0c;适用于距离相对较短的距离。因为业务相关&#xff0c;这个方位角两个点的距离计算不会超过1000km。 2、我这个方位角的计算逻辑&#xff1a;是从一…

使用Top进行设备性能分析思路

Top命令 像windows一样&#xff0c;linux也有一个“进程管理”&#xff0c;可以在命令行执行 top &#xff0c;就可以整体的查看当前机器的资源及进程情况。 在性能问题中&#xff0c;Top是使用较多的一个命令&#xff0c;一般用它可以从整体上了解系统的CPU、内存、IO情况&am…

MongoDB教程(十七):MongoDB主键类型ObjectId

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、Object…

【状态机动态规划 状态压缩】1434. 每个人戴不同帽子的方案数

本文涉及知识点 位运算、状态压缩、枚举子集汇总 动态规划汇总 LeetCode 1434. 每个人戴不同帽子的方案数 总共有 n 个人和 40 种不同的帽子&#xff0c;帽子编号从 1 到 40 。 给你一个整数列表的列表 hats &#xff0c;其中 hats[i] 是第 i 个人所有喜欢帽子的列表。 请你…

建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书

近日&#xff0c;经欧拉生态创新中心和华为技术有限公司测评&#xff0c;建投数据自主研发的人力资源管理系统、招聘管理系统、绩效管理系统、培训管理系统&#xff0c;完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920&#xff08;Taisha 200&#xff09;的兼容性…

ASP.NET MVC

ASP.NET MVC与.NET Framework关系 .NET Framework是一个庞大的代码库&#xff0c;能为多种编程语言提供支持(如C#、VB、F#等)。同时.NET Framework 提供了多种技术框架&#xff0c;ASP.NET MVC是.NET Framework提供的众多技术框架中的一种&#xff0c;用于开发Web应用。 .NET …

B端:小小详情页蕴藏大学问,附大量案例 。

在B端&#xff08;Business-to-Business&#xff0c;即企业与企业之间的商业模式&#xff09;的设计中&#xff0c;详情页是一个非常重要的环节。虽然它可能看起来只是一个简单的页面&#xff0c;但实际上其中蕴藏着许多大学问。 用户需求与体验&#xff1a; 在B端设计中&…

【Docker】Docker-consul容器服务自动发现与注册

目录 一.Consul概述 1.解决了什么问题 2.什么叫微服务或者注册与发现 3.consul的模式 4.相关命令 二.consul 部署 1.consul服务器部署 2.部署docker容器 3.Nginx负载均衡器 3.1.安装启动nginx 3.2.配置nginx负载均衡 3.3.创建配置consul complate模板文件 3.4.添加…

基于Qt的上位机通用框架

0.前言 最近一年多的时间一直在开发设备控制相关的软件&#xff0c;加上之前在聚光的两年时间&#xff0c;前前后后开发这种设备控制类型的上位机软件也有三年的时间了。总结出了一套基于Qt的上位机编程框架&#xff0c;核心思想类似于C#的依赖注入&#xff0c;对象的初始化都…

JavaScript青少年简明教程:流程控制语句

JavaScript青少年简明教程&#xff1a;流程控制语句 JavaScript 提供了一系列的流程控制语句&#xff0c;用于控制代码的执行顺序。 条件语句 条件语句根据表达式的真假来执行不同的代码块。 if 语句 用于在条件为真时执行代码块。 语法&#xff1a; if(条件){ 条件满足执…

微信小程序获取蓝牙并实现内容打印

通过微信小程序如何实现获取蓝牙打印机并实现打印能力&#xff0c;之前做过一个测试Dome&#xff0c;能够获取附近的蓝牙打印机设备并实现打印,今天开放出来供大家参考。 wxml <!--右下角搜索--> <view class"ly-cass-box"><view class"ly-cas…