跳转到内容

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[编辑 | 编辑源代码]

graph LR A[Spring Boot] -->|暴露指标| B(Prometheus) B -->|提供数据源| C[Grafana] C -->|可视化| D[监控仪表盘]

1. 添加Prometheus依赖:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

2. 配置application.properties

management.endpoints.web.exposure.include=health,metrics,prometheus

监控指标公式[编辑 | 编辑源代码]

关键性能指标计算:

  • 请求错误率 = 错误请求数总请求数×100%
  • 系统负载 = 解析失败 (语法错误): {\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)