【SpringCloud】5.Micromete——分布式链路追踪

news/2024/12/26 19:55:44/文章来源:https://www.cnblogs.com/luyj00436/p/18619359

必要性:

由客户端发起的请求会形成链路,任何一环出现问题,可能导致失败。我们需要快速的观测、定位和解决问题。

  • 概述
  • ZipKin
  • Micromete+ZipKin搭建链路控制案例

概述

为什么需要分布式链路技术

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

在分布式与微服务场景下,我们需要解决如下问题:

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

分布式链路追踪技术要解决的问题,分布式链路追踪(Distributed Tracing),就是将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。

Sleuth官宣进入维护模式

Seleuth官宣进入维护模式,Sleuth未来的地带方法micrometer.io

行业内比较常见的技术方案如下:

image

Zipkin

概述

官网(我用火狐浏览器没有打开,用其他浏览器打开了): https://zipkin.io/

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

只有日志没有图,观察不方便,不美观。引入Zipkin链路监控后能更好的观察。

下载+安装+ 运行

下载地址:https://zipkin.io/pages/quickstart.html

支持三种Java、Docker和运行源码这三种使用方式。这里,我们运行Jar包。
image

打开下载的jar包,运行jarjava -jar zipkin-server-3.0.0-rc0-exec.jar
image

运行控制台:浏览器输入地址http://localhost:9411/zipkin/

Micromete+ZipKin搭建链路控制案例

Micrometer 负责数据采样;ZipKin负责图形化展示。

前提:已启动consul和zipkin

步骤

具体步骤如下:

  • 父工程引入依赖
  • 服务提供者8001
  • PayFeign公共接口
  • 服务调用者

父工程引入依赖

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

序号 依赖 说明
1 micrometer-tracing-bom 导入链路追踪版本中心,体系化说明
2 micrometer-tracing 指标追踪
3 micrometer-tracing-bridge-brave 一个Micrometer模块,用于与分布式跟踪工具 Brave 集成,以收集应用程序的分布式跟踪数据。Brave是一个开源的分布式跟踪工具,它可以帮助用户在分布式系统中跟踪请求的流转,它使用一种称为"跟踪上下文"的机制,将请求的跟踪信息存储在请求的头部,然后将请求传递给下一个服务。在整个请求链中,Brave会将每个服务处理请求的时间和其他信息存储到跟踪数据中,以便用户可以了解整个请求的路径和性能。
4 micrometer-observation 一个基于度量库 Micrometer的观测模块,用于收集应用程序的度量数据
5 feign-micrometer 一个Feign HTTP客户端的Micrometer模块,用于收集客户端请求的度量数
6 zipkin-reporter-brave 一个用于Brave跟踪数据报告到Zipkin跟踪系统的库。

打开父工程的pom.xml文件,引入依赖。

<!--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.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>

服务提供者8001

步骤(改POM,改YML,新建接口)

改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>

写YAML,配置连接zipkin

# ========================zipkin===================
management:zipkin:tracing:endpoint: http://localhost:9411/api/v2/spanstracing:sampling:probability: 1.0 #采样率默认为0.1(0.1就是10次只能有一次被记录下来),值越大收集越及时。

新建公共类:PayMicrometerController,用于测试测试链路的例子

/*** @Author:lyj* @Filename:PayMicrometerController*/
@RestController
public class PayMicrometerController {/*** Micrometer(Sleuth)进行链路监控的例子* @param id* @return*/@GetMapping(value = "/pay/micrometer/{id}")public ResultData<String> myMicrometer(@PathVariable("id") Integer id) {return ResultData.success( "Hello, 欢迎到来myMicrometer inputId:  "+id+" \t    服务返回:" + IdUtil.simpleUUID() );}
}

PayFeign公共接口

PayFeign公共接口添加一个例子

/*** Micrometer(Sleuth)进行链路监控的例子* @param id* @return*/
@GetMapping(value = "/pay/micrometer/{id}")
public ResultData<String> myMicrometer(@PathVariable("id") Integer id);

服务调用者(cloud-consumer-feign-order80)

pom.xml文件引入依赖

 <!--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>

写YML,引入zipkin地址

# zipkin图形展现地址和采样率设置
management:zipkin:tracing:endpoint: http://localhost:9411/api/v2/spanstracing:sampling:probability: 1.0 #采样率默认为0.1(0.1就是10次只能有一次被记录下来),值越大收集越及时。

新建业务类OrderMicrometerController :

@RestController
@Slf4j
public class OrderMicrometerController {@Resourceprivate PayFeignApi payFeignApi;@GetMapping(value = "/feign/micrometer/{id}")public ResultData<String> myMicrometer(@PathVariable("id") Integer id) {return payFeignApi.myMicrometer(id);}
}

测试

启动8001/8002/80 ,Zipkin

测试地址:http://localhost:80/feign/micrometer/1

