一、Spring Boot应用整合Prometheus
Spring Boot Actuator为Spring Boot应用提供了一组强大的监控和管理端点,而Prometheus是一款开源的监控和告警工具。通过将两者结合,可以实时监控应用性能指标,并利用PromQL进行深入分析和可视化。
1.1 添加依赖
首先,在Spring Boot项目的pom.xml文件中添加以下依赖:
xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
spring-boot-starter-actuator:提供应用监控端点
micrometer-registry-prometheus:将Micrometer指标暴露为Prometheus格式
1.2 配置Actuator端点
在application.yml配置文件中添加以下配置:
yaml
spring: application: name: PrometheusApp management: endpoints: web: exposure: include: '*' # 开启所有Actuator端点 tags: application: ${spring.application.name} # 在暴露的数据中添加application标签配置说明:
include: '*':开启所有Actuator端点服务Spring Boot Actuator自带
/actuator/prometheus端点,用于向Prometheus提供监控数据默认情况下该端点关闭,此配置将打开所有Actuator服务
Actuator端点参考:
Spring Boot Actuator提供了丰富的端点,详细列表可参考官方文档:
Spring Boot Actuator Endpoints
1.3 启动并验证应用
启动Spring Boot应用后,访问以下地址查看Prometheus格式的指标数据:
text
http://localhost:8080/actuator/prometheus
该页面显示的应用监控指标包括:
JVM内存使用情况
线程池状态
HTTP请求统计
数据库连接池指标
自定义业务指标等
二、将应用添加到Prometheus监控
2.1 配置Prometheus抓取任务
修改Prometheus配置文件prometheus.yml,添加Spring Boot应用的监控目标:
yaml
scrape_configs: - job_name: 'prometheusapp' # 任务名称 metrics_path: '/actuator/prometheus' # 指标路径 static_configs: - targets: ['192.168.2.234:8080'] # 应用地址
配置参数说明:
job_name:监控任务名称,可自定义metrics_path:指标暴露路径,对应Actuator的Prometheus端点targets:应用实例地址列表,支持多个实例
2.2 重启Prometheus并验证
重启Prometheus服务使配置生效
访问Prometheus UI界面(默认端口9090)
进入Status → Targets页面
查看
prometheusapp任务状态是否为UP
状态说明:
UP:Prometheus成功连接到应用并获取指标
DOWN:连接失败,需检查网络和配置
2.3 查询应用指标
在Prometheus的Graph页面中,可以使用PromQL查询应用指标,例如:
promql
# 查询应用HTTP请求总数 http_server_requests_seconds_count{application="PrometheusApp"} # 查询应用内存使用量 jvm_memory_used_bytes{application="PrometheusApp"} # 查询应用CPU使用率 process_cpu_usage{application="PrometheusApp"}三、使用Grafana Dashboard展示应用数据
3.1 下载Spring Boot监控模板
Grafana官方提供了丰富的Dashboard模板,Spring Boot应用监控推荐使用以下模板:
访问Grafana官方模板库:grafana.com/grafana/dashboards
搜索Spring Boot监控模板
本文使用模板ID:4701(Spring Boot 2.1 Statistics)
3.2 导入Dashboard模板
在Grafana中导入模板的步骤:
登录Grafana,点击左侧菜单Create → Import
在Import via grafana.com输入模板ID:
4701点击Load加载模板
选择Prometheus数据源
点击Import完成导入
3.3 配置与使用
导入成功后,Dashboard将展示以下关键指标:
JVM监控区域
堆内存使用情况(Heap Memory Usage)
非堆内存使用情况(Non-Heap Memory Usage)
垃圾回收统计(Garbage Collection)
线程状态(Thread States)
HTTP请求监控
请求速率(Request Rate)
错误率(Error Rate)
响应时间分布(Response Time Percentiles)
系统资源监控
CPU使用率(CPU Usage)
文件描述符(File Descriptors)
日志事件(Log Events)
数据库监控
连接池状态(Connection Pool)
查询性能(Query Performance)
3.4 多应用筛选
如果监控多个Spring Boot应用,Dashboard顶部提供了Application下拉选择器,可以切换查看不同应用的监控数据。
四、高级配置与优化
4.1 自定义业务指标
除了系统默认指标,还可以在应用中自定义业务指标:
java
import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.MeterRegistry; import org.springframework.stereotype.Component; @Component public class BusinessMetrics { private final Counter orderCounter; public BusinessMetrics(MeterRegistry registry) { orderCounter = Counter.builder("orders.total") .tag("application", "PrometheusApp") .description("Total number of orders") .register(registry); } public void incrementOrder() { orderCounter.increment(); } }4.2 安全配置
生产环境中,建议对Actuator端点进行安全保护:
yaml
management: endpoints: web: exposure: include: health,info,prometheus # 仅暴露必要端点 endpoint: prometheus: enabled: true server: port: 9091 # 使用独立端口
同时配置Spring Security:
java
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/actuator/prometheus").hasRole("MONITOR") .anyRequest().authenticated() .and() .httpBasic(); } }4.3 指标采样与聚合
对于高并发应用,可配置指标采样以减少数据量:
yaml
management: metrics: export: prometheus: step: 30s # 采样间隔 distribution: percentiles-histogram: http.server.requests: true # 启用HTTP请求直方图
五、常见问题排查
5.1 Prometheus无法连接应用
检查网络连通性:确保Prometheus服务器能访问应用IP和端口
验证端点可访问:直接浏览器访问
http://应用IP:端口/actuator/prometheus检查防火墙规则:确保端口未被防火墙阻止
5.2 指标数据不显示
确认依赖正确:检查
micrometer-registry-prometheus版本兼容性验证配置生效:确保
management.endpoints.web.exposure.include包含prometheus查看应用日志:检查是否有相关错误日志
5.3 Grafana面板无数据
检查数据源配置:确认Grafana中Prometheus数据源配置正确
验证查询语句:在Grafana中使用Explore功能测试PromQL查询
检查时间范围:确保查询的时间范围内有数据
总结
通过本文的步骤,您将Spring Boot应用与Prometheus监控系统集成,并利用Grafana实现了数据的可视化展示。这套监控方案提供了:
全面监控:覆盖JVM、HTTP请求、系统资源、业务指标等多个维度
实时告警:基于Prometheus Alertmanager可实现灵活的告警规则
历史分析:长期存储监控数据,便于性能趋势分析和问题排查
多应用管理:支持同时监控多个Spring Boot应用实例
后续优化建议:
根据业务特点自定义监控指标
设置合理的告警阈值和通知渠道
定期审查和优化监控配置
结合日志系统(如ELK)进行全链路监控