springboot监控 之 Actuator详解
Spring Boot Actuator 详解
一、核心功能与定位
Spring Boot Actuator 是 Spring Boot 生态的核心监控模块,专注于生产环境运维需求,提供以下核心能力:
- 健康检查:通过
/actuator/health端点实时反馈应用状态(如数据库、缓存、消息队列的可用性)。 - 指标监控:通过
/actuator/metrics端点暴露 JVM 内存、CPU 使用率、HTTP 请求统计等性能数据。 - 动态管理:支持日志级别调整、线程转储、环境变量查看等操作类功能。
- 安全审计:记录应用启动、关闭、配置变更等事件,辅助故障排查。
技术实现:
Actuator 通过 Micrometer 抽象层统一指标收集,兼容 Prometheus、InfluxDB 等主流监控系统,降低切换成本。其端点支持 HTTP 和 JMX 两种协议,默认以 HTTP 方式暴露。
二、基础配置与端点管理
1. 依赖引入
Maven 项目需在 pom.xml 中添加:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2. 端点暴露配置
在 application.yml 中控制端点可见性:
management:
endpoints:
web:
exposure:
include: health,metrics,info,env # 显式暴露端点
exclude: heapdump,threaddump # 排除敏感端点
base-path: /manage # 自定义基础路径(默认/actuator)
endpoint:
health:
show-details: always # 显示详细健康信息(生产环境慎用)
3. 关键端点说明
| 端点 | 用途 | 安全风险 |
|---|---|---|
/health |
应用健康状态(UP/DOWN) | 低 |
/metrics |
性能指标(CPU、内存、请求数) | 中(可能泄露业务数据) |
/env |
环境变量与配置属性 | 高(可能暴露密码) |
/loggers |
动态调整日志级别 | 中(可被用于日志污染) |
/shutdown |
关闭应用(需显式启用) | 极高(需严格权限控制) |
安全建议:
- 生产环境仅暴露
health和metrics端点。 - 通过 Spring Security 限制端点访问权限,例如:
@Configuration public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/manage/health").permitAll() .antMatchers("/manage/**").hasRole("ADMIN") .anyRequest().authenticated(); } }
三、自定义健康检查与指标
1. 自定义健康检查
实现 HealthIndicator 接口,检查外部服务(如 Redis、数据库)状态:
@Component
public class RedisHealthIndicator implements HealthIndicator {
@Override
public Health getHealth() {
try {
// 模拟Redis连接检查
boolean isConnected = checkRedisConnection();
return isConnected ?
Health.up().withDetail("redis.version", "6.2.6").build() :
Health.down().withDetail("error", "Redis unavailable").build();
} catch (Exception e) {
return Health.down(e).build();
}
}
}
访问 /actuator/health 时,结果将包含 Redis 状态:
{
"status": "UP",
"components": {
"redis": {
"status": "UP",
"details": { "redis.version": "6.2.6" }
},
"db": { "status": "UP" }
}
}
2. 自定义指标
通过 Micrometer 的 MeterRegistry 注册自定义指标:
@Service
public class OrderService {
private final Counter orderCounter;
public OrderService(MeterRegistry registry) {
this.orderCounter = registry.counter("order.total", "type", "create");
}
public void createOrder() {
orderCounter.increment();
// 业务逻辑...
}
}
访问 /actuator/metrics/order.total 可获取订单创建总数。
四、高级集成方案
1. Prometheus + Grafana 可视化
-
添加依赖:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> -
配置 Prometheus 抓取:
management: metrics: export: prometheus: enabled: true -
访问
/actuator/prometheus,输出格式如下:# HELP order_total_total The total number of orders created order_total_total{type="create"} 1024 -
在 Grafana 中导入 Spring Boot 官方仪表盘(ID: 315),实时监控 HTTP 请求耗时、JVM 内存使用等。
2. Spring Boot Admin 集中管理
Spring Boot Admin 是一个可视化监控平台,可聚合多个应用的 Actuator 数据:
-
服务端配置:
@SpringBootApplication @EnableAdminServer public class AdminServerApplication { public static void main(String[] args) { SpringApplication.run(AdminServerApplication.class, args); } } -
客户端注册:
spring: boot: admin: client: url: http://admin-server:8080 username: admin password: password -
效果:
Admin 界面展示应用健康状态、内存使用、线程数等,支持一键查看日志、调整日志级别。
3. ELK 日志分析
-
Logstash 配置(
logstash.conf):input { file { path => "/var/log/spring-app/*.log" start_position => "beginning" } } output { elasticsearch { hosts => ["http://elasticsearch:9200"] index => "spring-app-logs-%{+YYYY.MM.dd}" } } -
Kibana 仪表盘:
- 创建索引模式
spring-app-logs-*。 - 配置可视化图表(如错误率趋势、请求耗时分布)。
- 创建索引模式
五、安全风险与防护
1. 常见漏洞
- 未授权访问:默认配置下,
/actuator/env可能暴露数据库密码等敏感信息。 - Jolokia 漏洞:若启用 Jolokia(JMX over HTTP),攻击者可远程执行系统命令。
2. 防护措施
- 最小化暴露:仅在生产环境暴露必要端点(如
health、metrics)。 - 权限控制:通过 Spring Security 限制端点访问,例如:
http.authorizeRequests() .antMatchers("/actuator/env").hasRole("ADMIN") .antMatchers("/actuator/**").authenticated(); - 禁用危险端点:
management: endpoint: shutdown: enabled: false jolokia: enabled: false
六、工具对比与选型建议
| 工具 | 适用场景 | 优势 | 局限性 |
|---|---|---|---|
| Actuator 原生端点 | 快速健康检查与基础监控 | 开箱即用,无需额外依赖 | 功能有限,缺乏可视化 |
| Prometheus + Grafana | 长期性能监控与告警 | 支持多维查询,社区资源丰富 | 需维护 Prometheus 服务器 |
| Spring Boot Admin | 多应用集中管理 | 统一界面,支持日志查看与动态配置 | 仅适用于 Spring Boot 应用 |
| ELK | 日志分析与安全审计 | 强大的日志搜索与关联分析能力 | 资源消耗大,配置复杂 |
推荐方案:
- 中小型应用:Actuator + Prometheus + Grafana(低成本,快速部署)。
- 大型微服务架构:Spring Boot Admin + ELK(集中管理,深度日志分析)。
- 高安全要求场景:在上述方案基础上,启用 Spring Security 并关闭所有非必要端点。
本文来自博客园,作者:蓝迷梦,转载请注明原文链接:https://www.cnblogs.com/hewei-blogs/articles/19062805

浙公网安备 33010602011771号