Spring Boot监控
外观
Spring Boot监控[编辑 | 编辑源代码]
介绍[编辑 | 编辑源代码]
Spring Boot监控是Spring Boot框架提供的一套用于实时监控应用程序运行状态的机制。通过内置的Actuator模块和第三方工具(如Prometheus、Grafana等),开发者可以收集应用的性能指标、健康状况、配置信息等关键数据,帮助诊断问题并优化系统性能。
监控功能主要包括:
- 健康检查:验证数据库连接、磁盘空间等基础设施状态
- 指标收集:跟踪内存使用率、请求响应时间等运行时数据
- 环境信息:查看配置属性、自动配置报告
- 审计日志:记录用户操作事件
核心组件[编辑 | 编辑源代码]
Spring Boot Actuator[编辑 | 编辑源代码]
Actuator是Spring Boot的官方监控模块,通过HTTP端点或JMX暴露监控信息。启用基础配置:
<!-- pom.xml 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
常用监控端点[编辑 | 编辑源代码]
端点 | 描述 | 默认启用 |
---|---|---|
/actuator/health |
应用健康状态 | 是 |
/actuator/metrics |
系统指标(内存、线程等) | 是 |
/actuator/env |
环境变量和配置 | 否 |
/actuator/loggers |
查看/修改日志级别 | 否 |
配置示例[编辑 | 编辑源代码]
基础配置[编辑 | 编辑源代码]
在application.properties
中开放所有端点:
# 开放所有端点
management.endpoints.web.exposure.include=*
# 显示健康详情
management.endpoint.health.show-details=always
自定义健康检查[编辑 | 编辑源代码]
实现自定义健康指标:
@Component
public class CustomHealthIndicator implements HealthIndicator {
@Override
public Health health() {
boolean error = checkSystem(); // 自定义检查逻辑
if (error) {
return Health.down().withDetail("Error Code", 500).build();
}
return Health.up().build();
}
}
访问/actuator/health
将返回:
{
"status": "UP",
"components": {
"custom": {
"status": "UP"
},
"diskSpace": {...}
}
}
高级监控方案[编辑 | 编辑源代码]
Prometheus + Grafana[编辑 | 编辑源代码]
1. 添加Prometheus依赖:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
2. 配置application.properties
:
management.endpoints.web.exposure.include=health,metrics,prometheus
监控指标公式[编辑 | 编辑源代码]
关键性能指标计算:
- 请求错误率 =
- 系统负载 = 解析失败 (语法错误): {\displaystyle \frac{\text{运行队列长度}}{\text{CPU核心数}}}}
实际案例[编辑 | 编辑源代码]
电商平台监控[编辑 | 编辑源代码]
场景:需要监控订单服务的: 1. API响应时间P99值 2. 数据库连接池使用率 3. 支付接口错误率
解决方案:
@RestController
@RequestMapping("/orders")
public class OrderController {
@Timed(value = "order.create",
histogram = true,
percentiles = {0.95, 0.99})
@PostMapping
public Order createOrder() {
// 业务逻辑
}
}
在Grafana中配置告警规则:
alert:
- name: HighErrorRate
expr: rate(http_server_requests_errors_total[1m]) > 0.05
for: 5m
labels:
severity: critical
最佳实践[编辑 | 编辑源代码]
- 生产环境应通过
management.endpoints.web.exposure.include
精确控制暴露的端点 - 敏感端点(如
/env
)应配置安全访问控制 - 使用
@Timed
、@Counted
等注解添加自定义指标 - 定期检查
/actuator/threaddump
分析线程阻塞问题
故障排查[编辑 | 编辑源代码]
现象 | 可能原因 | 解决方案 |
---|---|---|
端点404 | 未正确暴露端点 | 检查management.endpoints.web.exposure.include
|
指标缺失 | 未注册MeterRegistry | 添加@EnableMetrics 注解
|
数据不准 | 采样间隔过长 | 调整Prometheus的scrape_interval
|
扩展阅读[编辑 | 编辑源代码]
- 分布式追踪(Sleuth + Zipkin)
- 日志集中分析(ELK Stack)
- 容器化监控(Kubernetes + Spring Boot)