【监控】Spring Boot 应用监控

发布于:2025-05-31 ⋅ 阅读:(24) ⋅ 点赞:(0)

这段配置是 Spring Boot 应用中对 Actuator 和 Micrometer 监控系统的配置,用于将应用的指标暴露给 Prometheus 进行收集。下面我将详细介绍这种配置方式及其提供的指标。

配置说明

这个配置主要涉及 Spring Boot Actuator 和 Micrometer 两个核心组件:

  1. Actuator 配置
management:
  endpoint:
    env:
      enabled: false  # 禁用 env 端点,防止暴露敏感环境变量
  security:
    enabled: false  # 禁用端点安全验证(生产环境建议启用)
  endpoints:
    web:
      exposure:
        include:
          - prometheus  # 只暴露 prometheus 端点

这部分配置了 Actuator 端点的访问权限和暴露范围,特别启用了 Prometheus 指标端点。

  1. Micrometer 配置
management:
  metrics:
    tags:
      application: XXXX  # 为所有指标添加 application=XXXX 标签
    enable:
      all: true  # 启用所有默认指标收集
    distribution:
      percentiles:
        http.server.requests: 0.25,0.5,0.75,0.9,0.95  # 为 HTTP 请求指标计算指定百分位数

这部分配置了 Micrometer 的指标收集策略,包括标签、启用的指标类型和分布统计参数。

  1. 依赖配置
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

这两个依赖分别引入了 Actuator 和 Prometheus 指标收集器。

提供的核心指标

Spring Boot Actuator 与 Micrometer 结合 Prometheus 会提供以下几类核心指标:

1. JVM 相关指标
jvm_memory_used_bytes                # JVM 各区域(堆、非堆)已使用内存
jvm_memory_max_bytes                 # JVM 各区域最大可用内存
jvm_memory_committed_bytes           # JVM 各区域已提交的内存
jvm_gc_pause_seconds_total           # GC 暂停总时间
jvm_threads_live_threads             # 当前活跃线程数
jvm_classes_loaded_classes           # 已加载的类数量
2. HTTP 请求指标
http_server_requests_seconds_count   # HTTP 请求总数
http_server_requests_seconds_sum     # HTTP 请求总耗时
http_server_requests_seconds_max     # HTTP 请求最大耗时
http_server_requests_seconds         # HTTP 请求耗时分布(通过 percentiles 配置)

可通过 methoduristatus 等标签过滤不同请求路径和状态码的性能。

3. 系统资源指标
system_cpu_usage                     # 系统 CPU 使用率
process_cpu_usage                    # 进程 CPU 使用率
system_load_average_1m               # 系统 1 分钟负载平均值
process_start_time_seconds           # 进程启动时间
4. 数据库连接池指标(如 HikariCP)
hikaricp_connections_active          # 活跃连接数
hikaricp_connections_idle            # 空闲连接数
hikaricp_connections_pending         # 等待获取连接的线程数
hikaricp_connections_creation_seconds # 连接创建耗时
5. 缓存指标(如 Caffeine、Redis)
cache_gets_total                     # 缓存获取次数
cache_hits_total                     # 缓存命中次数
cache_misses_total                   # 缓存未命中次数
cache_puts_total                     # 缓存放入次数
6. 自定义业务指标

通过 MeterRegistry 接口可以在代码中添加自定义指标,例如:

@Autowired
private MeterRegistry meterRegistry;

// 计数器
Counter requestCounter = meterRegistry.counter("http_requests", "endpoint", "/api/users");
requestCounter.increment();

// 计时器
Timer apiTimer = meterRegistry.timer("api_response_time", "service", "user-service");
apiTimer.record(() -> {
    // 执行耗时操作
});

如何使用这些指标

  1. 访问指标端点
    应用启动后,可以通过 http://<host>:<port>/actuator/prometheus 查看 Prometheus 格式的指标数据。
  2. Prometheus 配置
    在 Prometheus 的配置文件中添加抓取任务:
scrape_configs:
  - job_name: 'spring-boot-app'
    static_configs:
      - targets: ['localhost:8080']
    metrics_path: '/actuator/prometheus'
  1. Grafana 可视化
    导入 Spring Boot 官方提供的 Grafana 仪表盘模板(如 ID 12968),快速展示应用性能图表。

性能优化建议

  1. 调整百分位计算
    配置中的 percentiles 会增加计算开销,生产环境建议只保留关键百分位(如 0.95、0.99)。
  2. 禁用不必要的指标
    如果某些指标对监控无帮助,可以通过 management.metrics.enable.<metric-name>=false 禁用。
  3. 添加自定义标签
    为指标添加有业务意义的标签(如 serviceoperation),便于聚合和分析。
  4. 监控告警
    基于关键指标设置告警规则,例如:
    • HTTP 请求 95% 响应时间超过 1 秒
    • JVM 堆内存使用率超过 80%
    • 数据库连接池等待线程数持续大于 5

这种配置方式使 Spring Boot 应用能够无缝集成 Prometheus 监控系统,提供全面的应用性能指标,帮助开发者及时发现和解决问题。


网站公告

今日签到

点亮在社区的每一天
去签到