微服务SpringCloud链路追踪之Micrometer+Zipkin

news2024/12/16 21:30:42

视频教程: https://www.bilibili.com/video/BV12LBFYjEvR

效果演示

当我们发送一个请求给 Gateway 的时候,由 Micrometer trace 进行链路追踪和数据收集,由 Zipkin 进行数据展示。可以清楚的看到微服务的调用过程,以及每个微服务处理工作所花的时间。
在这里插入图片描述

在生产环境当中,如果一个接口响应数据较慢,可以使用这个工具快速查看具体是哪个环节较慢,进行针对性的调优。

项目准备

为本篇文章的编写,我准备了一个 Spring Cloud 小项目,你可以通过这个链接下载整合 MicrometerZipkin 之前的项目代码:https://github.com/xiaohh-me/xiaohh-cloud-micrometer/archive/refs/tags/v1.0.0.tar.gz 或 https://github.com/xiaohh-me/xiaohh-cloud-micrometer/archive/refs/tags/v1.0.0.zip。

该项目采用的技术栈:

技术栈版本
SpringBoot3.2.12
SpringCloud2023.0.4
SpringCloudAlibaba2023.0.1.0
MyBatisStarter3.0.4

当然接下来需要引入的 micrometer-tracing 使用的是 1.4.1 的版本。运行这个项目你需要安装jdk 17或更高的版本。

这个项目我还准备了一个多个服务之间调用的一个接口,调用新建订单时会有这么一个流程:

  • Gateway 网关模块接收到新建订单的请求,并转发到 Order 订单模块。
  • Order 订单模块新建订单,并将 OrderID 和价格信息传入给 Pay 支付模块进行支付。
  • Pay 支付模块调用 Account 账户模块进行扣减余额。

最终形成了上面效果演示显示形成的调用链路关系,调用方式如下:

http://localhost:8080/order/orderInfo
{
    "orderAmount": "99.99" // 订单金额
}

Zipkin 下载和运行

Zipkin 是一个单独的分布式追踪系统,需要单独下载和运行。zipkin 官网:https://zipkin.io。可以来到官网的 Quickstart 界面,点击 latest release 进行下载。当然下载下来是一个jar包,你需要安装 java 17 才能运行它:
在这里插入图片描述

下载下来之后将会是一个jar包:
在这里插入图片描述

然后你可以使用这行命令运行 zipkin 服务器:

java -jar zipkin-server-{version}-exec.jar

如图所示则代表启动成功:
在这里插入图片描述

项目修改

启动nacos注册/配置中心

笔者提供的代码使用的是nacos的注册中心和配置中心,nacos的下载可以点击这里,注册中心需要链接 MySQL5.7+ 数据库。导出的数据库脚本在项目当中有包含:
在这里插入图片描述

其余三个分别为三个微服务模块的数据库脚本文件。在MySQL当中执行这四个文件即可将项目所需要用到的数据库创建完成。接下来需要修改nacos的配置文件,位置在 conf/application.properties 。需要设置数据库的连接,在原文件找到对应的修改位置即可:

spring.datasource.platform=mysql
spring.sql.init.platform=mysql
db.num=1
# 注意数据库的IP地址
db.url.0=jdbc:mysql://127.0.0.1:3306/xiaohh_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0={修改为你自己数据库的密码}

然后执行下面这行命令即可启动nacos:

# Linux/Unix/MacOS
./bin/startup.sh -m standalone

# Windows
bin/startup.sh -m standalone

在执行后等一段时间可以访问服务器的 8848 端口的 /nacos 目录,可以看到我已经添加了一些配置文件:
在这里插入图片描述

Gateway 当中的配置包含了三个微服务的路由:
在这里插入图片描述

其余的三个配置文件配置了数据库连接,注意修改MySQL服务器地址、数据库用户名和密码:
在这里插入图片描述

启动Zipkin

在上面 Zipkin 的下载和运行已经启动了 Zipkin,请在项目运行前确认 Zipkin 是否依然在运行状态。启动 Zipkin 的命令:

java -jar zipkin-server-{version}-exec.jar

修改项目代码

如果你是聚合的微服务项目(如我提供的代码),请将下面的代码添加到聚合项目的总 pom.xml<dependencyManagement> -> <dependency> 下:

