Spring Boot Actuator 项目监测详解:从配置到实战应用
Spring Boot Actuator 是 Spring Boot 提供的项目监测与管理组件,通过暴露一系列端点(Endpoint),帮助开发者实时监控应用的健康状态、配置信息、性能指标等。本文基于 Spring Boot 2.x 版本,从 “依赖配置→核心端点→安全控制→自定义扩展” 四个维度,详细讲解 Actuator 的使用方法,帮你全面掌握项目监测能力。
Actuator 核心价值与基础配置
1. 核心价值
- 实时监控:无需手动开发,通过端点直接获取应用健康状态、配置信息、线程快照等;
- 性能分析:提供 metrics 端点,记录 JVM 内存、GC 次数、请求耗时等关键指标;
- 运维支持:支持动态调整日志级别、刷新配置等操作,简化运维流程;
- 可扩展性:允许自定义健康检查、信息展示等,适配业务监控需求。
2. 基础依赖配置
在 pom.xml
中添加 Actuator 依赖(Spring Boot 2.x 版本):
1 | <dependency> |
注意:
- 若需通过 HTTP 访问端点(最常用方式),需确保已添加
spring-boot-starter-web
依赖; - 依赖引入后,Actuator 会自动生效,默认暴露
/actuator/health
和/actuator/info
两个端点。
端点(Endpoint)详解:分类与核心功能
Actuator 提供的端点按功能可分为监测类、配置类、操作类,Spring Boot 2.x 中默认仅暴露少量端点,需通过配置手动开启其他端点。
1. 端点访问规则
- 默认访问路径:
http://{ip}:{port}/actuator/{endpoint}
(如http://localhost:8080/actuator/health
); - 可自定义根路径:通过
management.endpoints.web.base-path
修改(如改为/monitor
,则访问路径为http://localhost:8080/monitor/health
); - 端点状态:部分端点为 “只读”(如
health
、beans
),部分支持 “写操作”(如loggers
可动态修改日志级别)。
2. 核心端点功能说明
端点名称 | 功能描述 | 常用场景 | 访问方式 |
---|---|---|---|
/health |
应用健康检查状态 | 监控应用存活状态(UP/DOWN) | GET |
/info |
应用自定义信息(如版本、作者) | 展示应用元数据(如部署版本) | GET |
/beans |
列出 Spring 容器中所有 Bean 的信息 | 排查 Bean 注册问题(是否单例、依赖关系) | GET |
/env |
显示应用所有配置环境(系统变量、配置文件) | 检查配置是否生效(如数据库连接参数) | GET |
/metrics |
应用度量指标(JVM、请求、缓存等) | 分析性能瓶颈(如内存占用、请求 QPS) | GET |
/threaddump |
线程快照(状态、堆栈信息) | 排查线程阻塞、死锁问题 | GET |
/heapdump |
JVM 堆内存快照(HProf 格式) | 分析内存泄漏问题 | GET |
/mappings |
所有 URL 映射关系(控制器接口、Servlet) | 检查接口路径是否正确配置 | GET |
/scheduledtasks |
定时任务列表 | 确认定时任务是否注册、执行周期是否正确 | GET |
/loggers |
日志级别配置 | 动态调整日志级别(无需重启应用) | GET/POST |
/refresh |
刷新配置(配合 Spring Cloud Config 使用) | 动态加载最新配置(如数据库连接参数修改) | POST |
3. 端点暴露配置
Spring Boot 2.x 中,端点默认仅暴露 health
和 info
,需通过配置指定暴露的端点:
(1)暴露所有端点(开发环境)
1 | management: |
(2)暴露指定端点(生产环境推荐)
1 | management: |
(3)自定义端点根路径
1 | management: |
关键端点实战:从监控到问题排查
1. /health
端点:健康检查
/health
是最常用的端点,用于监控应用及依赖组件(数据库、Redis 等)的健康状态。
(1)默认输出(简洁模式)
1 | { |
(2)显示详情(需配置)
1 | management: |
配置后输出示例(包含数据库、Redis 等组件的健康状态):
1 | { |
(3)自定义健康检查
若需监控业务组件(如第三方 API 连接状态),可实现 HealthIndicator
接口:
1 | import org.springframework.boot.actuate.health.Health; |
配置后,/health
端点会新增 paymentApi
组件的健康状态:
1 | { |
2. /info
端点:自定义应用信息
/info
端点用于展示应用元数据(如版本、作者、Git 信息等),需通过配置或代码自定义。
(1)配置文件定义信息
1 | # application.yml |
访问 /actuator/info
输出:
1 | { |
(2)代码自定义信息(实现 InfoContributor)
1 | import org.springframework.boot.actuate.info.Info; |
访问 /actuator/info
会新增 stats
节点:
1 | { |
3. /metrics
端点:性能指标监控
/metrics
端点提供应用运行时的关键指标(JVM 内存、GC、请求耗时等),帮助分析性能瓶颈。
(1)查看所有可用指标
访问 /actuator/metrics
会返回指标名称列表:
1 | { |
(2)查看具体指标详情
访问 /actuator/metrics/{指标名称}
(如 /actuator/metrics/jvm.memory.used
):
1 | { |
(3)按标签筛选指标
通过 tag
参数筛选(如查看堆内存使用):
1 | /actuator/metrics/jvm.memory.used?tag=area:heap |
4. /loggers
端点:动态调整日志级别
无需重启应用,通过 /loggers
端点动态修改指定类的日志级别(开发 / 生产环境均实用)。
(1)查看当前日志级别配置
访问 /actuator/loggers/com.example.demo
(指定包路径):
1 | { |
(2)动态修改日志级别(POST 请求)
发送 POST 请求到 /actuator/loggers/com.example.demo
,请求体为:
1 | { |
修改后,该包下的类会输出 DEBUG 级别的日志,便于临时排查问题。
5. /threaddump
与 /heapdump
:问题排查利器
/threaddump
:获取线程快照,包含线程状态、堆栈信息,用于排查线程阻塞、死锁问题;/heapdump
:下载 JVM 堆内存快照(.hprof
文件),可用 MAT 等工具分析内存泄漏。
安全控制:保护敏感端点
Actuator 端点包含大量敏感信息(如 /env
暴露配置、/threaddump
暴露代码堆栈),生产环境必须通过安全框架(如 Spring Security)限制访问。
1. 集成 Spring Security 控制访问
(1)添加依赖
1 | <dependency> |
(2)配置安全规则
1 | import org.springframework.context.annotation.Configuration; |
(3)配置用户与角色
1 | spring: |
配置后,访问 Actuator 端点需输入用户名 / 密码,且仅 admin
可访问。
自定义端点(进阶)
除了内置端点,Actuator 支持自定义端点,用于暴露业务监控指标(如订单量、支付成功率)。
1. 自定义端点示例(Spring Boot 2.x 注解方式)
1 | import org.springframework.boot.actuate.endpoint.annotation.Endpoint; |
2. 暴露自定义端点
1 | management: |
访问 /actuator/order-stats
输出:
1 | { |
生产环境最佳实践
- 最小化暴露端点:仅暴露必要端点(如
health
、info
、metrics
),禁用敏感端点(env
、threaddump
); - 强制安全认证:通过 Spring Security 控制访问,使用 HTTPS 加密传输;
- 限制健康详情可见性:配置
management.endpoint.health.show-details: when_authorized
,仅授权用户查看详情; - 结合监控系统:将 Actuator 与 Prometheus + Grafana 集成,实现指标可视化与告警;
- 定期清理堆快照:
/heapdump
生成的文件较大,避免频繁调用,或配置自动清理。
总结
Spring Boot Actuator 是项目监测的 “瑞士军刀”,通过简单配置即可获取应用健康状态、性能指标、配置信息等关键数据:
- 基础配置:添加
spring-boot-starter-actuator
依赖,配置端点暴露规则; - 核心端点:
health
监控健康、info
展示元数据、metrics
分析性能、loggers
动态调整日志; - 安全控制:集成 Spring Security 保护敏感端点,避免信息泄露;
- 自定义扩展:通过
@Endpoint
实现业务监控端点,满足个性化需求
v1.3.10