Spring Boot Actuator 暴露指标详解
基础配置
Maven依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Gradle依赖:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
配置暴露端点
application.yml配置:
management:
endpoints:
web:
exposure:
# 暴露所有端点
include: "*"
# 排除特定端点
exclude: "env,beans"
# 启用端点(默认除了shutdown都启用)
enabled-by-default: true
# 端点配置
endpoint:
health:
show-details: always # 显示健康详情
info:
enabled: true
metrics:
enabled: true
# 自定义服务信息
info:
app:
name: @project.name@
version: @project.version@
java:
version: ${java.version}
常用端点列表
| 端点ID | 描述 | 默认是否Web暴露 |
|---|---|---|
health |
应用健康信息 | 是 |
info |
应用信息 | 是 |
metrics |
应用指标 | 否 |
env |
环境属性 | 否 |
beans |
Spring Bean列表 | 否 |
mappings |
URL映射 | 否 |
threaddump |
线程转储 | 否 |
heapdump |
堆转储 | 否 |
loggers |
日志级别 | 否 |
shutdown |
关闭应用 | 否 |
scheduledtasks |
定时任务 | 否 |
caches |
缓存信息 | 否 |
安全配置
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.requestMatchers("/actuator/health", "/actuator/info").permitAll()
.requestMatchers("/actuator/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.httpBasic();
return http.build();
}
}
application.yml增加认证配置:
spring:
security:
user:
name: admin
password: ${ACTUATOR_PASSWORD:default}
roles: ADMIN
management:
endpoints:
web:
base-path: /actuator # 自定义基础路径
自定义指标
@Component
public class CustomMetrics {
private final Counter requestCount;
private final Gauge activeUsers;
private final DistributionSummary requestSize;
public CustomMetrics(MeterRegistry registry) {
this.requestCount = Counter.builder("api.requests.total")
.description("Total API requests")
.tag("service", "my-service")
.register(registry);
this.activeUsers = Gauge.builder("app.users.active", this,
CustomMetrics::getActiveUserCount)
.description("Active users")
.register(registry);
this.requestSize = DistributionSummary.builder("api.request.size")
.baseUnit("bytes")
.publishPercentiles(0.5, 0.95, 0.99)
.register(registry);
}
public void incrementRequestCount() {
requestCount.increment();
}
private int getActiveUserCount() {
// 返回当前活跃用户数
return 150;
}
}
端点访问路径
默认基础路径为 /actuator
- 健康检查:
GET /actuator/health - 应用信息:
GET /actuator/info - 所有端点列表:
GET /actuator - 指标数据:
GET /actuator/metrics - 特定指标:
GET /actuator/metrics/jvm.memory.used
自定义健康指标
@Component
public class DatabaseHealthIndicator implements HealthIndicator {
@Override
public Health health() {
boolean databaseUp = checkDatabaseConnection();
if (databaseUp) {
return Health.up()
.withDetail("database", "Oracle")
.withDetail("status", "connected")
.build();
} else {
return Health.down()
.withDetail("database", "Oracle")
.withDetail("error", "Connection failed")
.build();
}
}
private boolean checkDatabaseConnection() {
// 实际的数据库连接检查逻辑
return true;
}
}
禁用特定端点
management:
endpoints:
web:
exposure:
include: health,info,metrics
endpoint:
# 完全禁用端点
beans:
enabled: false
env:
enabled: false
# 或通过web暴露控制
shutdown:
enabled: false # 默认已禁用
审计日志
management:
audit:
events:
enabled: true
endpoint:
auditevents:
enabled: true
cache:
time-to-live: 10s
测试端点
使用curl测试:
# 健康检查 curl http://localhost:8080/actuator/health # 获取指标 curl http://localhost:8080/actuator/metrics # 带认证 curl -u admin:password http://localhost:8080/actuator/env
最佳实践建议
- 生产环境只暴露必要的端点(health, info, metrics)
- 始终添加安全认证,特别是生产环境
- 使用环境变量管理敏感配置(如密码)
- 考虑使用Spring Cloud Config集中管理
- 监控端点访问日志,防止滥用
- 定期检查不必要的端点是否关闭
Actuator提供强大的监控能力,合理配置既能保障安全,又能获取有效的运维数据。