Spring Boot Actuator 与 Spring Boot Admin 共同构成了一个强大的生产环境监控解决方案。其中,Actuator 为单个应用提供健康检查、指标收集等端点,而 Spring Boot Admin 则是一个管理 UI,能够集中展示和管理多个注册上来的客户端应用的状态 。以下将详细介绍如何使用 spring-boot-starter-actuator(客户端)和 spring-boot-admin-starter-server(服务端)构建一个多客户端监控系统,并提供具体代码。

1. 架构与依赖配置

架构说明

  • 服务端 (Admin Server):一个独立的 Spring Boot 应用,作为监控中心,提供 Web UI 和 REST API,用于展示所有已注册客户端应用的详细健康状态、指标、日志等信息。
  • 客户端 (Client Applications):需要被监控的业务应用。它们通过 Actuator 暴露监控端点,并通过简单的配置自动向 Admin Server 注册。

依赖配置

  • 服务端 pom.xml
    核心是引入 spring-boot-admin-starter-server 依赖。

    <!-- 服务端:监控中心 -->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
        <version>2.7.10</version> <!-- 请使用与Spring Boot版本兼容的版本 -->
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
  • 客户端 pom.xml
    需要引入 spring-boot-starter-actuator 以提供监控端点,并引入 spring-boot-admin-starter-client 以实现自动注册。

    <!-- 客户端:被监控的应用 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>2.7.10</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

2. 服务端(Admin Server)实现

服务端的配置非常简单,主要是启用 Admin Server 功能。

2.1 主启动类 AdminServerApplication.java
使用 @EnableAdminServer 注解开启监控服务器功能。

package com.example.adminserver;

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableAdminServer // 关键注解,启用 Spring Boot Admin Server
public class AdminServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminServerApplication.class, args);
    }
}

2.2 服务端配置文件 application.yml
可以配置服务器端口、安全认证等。

server:
  port: 8080 # Admin Server 的访问端口

spring:
  application:
    name: admin-server

# 可选:配置安全认证(生产环境建议开启)
# spring.security.user.name=admin
# spring.security.user.password=admin

启动后,访问 http://localhost:8080 即可看到 Spring Boot Admin 的 Web 管理界面,初始时没有已注册的客户端。

3. 客户端(被监控应用)实现

客户端的核心是配置 Actuator 端点暴露和 Admin Server 的注册地址。

3.1 客户端配置文件 application.yml
以下配置是关键,它告诉客户端应用如何找到 Admin Server 并注册自己,同时暴露必要的 Actuator 端点 。

server:
  port: 8081 # 客户端A的端口,可启动多个实例,如8082, 8083
spring:
  application:
    name: order-service # 客户端应用名称,将在Admin UI中显示
  boot:
    admin:
      client:
        url: http://localhost:8080 # Admin Server 的地址
        instance:
          service-host-type: IP # 可选,注册时使用IP而非主机名

management:
  endpoints:
    web:
      exposure:
        include: '*' # 暴露所有端点给Admin Server,生产环境可按需选择,如 health,info,metrics,env
  endpoint:
    health:
      show-details: always # 总是显示详细的健康信息 

配置说明

  • spring.boot.admin.client.url:指向 Admin Server 的地址。
  • management.endpoints.web.exposure.include:控制哪些 Actuator 端点可以被外部访问(这里 Admin Server 需要访问这些端点来获取数据)。设置为 * 表示暴露所有端点,但生产环境建议只暴露必要的,如 health, metrics, info, env, loggers 等 。
  • management.endpoint.health.show-details:设置为 always 后,Admin Server 可以获取到如数据库连接状态、磁盘空间等组件的详细健康信息 。

3.2 客户端启动与注册
无需编写任何注册代码。只要依赖和配置正确,客户端应用在启动时,spring-boot-admin-starter-client 会自动向配置的 Admin Server 发起注册请求。

