【监控】Spring Boot 应用监控
这段配置是 Spring Boot 应用中对 Actuator 和 Micrometer 监控系统的配置,用于将应用的指标暴露给 Prometheus 进行收集。下面我将详细介绍这种配置方式及其提供的指标。
配置说明
这个配置主要涉及 Spring Boot Actuator 和 Micrometer 两个核心组件:
- Actuator 配置:
management:endpoint:env:enabled: false # 禁用 env 端点,防止暴露敏感环境变量security:enabled: false # 禁用端点安全验证(生产环境建议启用)endpoints:web:exposure:include:- prometheus # 只暴露 prometheus 端点
这部分配置了 Actuator 端点的访问权限和暴露范围,特别启用了 Prometheus 指标端点。
- 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 的指标收集策略,包括标签、启用的指标类型和分布统计参数。
- 依赖配置:
<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 配置)
可通过 method
、uri
、status
等标签过滤不同请求路径和状态码的性能。
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(() -> {// 执行耗时操作
});
如何使用这些指标
- 访问指标端点:
应用启动后,可以通过http://<host>:<port>/actuator/prometheus
查看 Prometheus 格式的指标数据。 - Prometheus 配置:
在 Prometheus 的配置文件中添加抓取任务:
scrape_configs:- job_name: 'spring-boot-app'static_configs:- targets: ['localhost:8080']metrics_path: '/actuator/prometheus'
- Grafana 可视化:
导入 Spring Boot 官方提供的 Grafana 仪表盘模板(如 ID 12968),快速展示应用性能图表。
性能优化建议
- 调整百分位计算:
配置中的percentiles
会增加计算开销,生产环境建议只保留关键百分位(如 0.95、0.99)。 - 禁用不必要的指标:
如果某些指标对监控无帮助,可以通过management.metrics.enable.<metric-name>=false
禁用。 - 添加自定义标签:
为指标添加有业务意义的标签(如service
、operation
),便于聚合和分析。 - 监控告警:
基于关键指标设置告警规则,例如:- HTTP 请求 95% 响应时间超过 1 秒
- JVM 堆内存使用率超过 80%
- 数据库连接池等待线程数持续大于 5
这种配置方式使 Spring Boot 应用能够无缝集成 Prometheus 监控系统,提供全面的应用性能指标,帮助开发者及时发现和解决问题。