Actuator监控
2026/1/15大约 3 分钟SpringSpring BootJava微服务后端
Actuator监控
什么是 Actuator
Spring Boot Actuator 提供了生产级别的监控和管理功能,包括健康检查、指标收集、审计、HTTP 追踪等。
快速开始
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>配置端点
# application.yml
management:
endpoints:
web:
exposure:
include: "*" # 暴露所有端点
base-path: /actuator # 端点基础路径
endpoint:
health:
show-details: always # 显示健康检查详情访问端点
# 健康检查
curl http://localhost:8080/actuator/health
# 所有端点
curl http://localhost:8080/actuator常用端点
| 端点 | 说明 | 默认启用 |
|---|---|---|
/health | 健康检查 | 是 |
/info | 应用信息 | 是 |
/metrics | 指标数据 | 是 |
/env | 环境配置 | 否 |
/beans | 所有 Bean | 否 |
/mappings | 请求映射 | 否 |
/loggers | 日志配置 | 否 |
/threaddump | 线程转储 | 否 |
/heapdump | 堆转储 | 否 |
/shutdown | 关闭应用 | 否 |
健康检查
基本健康检查
curl http://localhost:8080/actuator/health{
"status": "UP",
"components": {
"db": {
"status": "UP",
"details": {
"database": "MySQL",
"validationQuery": "isValid()"
}
},
"diskSpace": {
"status": "UP",
"details": {
"total": 499963174912,
"free": 123456789012,
"threshold": 10485760
}
},
"redis": {
"status": "UP",
"details": {
"version": "6.2.6"
}
}
}
}自定义健康检查
@Component
public class CustomHealthIndicator implements HealthIndicator {
@Override
public Health health() {
// 检查外部服务
boolean serviceUp = checkExternalService();
if (serviceUp) {
return Health.up()
.withDetail("service", "External Service")
.withDetail("status", "Available")
.build();
} else {
return Health.down()
.withDetail("service", "External Service")
.withDetail("error", "Service unavailable")
.build();
}
}
private boolean checkExternalService() {
// 实现检查逻辑
return true;
}
}健康检查分组
management:
endpoint:
health:
group:
liveness:
include: livenessState
readiness:
include: readinessState,db,redis# Kubernetes 探针
curl http://localhost:8080/actuator/health/liveness
curl http://localhost:8080/actuator/health/readiness指标监控
查看指标
# 所有指标
curl http://localhost:8080/actuator/metrics
# 特定指标
curl http://localhost:8080/actuator/metrics/jvm.memory.used
curl http://localhost:8080/actuator/metrics/http.server.requests{
"name": "jvm.memory.used",
"description": "The amount of used memory",
"baseUnit": "bytes",
"measurements": [
{
"statistic": "VALUE",
"value": 268435456
}
],
"availableTags": [
{
"tag": "area",
"values": ["heap", "nonheap"]
}
]
}常用指标
| 指标 | 说明 |
|---|---|
jvm.memory.used | JVM 内存使用 |
jvm.memory.max | JVM 最大内存 |
jvm.gc.pause | GC 暂停时间 |
jvm.threads.live | 活跃线程数 |
http.server.requests | HTTP 请求统计 |
system.cpu.usage | CPU 使用率 |
process.uptime | 进程运行时间 |
自定义指标
@Component
public class OrderMetrics {
private final Counter orderCounter;
private final Timer orderTimer;
public OrderMetrics(MeterRegistry registry) {
this.orderCounter = Counter.builder("orders.created")
.description("Number of orders created")
.tag("type", "online")
.register(registry);
this.orderTimer = Timer.builder("orders.process.time")
.description("Order processing time")
.register(registry);
}
public void recordOrder() {
orderCounter.increment();
}
public void recordProcessTime(Runnable task) {
orderTimer.record(task);
}
}集成 Prometheus
添加依赖
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>配置
management:
endpoints:
web:
exposure:
include: prometheus,health,info,metrics
metrics:
export:
prometheus:
enabled: true
tags:
application: ${spring.application.name}访问 Prometheus 端点
curl http://localhost:8080/actuator/prometheus# HELP jvm_memory_used_bytes The amount of used memory
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{area="heap",id="G1 Eden Space",} 1.048576E7
jvm_memory_used_bytes{area="heap",id="G1 Old Gen",} 2.097152E7
jvm_memory_used_bytes{area="heap",id="G1 Survivor Space",} 1048576.0
# HELP http_server_requests_seconds
# TYPE http_server_requests_seconds summary
http_server_requests_seconds_count{method="GET",status="200",uri="/api/users",} 100.0
http_server_requests_seconds_sum{method="GET",status="200",uri="/api/users",} 5.5端点安全
配置安全访问
@Configuration
@EnableWebSecurity
public class ActuatorSecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/actuator/health").permitAll()
.requestMatchers("/actuator/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.httpBasic(Customizer.withDefaults());
return http.build();
}
}配置用户
spring:
security:
user:
name: admin
password: admin123
roles: ADMIN自定义端点
@Component
@Endpoint(id = "custom")
public class CustomEndpoint {
@ReadOperation
public Map<String, Object> info() {
Map<String, Object> info = new HashMap<>();
info.put("name", "Custom Endpoint");
info.put("version", "1.0.0");
info.put("timestamp", System.currentTimeMillis());
return info;
}
@WriteOperation
public void update(@Selector String name, String value) {
// 更新操作
}
@DeleteOperation
public void delete(@Selector String name) {
// 删除操作
}
}# 访问自定义端点
curl http://localhost:8080/actuator/custom小结
Spring Boot Actuator 提供了丰富的监控和管理功能,包括健康检查、指标监控、环境配置等。结合 Prometheus 和 Grafana 可以构建完整的监控体系。
面试题预览
常见面试题
- Spring Boot Actuator 提供了哪些端点?
- 如何自定义健康检查?
- 如何将 Actuator 指标暴露给 Prometheus?
