当前位置: 首页 > news >正文

[Java实战]Spring Boot整合Prometheus:应用性能监控与可视化(三十二)

[Java实战]Spring Boot整合Prometheus:应用性能监控与可视化(三十二)

引言

在微服务架构中,应用性能监控是保障系统稳定性和优化资源利用率的关键。Prometheus 作为一款开源的监控和告警工具,通过灵活的指标采集与强大的查询语言(PromQL),成为监控领域的首选方案。结合 Spring Boot,开发者可以快速实现应用性能数据的采集与可视化。本文将从原理到实践,详细讲解如何通过 Docker 部署 Prometheus,并整合 Spring Boot 实现应用监控。

一、核心原理
1.1 Prometheus 工作原理
  • 数据采集:Prometheus 基于 Pull 模型,定期从配置的目标(如 Spring Boot 应用)暴露的 HTTP 端点拉取指标数据。
  • 数据存储:采集的指标以时间序列形式存储在本地或远程数据库中。
  • 告警与可视化:通过 Alertmanager 处理告警规则,结合 Grafana 实现数据可视化。
1.2 Spring Boot 监控机制
  • Spring Boot Actuator:提供内置的监控端点(如 /actuator/health/actuator/prometheus),暴露应用的健康状态、JVM 指标等。
  • Micrometer:作为指标采集的桥梁,将应用指标格式化为 Prometheus 兼容的数据格式。
二、环境准备
  • Spring Boot 2.7+(JDK 8/11)
  • Prometheus 2.30+(Docker 部署)
  • Grafana 9.0+(可选,用于可视化)
  • Docker 环境
三、Spring Boot 整合 Prometheus
3.1 添加依赖

pom.xml 中引入 Spring Boot Actuator 和 Micrometer Prometheus 依赖:

<dependencies><!-- Actuator 端点 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- Prometheus 格式支持 --><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId><version>1.9.14</version></dependency>
</dependencies>
3.2 配置 Actuator 端点

application.yml 中暴露 Prometheus 端点并配置应用标签:

management:endpoints:web:exposure:include: "*"  # 暴露所有端点metrics:tags:application: my-springboot-app  # 全局标签
3.3 自定义业务指标

通过 MeterRegistry 注册自定义指标(如订单数量):

@Component
public class OrderMetrics {private final Counter orderCounter;@Autowiredpublic OrderMetrics(MeterRegistry registry) {orderCounter = Counter.builder("orders.total").description("Total number of orders").tag("service", "order").register(registry);}public void incrementOrder() {orderCounter.increment();}
}
四、Docker 部署 Prometheus
4.1 拉取镜像
docker pull docker.1ms.run/prom/prometheus:v2.44.0docker pull prom/node-exporter  # 主机监控组件(可选)
docker pull grafana/grafana     # 可视化工具(可选)
4.2 创建配置文件

创建 prometheus.yml,配置抓取目标和全局参数:

global:scrape_interval: 15sscrape_configs:- job_name: "springboot-app"metrics_path: "/actuator/prometheus"static_configs:- targets: ["192.168.231.1:8080"]  # Spring Boot 应用地址# - job_name: "node-exporter"                   # 主机监控(可选)#  static_configs:#   - targets: ["192.168.231.132:9100"]
4.3 启动 Prometheus 容器
docker run -d \-p 9090:9090 \-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \   #注意实际配置文件地址-v prometheus-data:/prometheus \  #注意实际存储地址--name prometheus \docker.1ms.run/prom/prometheus:v2.44.0#赋予权限
chmod -R 777 /path/to/prometheus-data
chmod 666 /home/kafka/prometheus.yml#整合为一行
docker run -d -p 9090:9090 -v /home/kafka/prometheus.yml:/etc/prometheus/prometheus.yml -v /home/kafka/prometheus-data:/prometheus --name prometheus docker.1ms.run/prom/prometheus:v2.44.0
4.4 启动 Node Exporter(可选)

监控主机资源(CPU、内存等):

docker run -d \-p 9100:9100 \-v "/proc:/host/proc" \-v "/sys:/host/sys" \--net=host \prom/node-exporter
五、测试与验证
5.1 验证 Spring Boot 端点

访问 http://localhost:8080/actuator/prometheus,确认指标数据已生成。

5.2 检查 Prometheus 目标状态

在 Prometheus Web 界面(http://ip:9090/targets)中,确认 springboot-appnode-exporter 的状态为 UP

在这里插入图片描述

5.3 查询指标

使用 PromQL 查询自定义指标(如 orders_total),验证数据采集正常。

六、Grafana 可视化(可选)
6.1 启动 Grafana
docker run -d -p 3000:3000 --name grafana grafana/grafana
6.2 配置数据源
  1. 访问 http://localhost:3000,使用默认账号 admin/admin 登录。
  2. 添加 Prometheus 数据源,URL 设置为 http://prometheus:9090(若在 Docker 同一网络)或 http://host.docker.internal:9090
6.3 导入 Dashboard

导入官方模板(如 JVM Micrometer,ID:4701),实时查看 JVM 堆内存、线程等指标。

七、常见问题与解决
  1. Prometheus 无法连接 Spring Boot 应用

    • 检查网络配置,确保 Docker 容器与应用在同一网络或使用 host.docker.internal 访问宿主机。
    • 验证 management.endpoints.web.exposure.include 配置是否正确。
  2. 自定义指标未显示

    • 确保 MeterRegistry 注册逻辑正确,且应用已调用指标更新方法。
  3. 数据持久化问题

    • 通过 Docker 数据卷挂载(如 -v prometheus-data:/prometheus)避免容器重启后数据丢失。
八、总结

通过 Spring Boot Actuator 和 Prometheus 的整合,开发者可以快速构建应用性能监控体系。结合 Docker 部署,进一步简化了 Prometheus 的运维复杂度。后续可通过 Alertmanager 配置告警规则,或扩展监控目标(如数据库、中间件),实现全方位的系统可观测性。

参考文档

  • Prometheus 官方文档

希望本教程对您有帮助,请点赞❤️收藏⭐关注支持!欢迎在评论区留言交流技术细节!

相关文章:

  • IDEA推送到gitlab,jenkins识别,然后自动发布到需要的主机(流水线)
  • 【iOS】分类、扩展、关联对象
  • AI数字人一体机和智慧屏方案:开启智能交互新纪元
  • 在实际网络部署中,静态路由的优先级通常高于RIP
  • Taro Error: chunk common [mini-css-extract-plugin]
  • Taro 安全区域
  • PCB 横截面几何形状
  • 界面控件 Kendo UI 在各行业的应用实践:如何解决业务痛点,提升系统效能
  • Linux电源管理——PSCI初始化流程和多核启动流程
  • digitalworld.local: VENGEANCE靶场
  • linux国产机安装GCC
  • SpringBoot-SpringBoot源码解读
  • 游戏引擎学习第300天:从排序键更改为排序规则
  • C++初阶-vector的模拟实现3
  • 【Redis】AOF日志的三种写回机制
  • matlab实现混沌扩频DCSK的仿真
  • VsCode开发环境之Node.js离线部署
  • 如何使用AI搭建WordPress网站
  • 创建Workforce
  • 灾备认证助力构建数据资产安全防线‌
  • 南通网站建设找哪家好/企业推广文案范文
  • 免费下载微信/seo人人网
  • 中科互联网站建设专家/网络营销的手段包括
  • 怎么快速建动态网站/网络营销软件下载
  • 哪里学网站建设与管理/运营推广怎么做
  • 长沙搜索排名优化公司/seo营销优化软件