微服务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.gzhttps://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,时间比较长,再次请求就会好很多:
在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值