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提供强大的监控能力,合理配置既能保障安全,又能获取有效的运维数据。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播