当前位置: 首页 > news >正文

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

视频教程: 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/spanstracing: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,时间比较长,再次请求就会好很多:
在这里插入图片描述

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

相关文章:

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

视频教程&#xff1a; https://www.bilibili.com/video/BV12LBFYjEvR 效果演示 当我们发送一个请求给 Gateway 的时候&#xff0c;由 Micrometer trace 进行链路追踪和数据收集&#xff0c;由 Zipkin 进行数据展示。可以清楚的看到微服务的调用过程&#xff0c;以及每个微服务…...

Quartz(2-Trigger)

相关文章链接 定时任务工具类&#xff08;Cron Util&#xff09;SpringBoot TaskQuartz&#xff08;1-Job&#xff09;Quartz&#xff08;2-Trigger&#xff09; Trigger 方法 优先级&#xff08;priority&#xff09; 如果你的 trigger 很多&#xff08;或者 Quartz 线程…...

【微信小程序开发 - 3】:项目组成介绍

文章目录 项目组成介绍项目的基本组成结构小程序页面的组成部分JSON配置文件的作用app.json文件project.config.json文件sitemap.json文件页面的 .json 配置文件新建小程序页面修改项目首页 XWML模板XWML 和 HTML 的区别 WXSS样式WXSS 和 CSS 的区别 .js文件 项目组成介绍 项目…...

Leetcode 三角形最小路径和

算法思想与代码详解 这段代码采用的是**动态规划&#xff08;Dynamic Programming&#xff09;**的思想&#xff0c;用来解决“120. 三角形最小路径和”问题。动态规划通过将问题分解成更小的子问题&#xff0c;并通过保存子问题的解来避免重复计算&#xff0c;从而提高效率。…...

DataOps驱动数据集成创新:Apache DolphinScheduler SeaTunnel on Amazon Web Services

引言 在数字化转型的浪潮中&#xff0c;数据已成为企业最宝贵的资产之一。DataOps作为一种文化、流程和实践的集合&#xff0c;旨在提高数据管道的质量和效率&#xff0c;从而加速数据从源头到消费的过程。白鲸开源科技&#xff0c;作为DataOps领域的领先开源原生公司&#xf…...

Android Studio的笔记--BusyBox相关

BusyBox 相关 BusyBoxandroid上安装busybox和使用示例一、下载二、移动三、安装和设置环境变量四、使用 busybox源码下载和查看 BusyBox BUSYBOX BUSYBOX链接https://busybox.net/ 点击链接后如图 点击左边菜单栏的Get BusyBix中的Download Source 跳转到busybox 的下载源码…...

MySQL 存储过程与函数:增强数据库功能

一、MySQL 存储过程与函数概述 &#xff08;一&#xff09;存储过程的定义与特点 存储过程是一组预编译的 SQL 语句集合&#xff0c;它们被存储在数据库中&#xff0c;可根据需要被重复调用。例如&#xff0c;在一个电商系统中&#xff0c;经常需要查询某个时间段内的订单数据…...

网络安全(3)_安全套接字层SSL

4. 安全套接字层 4.1 安全套接字层&#xff08;SSL&#xff09;和传输层安全&#xff08;TLS&#xff09; &#xff08;1&#xff09;SSL/TLS提供的安全服务 ①SSL服务器鉴别&#xff0c;允许用户证实服务器的身份。支持SSL的客户端通过验证来自服务器的证书&#xff0c;来鉴别…...

Git 快速入门

Git 是什么&#xff1f; Git 是一个分布式版本控制系统四大区域&#xff1a; 工作区&#xff1a;项目文件的当前状态&#xff0c;即本地目录。暂存区&#xff1a;保存将要提交的文件快照&#xff0c;是一个中间层&#xff0c;使用git add将文件添加到暂存区。本地仓库&#xf…...

AI学习记录 - 依据 minimind 项目入门

