强力监控!Spring Boot 3.3 集成 Zipkin 全面追踪 RESTful API 性能

开发 前端
通过本文的演示,我们成功地将 Zipkin 集成到了 Spring Boot 3 项目中,监控 RESTful API 的性能表现。Zipkin 作为一款强大的分布式追踪工具,能够在微服务架构下帮助开发者快速定位系统瓶颈,优化服务性能。

随着微服务架构的流行,应用程序被分解为多个独立的服务组件,系统的复杂度也随之增加。在这种情况下,传统的日志和监控手段很难全面追踪服务之间的调用情况。特别是在排查系统瓶颈或处理性能问题时,缺乏全局的调用链路追踪工具会极大地影响问题定位和解决效率。

Zipkin 作为一款强大的分布式追踪系统,专注于解决微服务架构下的性能监控和故障追踪问题。它通过记录每个服务的调用细节,并将这些数据可视化,使开发者能够清楚地了解服务调用的顺序、耗时和错误原因,从而快速定位性能瓶颈或故障点。

运行效果:

图片图片

若想获取项目完整代码以及其他文章的项目源码,且在代码编写时遇到问题需要咨询交流,欢迎加入下方的知识星球。

本文将深入讲解如何在 Spring Boot 3.3 中集成 Zipkin 来监控 RESTful API 的性能表现。我们将从 Zipkin 的基本概念出发,介绍它的安装与配置,并通过前后端代码示例演示如何实现对 API 调用链路的追踪和性能监控。

Zipkin 介绍

什么是 Zipkin?

Zipkin 是一款分布式追踪系统,最初由 Twitter 开发,专门用于帮助工程师分析和监控微服务架构下服务的通信。它能记录跨越多个服务之间的调用链路,并且详细地展示调用的耗时和路径。Zipkin 的核心功能包括:

  • 追踪请求路径:记录请求在不同服务之间的传递情况。
  • 分析请求耗时:展示每个请求在各个服务节点的耗时,便于找到性能瓶颈。
  • 异常定位:能够快速定位系统中的错误请求,便于开发者快速修复问题。

Zipkin 的工作原理

Zipkin 使用 Span 和 Trace 作为核心概念。每一个 Span 表示一个工作单元,例如一次服务调用或数据库查询。Trace 则是一组相关的 Span,它们表示某个请求从开始到结束的整个链路。Zipkin 会通过 Zipkin Server 收集并存储这些 Span,然后在 Web UI 中可视化展示出来,帮助开发者分析性能数据。

Zipkin 的安装与配置

运行 Zipkin 服务器

Zipkin 可以通过 Docker 运行,也可以直接下载可执行的 .jar 文件来启动。以下是通过 Docker 安装 Zipkin 的步骤:

docker run -d -p 9411:9411 openzipkin/zipkin

该命令会在 9411 端口启动 Zipkin 服务,你可以通过浏览器访问 http://localhost:9411 来查看 Zipkin 的 Web UI。

集成 Zipkin 到 Spring Boot

通过 Spring Cloud Sleuth,可以轻松将 Zipkin 集成到 Spring Boot 应用中。下面的 pom.xml 配置展示了如何添加 Zipkin 相关依赖。

项目依赖配置 (pom.xml)

<?xml versinotallow="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.3.4</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.icoderoad</groupId>
	<artifactId>zipkin-restful</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>zipkin-restful</name>
	<description>Demo project for Spring Boot</description>
	
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		<!-- Spring Boot Starter Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Boot Zipkin -->
         <dependency>
          <groupId>io.micrometer</groupId>
          <artifactId>micrometer-tracing-bridge-brave</artifactId>
        </dependency>
    
        <dependency>
          <groupId>io.zipkin.reporter2</groupId>
          <artifactId>zipkin-reporter-brave</artifactId>
        </dependency>

        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- Thymeleaf -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

应用配置 (application.yml)

Zipkin 的服务地址和采样率等相关配置可以通过 application.yml 文件进行设置。

server:
  port: 8080

spring:
  application:
    name: zipkin-monitoring-demo
  zipkin:
    base-url: http://localhost:9411  # Zipkin 服务器地址
  sleuth:
    sampler:
      probability: 1.0  # 采样率设置为 1.0 表示采集所有请求

logging:
  level:
    org.springframework.web: DEBUG

读取配置类(@ConfigurationProperties 配置)

为了更好地管理配置项,我们可以通过 @ConfigurationProperties 注解结合 Lombok 来简化代码。以下是自定义 Zipkin 配置类:

