Spring Boot Actuator与Admin监控实战
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. 运行与监控演示
- 启动服务端:运行
AdminServerApplication,访问http://localhost:8080

- 启动客户端:运行第一个客户端应用(例如
order-service,端口8081)。稍等片刻(通常几秒钟),刷新 Admin Server 页面,可以看到order-service出现在应用列表中,状态为 UP。 - 启动更多客户端:修改
application.yml中的server.port和spring.application.name(例如改为user-service,端口8082),启动第二个客户端实例。Admin Server 的 UI 将自动更新,列出两个应用。 - 查看详细监控信息:在 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 应用。
实施步骤与价值:
- 统一监控入口:搭建一个 Spring Boot Admin Server 作为统一的监控门户。所有微服务(客户端)通过上述配置自动注册。
- 全局状态一览:运维团队只需登录
http://admin-server:8080,即可在一个仪表板上看到所有四个微服务的实时健康状态(绿色“UP”或红色“DOWN”)。这解决了传统方式需要逐个检查每个服务的痛点。 - 快速故障定位:假设
支付服务状态变为 DOWN。点击进入其详情页,查看/actuator/health详细信息,可能显示db状态为DOWN,原因是数据库连接失败。这极大缩短了故障定位时间。 - 性能指标分析:发现
订单服务的 API 响应变慢。在 Admin UI 中进入该服务的Metrics部分,查看http.server.requests指标,可以分析不同端点的平均耗时、请求频率,找出性能瓶颈。 - 动态运维操作:为了排查
用户服务的一个复杂业务逻辑问题,无需重启服务。直接在 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,我们能够以极低的代码侵入性,构建出一个功能全面、易于使用的分布式系统监控中心,完美契合微服务架构下的运维需求。
更多推荐



所有评论(0)