想学习AI&#xff0c;还是需要从头到尾跑一边流程&#xff0c;最近看到这个项目 minimind, 我也记录下学习到的东西&#xff0c;需要结合项目的readme看。 1、github链接 https://github.com/jingyaogong/minimind?tabreadme-ov-file 2、硬件环境&#xff1a;英伟达4070ti …...

数据结构----链表头插中插尾插

一、链表的基本概念 链表是一种线性数据结构&#xff0c;它由一系列节点组成。每个节点包含两个主要部分&#xff1a; 数据域&#xff1a;用于存储数据元素&#xff0c;可以是任何类型的数据&#xff0c;如整数、字符、结构体等。指针域&#xff1a;用于存储下一个节点&#…...

设计模式-读书笔记

确认好&#xff1a; 模式名称 问题&#xff1a;在何时使用模式&#xff0c;包含设计中存在的问题以及问题存在的原因 解决方案&#xff1a;设计模式的组成部分&#xff0c;以及这些组成部分之间的相互关系&#xff0c;各自的职责和协作方式&#xff0c;用uml类图和核心代码描…...

c语言----选择结构

基本概念 选择结构是C语言中用于根据条件判断来执行不同代码块的结构。它允许程序在不同的条件下执行不同的操作&#xff0c;使程序具有决策能力。 if语句 单分支if语句 语法格式&#xff1a; if (条件表达式) { 执行语句块; } 功能&#xff1a; 当条件表达式的值为真&#…...

KS曲线python实现

目录 实战 实战 # 导入第三方模块 import pandas as pd import numpy as np import matplotlib.pyplot as plt# 自定义绘制ks曲线的函数 def plot_ks(y_test, y_score, positive_flag):# 对y_test重新设置索引y_test.index np.arange(len(y_test))# 构建目标数据集target_dat…...

解决matplotlib中文乱码问题

进入python&#xff0c;查看缓存 import matplotlib as mpl print(mpl.get_cachedir())如果结果为/Users/xxx/.matplotlib 那么就rm -rf /Users/xxx/.matplotlib 然后 mkdir ~/.fonts cd ~/.fonts wget http://129.204.205.246/downloads/SimHei.ttfsudo apt-get install fo…...

实操给桌面机器人加上超拟人音色

前面我们讲了怎么用CSK6大模型开发板做一个桌面机器人充当AI语音助理&#xff0c;近期上线超拟人方案&#xff0c;不仅大模型语音最快可以1秒内回复&#xff0c;还可以让我们的桌面机器人使用超拟人音色、具备声纹识别等能力&#xff0c;本文以csk6大模型开发板为例实操怎么把超…...

git stash 的文件如何找回

在Git中&#xff0c;如果你使用了git stash命令来保存你的工作进度&#xff0c;但之后想要找回这些被stash的文件&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 查看stash列表 首先&#xff0c;使用git stash list命令来查看当前保存的所有stash记录。这个命令会列出…...

皮肤伤口分割数据集labelme格式248张5类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;284 标注数量(json文件个数)&#xff1a;284 标注类别数&#xff1a;5 标注类别名称:["bruises","burns","cu…...

uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!

**提要&#xff1a;**近段时间我们收到多个康复机构用户&#xff0c;咨询AI运动识别插件是否可以应用于肢力运动受限患者的康复锻炼中来&#xff0c;插件是可以应用到AI康复锻炼中的&#xff0c;今天小编就为您介绍一下AI运动识别插件在康腹锻炼中的应用场景。 一、康复机构的应…...

双内核架构 Xenomai 4 安装教程

Xenomai 4是一种双内核架构, 继承了Xenomai系列的特点&#xff0c;通过在Linux内核中嵌入一个辅助核心&#xff08;companion core&#xff09;&#xff0c;来提供实时能力。这个辅助核心专门处理那些需要极低且有界响应时间的任务。 本文将在官网教程(https://evlproject.org/…...

深度解析Beyond Compare 5密钥生成:从逆向工程到高效激活的实用指南

深度解析Beyond Compare 5密钥生成&#xff1a;从逆向工程到高效激活的实用指南 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 在软件授权验证领域&#xff0c;Beyond Compare 5的RSA加密机制一…...