浏览器打开:http://localhost:9411/
image

查看依赖关系

image

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

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

相关文章

区块链技术学习笔记

密码学基础 哈希算法 哈希算法是指把任意输入值通过特定方式(hash 函数)处理后生成一个结果值。有时会发生输入值不同,但是处理后结果值相同的情况,这就叫哈希冲突。但一般来说,只要哈希函数设计得当,并且样本足够大,那么发生哈希冲突的概率可以忽略不计。因此,可以认为…

Web浏览器播放rtsp视频流详细解决方案

1、背景 在当前项目中,需要实现Web端直接播放RTSP视频流。该功能的核心目标是使得用户能够通过浏览器观看来自不同品牌的IPC(Internet Protocol Camera)设备的实时视频流。主要的IPC设备来自海康威视、大华科技以及宇视等厂商,这些设备普遍使用RTSP协议来传输视频数据。点播…

怎么写好年末报告——看板软件篇

通过明确报告目的、结构清晰、合理利用看板软件等工具和方法,可以撰写出一份既全面又具有深度的年末报告,并为团队的工作提供有力的支持和指导。年末报告怎么写 年末报告是总结过去一年工作成果、分析存在问题并提出未来规划的重要文档。以下是一份撰写年末报告的指南: 明确…

2024年项目管理软件排行榜:哪款最适合你?

在项目管理领域,选择合适的软件工具是确保项目成功的关键因素之一。随着技术的不断进步,市场上涌现出众多功能强大、易于使用的项目管理软件。本文将为您详细介绍2024年最受欢迎的项目管理软件,帮助您找到最适合您团队需求的工具。 禅道项目管理软件禅道项目管理软件是一款开…

学习高校课程-软件设计模式-状态、策略和模版模式(lec12)

State: Problem A finite number of states The program behaves differently within a state Can be switched from one state to another, and switching rules (transitions) are also finite and predetermined 有限数量的状态 程序在某个状态下的行为有所不同 可以从一种状…

Java项目实战:基于 Spring、SpringMVC、MyBatis 与 JSP 的新闻管理系统架构设计与功能实现

1. 引言 1.1目的 本设计文档旨在详细描述基于SSM框架的新闻管理系统的设计方案,包括系统架构、功能模块、数据库设计、接口设计等方面,为系统的开发、测试和维护提供依据,确保系统能够满足用户需求,具有良好的性能、可扩展性和可维护性。 1.2范围 本系统涵盖了新闻管理的各…

宠物公司双旦工作管理,啥办公软件可优化流程?

双旦佳节来临,宠物行业迎来销售热潮,业务量呈井喷式增长。在这繁忙时期,高效的团队协作办公软件成为避免任务延误、确保业务顺畅运转的关键。此类软件能让各部门紧密配合,精准执行任务,提升整体工作效率。以下将盘点 6 款适用于宠物公司的可视化团队协作办公软件。 一、板…

基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署

环境说明:Ubuntu:v24.04.1 LTS Jekins:v2.491 Docker:v27.4.0 Gogs:v0.14.0 - 可选。可以选择Github,Gitlab或者Gitea等Git仓库,不限仓库类型 1Panel: v1.10.21-lts - 可选。这里主要用于查看和管理Docker容器Jenkins实现参数化构建 这里通过Docker进行安装 【系统管理】…

ABB弧焊机器人保养主要包括哪些?

ABB弧焊机器人保养主要包括日检查及维护、周检查及维护和月检查及维护三个方面。一、日检查及维护 - 检查送丝机构,包括送丝力距是否正常,送丝导管是否损坏,有无异常报警。 - 检查气体流量是否正常。 - 检查焊枪安全保护系统是否正常(禁止关闭焊枪安全保护工作…

视频流媒体播放器EasyPlayer-RTSP原始录像文件被新录像文件覆盖是什么原因

媒体播放器EasyPlayer有很多版本,其中EasyPlayer-RTSP就是能够输出RTSP视频流的版本,由于RTSP的需求众多,因此RTSP版本的用户也是很广泛。 EasyPlayer-RTSP录像文件被覆盖EasyPlayer-RTSP是可以进行录像的,在录制录像文件时会出现开始录像后产生一个录像文件,停止录像后,…

electron 打包

electron打包方案electron-builderelectron-builder 1. 安装 electron-builder npm install --save-dev electron-builder2.修改 package.json,添加一条scripts命令和build配置。"build": "electron-builder --win" // 打包命令"build": {"…

MP地面站二次开发教程Mavlink通讯协议

Mavlink主要是飞控和地面站之间的消息指令发送,包含地面站解析飞控发来的mavlink数据流,和地面站向飞控发送mavlink指令(指令,航点数据,校准数据)两部分。地面站有mavlink库,对应飞控端也有一套mavlink库。 1、协议介绍Mavlink协议官网:http://qgroundcontrol.org/mavlink…