<!-- 链路追踪依赖 -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bom</artifactId>
    <version>${micrometer-tracing.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

添加如图:
在这里插入图片描述

然后在 pom.xml<properties> 标签下添加这么一个properties,来具体指定一个 Micrometer 的版本号(具体的版本号可参考官方文档已经maven中央仓库):

<micrometer-tracing.version>1.4.1</micrometer-tracing.version>

添加如图:
在这里插入图片描述

然后在各个微服务的 pom.xml 文件的 <dependencies> 标签下添加那么一些代码:

<!-- Micrometer 整合 Brave 追踪器 -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<!-- Micrometer 指标追踪 -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing</artifactId>
</dependency>
<!-- Micrometer 观察者 -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-observation</artifactId>
</dependency>
<!-- 整合 Openfeign -->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-micrometer</artifactId>
</dependency>

<!-- 将追踪器添加到zipkin -->
<dependency>
    <groupId>io.zipkin.reporter2</groupId>
    <artifactId>zipkin-reporter-brave</artifactId>
</dependency>

添加如图:
在这里插入图片描述

最后需要修改一下所有微服务模块的 bootstrap.yaml 配置文件(在配置中心修改也行),添加上以下配置:

management:
  zipkin:
    tracing:
      # Zipkin 的地址,如果不同注意修改
      endpoint: http://127.0.0.1:9411/api/v2/spans
  tracing:
    sampling:
      # 采集抽样,1.0代表所有的链路都会被跟踪
      probability: 1.0

添加如图:
在这里插入图片描述

然后就可以尝试启动所有模块:
在这里插入图片描述

接下来可以发送一个 GET 请求到 http://localhost:8080/account/accountInfo/1 来看一下 1 号账户的余额。可以看到 1 号账户的余额为 10000.00 :
在这里插入图片描述

然后可以发送一个 POST 请求到 http://localhost:8080/order/orderInfo 来新增一个订单,其请求体为(其中99.99为订单金额):

{
    "orderAmount": "99.99"
}

可以看到操作成功:
在这里插入图片描述

然后再发送一次 http://localhost:8080/account/accountInfo/1 请求,发现余额也修改成功:
在这里插入图片描述

然后来到 Zipkin 的首页,点击运行查询,可以看到有三条链路信息:
在这里插入图片描述

每条链路信息后面有一个 SHOW 按钮,点击这个按钮,可以看到每个微服务的详细链路调用信息,和每个微服务处理花了多长时间:
在这里插入图片描述

可以看到第一次请求这条链路花了 392.954ms,时间比较长,再次请求就会好很多:
在这里插入图片描述

接下来你就可以查看到此条调用链路哪个微服务的哪个业务最慢,可以针对性的调优了。

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

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

相关文章

【Java】Iterator迭代器相关API

Iterator 是 Java 集合框架中用于遍历集合&#xff08;List、Set 等&#xff09;的工具&#xff0c;它提供了访问集合中每个元素的统一接口&#xff0c;避免直接操作集合的实现细节。 Iterator的基本使用和方法 基本方法 hasNext()&#xff1a;检查是否还有元素可供迭代。ne…

Android 系统应用重名install安装失败分析解决

Android 系统应用重名install安装失败分析解决 文章目录 Android 系统应用重名install安装失败分析解决一、前言1、Android Persistent apps 简单介绍 二、系统 persistent 应用直接安装需求分析解决1、系统应用安装报错返回的信息2、分析解决 三、其他1、persistent系统应用in…

java基础概念49-数据结构2

一、树 1-1、树的基本概念 1、树的节点 2、二叉树 3、树的高度 1-2、二叉查找树 普通二叉树没有规律&#xff0c;不方便查找&#xff0c;没什么作用。 1、基本概念 2、添加节点 此时&#xff0c;该方式添加形成的二叉查找树&#xff0c;根节点就是第一个节点。 3、查找节点 4…

数据仓库工具箱—读书笔记01(数据仓库、商业智能及维度建模初步)

数据仓库、商业智能及维度建模初步 记录一下读《数据仓库工具箱》时的思考&#xff0c;摘录一些书中关于维度建模比较重要的思想与大家分享&#x1f923;&#x1f923;&#x1f923; 博主在这里先把这本书"变薄"~有时间的小伙伴可以亲自再读一读&#xff0c;感受一下…

说说你对java lambda表达式的理解?

大家好&#xff0c;我是锋哥。今天分享关于【说说你对java lambda表达式的理解?】面试题。希望对大家有帮助&#xff1b; 说说你对java lambda表达式的理解? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Java Lambda 表达式是 Java 8 引入的一项重要特性&#…

ambari-server页面错位问题解决

背景&#xff1a; 项目新安装的ambari集群页面错位如下 解决办法&#xff08;临时&#xff09;&#xff1a; 修改ambari-server的前端文件&#xff1a;/usr/lib/ambari-server/web/javascripts/app.js 原代码&#xff1a; initNavigationBar: function () {if (App.get(r…

高效数据集成:钉钉与企业系统无缝对接

钉钉数据集成案例分享&#xff1a;鸿巢基础资料-供应商账号(删除操作) 在企业信息化管理中&#xff0c;数据的准确性和及时性至关重要。本文将聚焦于一个具体的系统对接集成案例——钉钉数据集成到钉钉&#xff0c;详细探讨如何通过轻易云数据集成平台实现“鸿巢基础资料-供应…

第六届地博会开幕,世界酒中国菜美食文化节同期启幕推动地标发展

第六届知交会暨地博会开幕&#xff0c;辽黔欧三地馆亮点纷呈&#xff0c;世界酒中国菜助力地理标志产品发展 第六届知交会暨地博会盛大开幕&#xff0c;多地展馆亮点频出&#xff0c;美食文化节同期启幕推动地标产业发展 12月9日&#xff0c;第六届粤港澳大湾区知识产权交易博…

CVMJ 2024 | StyleDiffusion: 基于Prompt嵌入的真实图像反演和文本编辑

论文&#xff1a;《StyleDiffusion: Prompt-Embedding Inversion for Text-Based Editing》 代码&#xff1a;https://github.com/sen-mao/StyleDiffusion​https://github.com/sen-mao/StyleDiffusion​ 问题背景 已有一些工作利用预训练扩散模型进行真实图像的编辑。这些方…

Cisco Packet Tarcer配置计网实验笔记

文章目录 概要整体架构流程网络设备互连基础拓扑图拓扑说明配置步骤 RIP/OSPF混合路由拓扑图拓扑说明配置步骤 BGP协议拓扑图拓扑说明配置步骤 ACL访问控制拓扑图拓扑说明配置步骤 HSRP冗余网关拓扑图拓扑说明配置步骤 小结 概要 一些环境配置笔记 整体架构流程 网络设备互连…

conda学习

参考: Anaconda 官网教程 https://freelearning.anaconda.cloud/get-started-with-anaconda/18202conda配置虚拟环境/conda环境迁移/python环境迁移 https://blog.csdn.net/qq_43369406/article/details/127140839 环境&#xff1a; macOS 15.2Anaconda Navigator 2.4.2 x.1…

C/C++中的宏定义

在C程序中&#xff0c;可以用宏代码提高执行效率。宏代码本身不是函数&#xff0c;但使用起来像函数。预处理器用复制宏代码的方式代替函数调用&#xff0c;省去了参数压栈、生成汇编语言的CALL调用、返回参数、执行return等过程&#xff0c;从而提高了速度&#xff0c;避免函数…

JAVA:访问者模式(Visitor Pattern)的技术指南

1、简述 访问者模式(Visitor Pattern)是一种行为型设计模式,允许你将操作分离到不同的对象中,而无需修改对象本身的结构。这种模式特别适合复杂对象结构中对其元素进行操作的场景。 本文将介绍访问者模式的核心概念、优缺点,并通过详细代码示例展示如何在实际应用中实现…

【安卓开发】【Android Studio】启动时报错“Unable to access Android SDK add-on list”

一、问题描述 在启动Android Studio时&#xff0c;软件报错&#xff1a;Unable to access Android SDK add-on list&#xff0c;报错截图如下&#xff1a; 二、原因及解决方法 初步推测是由于网络节点延迟&#xff0c;无法接入谷歌导致的。点击Cancel取消即可。

安宝特分享 | AR技术助力医院总院与分院间的远程面诊

随着科技的迅猛发展&#xff0c;增强现实&#xff08;AR&#xff09;技术在各行各业的应用愈发广泛&#xff0c;特别是在医疗领域&#xff0c;其潜力和价值正在被不断挖掘。在现代医疗环境中&#xff0c;患者常常面临“看病难、看病远、看病急”等诸多挑战&#xff0c;而安宝特…

Android Studio新版本的一个资源id无法找到的bug解决

Android Studio新版本的一个资源id无法找到的bug解决 文章目录 Android Studio新版本的一个资源id无法找到的bug解决一、前言二、Android Studio的无法获取到资源id的bug1、一段简单的Java代码1、错误现象2、错误解决方法 三、其他1、小结2、gradle.properties文件 其他相关属性…

负载均衡器到底是个啥?

引言 目前在项目中&#xff0c;我们正在使用ELB&#xff08;弹性负载均衡&#xff09;&#xff0c;我希望能够完全理解其内部功能&#xff0c;因此写了这篇文章。 关于本文 这篇文章的最终目标是深刻理解“ELB是什么&#xff1f;”&#xff0c;并达到能够自信解释的程度。 …

远程调试软件对比与使用推荐

远程调试软件对比与使用推荐 远程调试是现代软件开发中不可或缺的一部分&#xff0c;尤其是在处理分布式系统、云端服务或远程服务器上的问题时。以下是对几种常见远程调试工具的详细对比和推荐使用场景。 1. GDB (GNU Debugger) 特点 开源&#xff1a;完全免费且开源&…

【unity】从零开始制作平台跳跃游戏--界面的认识,添加第一个角色!

在上一篇文章中&#xff0c;我们已经完成了unity的环境配置与安装⬇️ 【Unity】环境配置与安装-CSDN博客 接下来&#xff0c;让我们开始新建一个项目吧&#xff01; 新建项目 首先进入unityHub的项目页面&#xff0c;点击“新项目”&#xff1a; 我们这个系列将会以2D平台…

数据结构初阶---二叉树---堆

一、树 1.树的概念 树是一种非线性的数据结构&#xff0c;由n(n≥0)个有限结点组成的一个有层次关系的集合。形状类似一棵倒挂的树&#xff0c;根朝上&#xff0c;分支向下。 根结点没有前驱结点&#xff0c;可以有n(n≥0)个后继结点。 其余结点被分为M个互不相交的集合&am…