Discord审计数据流解决方案:构建高可靠事件中继与自动化处理

1. 项目概述&#xff1a;一个被低估的审计数据流解决方案 如果你在管理一个中等规模以上的Discord社区&#xff0c;或者正在开发一个需要深度集成Discord生态的机器人&#xff0c;那么你一定遇到过这样的痛点&#xff1a;如何可靠、实时地获取服务器内发生的所有关键事件&…...

MATLAB集成大语言模型:架构设计与工程实践指南

1. 项目概述&#xff1a;当MATLAB遇见大语言模型如果你和我一样&#xff0c;是个长期泡在MATLAB环境里的工程师或研究员&#xff0c;面对这两年大语言模型&#xff08;LLM&#xff09;的狂潮&#xff0c;心里可能既兴奋又有点“隔岸观火”的疏离感。我们习惯了用MATLAB处理矩阵…...

MarkFlowy桌面应用打包与发布:Tauri框架实战经验分享

MarkFlowy桌面应用打包与发布&#xff1a;Tauri框架实战经验分享 【免费下载链接】MarkFlowy The AI Markdown Editor 项目地址: https://gitcode.com/gh_mirrors/ma/MarkFlowy MarkFlowy作为一款高性能智能化跨端Markdown编辑器&#xff0c;采用Tauri框架实现了轻量级桌…...

AI驱动GitHub仓库分析:从数据到洞察的工程实践

1. 项目概述&#xff1a;一个面向开发者的AI驱动GitHub分析工具最近在GitHub上发现一个挺有意思的项目&#xff0c;叫instagit&#xff0c;来自InstalabsAI这个组织。乍一看名字&#xff0c;可能会联想到Instagram或者某种社交工具&#xff0c;但实际上&#xff0c;它是一个完全…...

VSCode性能优化实战:回归轻量编辑器,提升开发效率

1. 项目概述&#xff1a;为什么我们需要一个“经典体验”的VSCode&#xff1f; 如果你是一个从Sublime Text、Notepad或者更早的编辑器时代走过来的开发者&#xff0c;最近打开Visual Studio Code时&#xff0c;可能会感到一丝陌生。没错&#xff0c;VSCode变得越来越强大&…...

从计数器到计时器:使用Spectator构建可观测性系统的实践指南

1. 项目概述&#xff1a;从“观众”到“观察者”的视角转变在软件开发&#xff0c;尤其是后端服务开发中&#xff0c;我们常常需要一种机制来观察和度量系统的内部状态。这种观察不是简单的日志打印&#xff0c;而是系统化、结构化地收集运行时指标&#xff0c;比如接口的调用次…...

Cesium动态扩散圆与圆环效果实现:CallbackProperty与ImageMaterialProperty实战

1. Cesium动态扩散圆与圆环效果概述 动态扩散圆和圆环效果是Cesium中常见的数据可视化手段&#xff0c;广泛应用于地图标注、区域预警等场景。这种效果通过动态改变几何属性和材质纹理&#xff0c;创造出脉冲式的视觉反馈&#xff0c;能够有效吸引用户注意力。 核心实现原理&am…...

对话式AI智能中继与编排框架:构建高可用AI应用的核心架构

1. 项目概述&#xff1a;一个面向对话式AI的智能中继与编排框架最近在折腾一个挺有意思的开源项目&#xff0c;叫ChatAgentRelay。乍一看这个名字&#xff0c;可能觉得它又是一个聊天机器人框架&#xff0c;但深入把玩之后&#xff0c;我发现它的定位其实更精准&#xff0c;也更…...

Arm Development Studio 2025.1:嵌入式开发与多核调试实战

1. Arm Development Studio 2025.1 核心定位解析作为Arm官方推出的旗舰级开发套件&#xff0c;Arm Development Studio 2025.1&#xff08;后简称DS-2025&#xff09;延续了其"芯片级开发瑞士军刀"的产品定位。不同于通用型IDE&#xff0c;这套工具链从底层就为Arm架…...