4. 运行与监控演示

  1. 启动服务端:运行 AdminServerApplication,访问 http://localhost:8080

 

  1. 启动客户端:运行第一个客户端应用(例如 order-service,端口8081)。稍等片刻(通常几秒钟),刷新 Admin Server 页面,可以看到 order-service 出现在应用列表中,状态为 UP
  2. 启动更多客户端:修改 application.yml 中的 server.portspring.application.name(例如改为 user-service,端口8082),启动第二个客户端实例。Admin Server 的 UI 将自动更新,列出两个应用。
  3. 查看详细监控信息:在 Admin UI 的应用列表页,点击任意一个应用名称(如 order-service),将进入该应用的详细监控面板。这里聚合了来自该客户端 Actuator 端点的所有信息,主要包括:
监控维度对应 Actuator 端点在 Admin UI 中的功能与展示
健康状态/actuator/health显示应用整体状态(UP/DOWN)及详情(如磁盘、数据库状态)。
运行指标/actuator/metrics查看 JVM 内存、线程、HTTP 请求计数、响应时间等丰富的指标。
环境配置/actuator/env查看所有的配置属性,包括系统环境变量、application.yml 配置等。
日志管理/actuator/loggers动态调整运行时日志级别(如将 com.example 包的日志从 INFO 改为 DEBUG)。
线程转储/actuator/threaddump查看当前所有线程的快照,用于诊断死锁或高CPU问题。
HTTP 跟踪/actuator/httptrace查看最近的 HTTP 请求-响应跟踪信息。

5. 核心应用场景案例:电商微服务集群监控

场景描述:一个典型的微服务电商系统,包含 订单服务(order-service)商品服务(product-service)用户服务(user-service)支付服务(payment-service)。每个服务都是独立的 Spring Boot 应用。

实施步骤与价值

  1. 统一监控入口:搭建一个 Spring Boot Admin Server 作为统一的监控门户。所有微服务(客户端)通过上述配置自动注册。
  2. 全局状态一览:运维团队只需登录 http://admin-server:8080,即可在一个仪表板上看到所有四个微服务的实时健康状态(绿色“UP”或红色“DOWN”)。这解决了传统方式需要逐个检查每个服务的痛点。
  3. 快速故障定位:假设 支付服务 状态变为 DOWN。点击进入其详情页,查看 /actuator/health 详细信息,可能显示 db 状态为 DOWN,原因是数据库连接失败。这极大缩短了故障定位时间。
  4. 性能指标分析:发现 订单服务 的 API 响应变慢。在 Admin UI 中进入该服务的 Metrics 部分,查看 http.server.requests 指标,可以分析不同端点的平均耗时、请求频率,找出性能瓶颈。
  5. 动态运维操作:为了排查 用户服务 的一个复杂业务逻辑问题,无需重启服务。直接在 Admin UI 的 Loggers 页面,找到对应的业务类,将其日志级别从 INFO 临时调整为 DEBUG,即可在日志中看到更详细的调试信息。

技术实现要点

  • 自动注册与发现:客户端利用 spring-boot-admin-starter-client 实现了对 Admin Server 的自动注册和定期心跳,Admin Server 自动感知客户端的上下线。
  • 数据拉取与展示:Admin Server 后台会定期(或实时)调用每个已注册客户端的 Actuator 端点(如 /actuator/health, /actuator/metrics),将获取到的 JSON 数据解析并在 Web UI 中以友好的图表和表格形式展示出来 。
  • 安全考虑:在生产环境中,务必为 Admin Server 的 Web 界面和 Actuator 端点配置安全认证(如集成 Spring Security),防止未授权访问导致敏感信息(如环境变量、线程堆栈)泄露 。

通过结合 Spring Boot Actuator 提供的标准化监控端点 和 Spring Boot Admin 提供的集中式管理 UI,我们能够以极低的代码侵入性,构建出一个功能全面、易于使用的分布式系统监控中心,完美契合微服务架构下的运维需求。​​​​​​

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