package com.icoderoad.zipkin.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import lombok.Data;

@Data
@Component
@ConfigurationProperties(prefix = "spring.zipkin")
public class ZipkinProperties {
    private String baseUrl;
    private Double samplerProbability;
}

修改 RESTful API 示例

为了更好地展示 Zipkin 的追踪功能,我们将创建一个返回 JSON 数据的 API,并展示它如何通过 Zipkin 进行监控。

package com.icoderoad.zipkin.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {

    @GetMapping("/api/test")
    public Map<String, String> testApi() {
        // 模拟业务逻辑
        Map<String, String> response = new HashMap<>();
        response.put("message", "API 调用成功!");
        response.put("status", "200 OK");
        return response;
    }
}

前端页面展示 (Thymeleaf + jQuery + Bootstrap)

在前端,我们将使用 jQuery 调用 RESTful API 并展示返回的 JSON 数据。前端使用 Bootstrap 进行页面美化,jQuery 来处理 API 请求。

在 src/main/resources/templates 目录下创建 index.html 文件:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>API 性能监控</title>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</head>
<body>
    <div class="container">
        <h1>Spring Boot 3 Zipkin 监控示例</h1>
        <button id="testApiBtn" class="btn btn-primary">调用 API</button>
        <div id="apiResponse" class="mt-3"></div>
    </div>

    <script>
        $(document).ready(function(){
            $('#testApiBtn').click(function(){
                $.ajax({
                    url: '/api/test',
                    type: 'GET',
                    dataType: 'json',
                    success: function(response) {
                        $('#apiResponse').html('<pre>' + JSON.stringify(response, null, 2) + '</pre>');
                    },
                    error: function() {
                        $('#apiResponse').html('<div class="alert alert-danger">API 调用失败!</div>');
                    }
                });
            });
        });
    </script>
</body>
</html>

效果展示与分析

启动 Spring Boot 应用并调用 /api/test 接口后,Zipkin 会记录 API 调用链路信息。你可以通过访问 http://localhost:9411/zipkin 查看追踪数据。

Zipkin 追踪示例:

  1. 服务调用的耗时:展示每个 API 请求在服务器端和中间件的响应时间。
  2. 调用链路分析:展示微服务架构下的调用顺序,帮助开发者了解请求的具体流向。
  3. 性能瓶颈定位:通过分析每个 Span 的耗时,快速找出系统中性能较差的环节。

Zipkin 提供了直观的 Web UI,可以方便地分析调用链路,定位性能问题。

总结

通过本文的演示,我们成功地将 Zipkin 集成到了 Spring Boot 3 项目中,监控 RESTful API 的性能表现。Zipkin 作为一款强大的分布式追踪工具,能够在微服务架构下帮助开发者快速定位系统瓶颈,优化服务性能。结合 Spring Cloud Sleuth 的使用,Zipkin 可以无缝集成到微服务项目中,实现对全链路调用的追踪。

未来我们可以进一步扩展 Zipkin 的使用场景,例如与 Kafka、RabbitMQ 等消息队列集成,实现更复杂的追踪方案。

通过这些实践,开发者可以更好地管理微服务架构,快速定位并解决系统性能瓶颈,从而提升系统的稳定性和用户体验。

责任编辑:武晓燕 来源: 路条编程
相关推荐

2024-10-30 08:05:01

Spring参数电子签章

2024-10-15 10:38:32

2024-09-05 09:38:55

SpringActuator应用程序

2022-05-25 08:23:32

ZipKinTwitter开源项目

2022-12-05 13:45:06

Actuator监控

2022-05-12 11:38:26

Java日志Slf4j

2024-10-11 11:46:40

2009-10-20 11:03:18

Spring 3.0

2022-05-18 08:32:05

服务监控Prometheus开源

2024-05-31 08:12:19

2022-07-11 09:36:38

SpringJava开发

2020-07-14 11:00:12

Spring BootRedisJava

2018-11-02 15:45:41

Spring BootRedis数据库

2024-10-18 11:32:15

2023-05-11 12:40:00

Spring控制器HTTP

2024-10-07 08:18:05

SpringBOM管理

2024-09-05 09:35:58

CGLIBSpring动态代理

2017-04-25 10:46:57

Spring BootRESRful API权限

2020-12-01 08:32:12

Spring Boot

2018-10-22 15:34:31

Spring Boo监控视化
点赞
收藏

51CTO技术栈公众号