Java项目接入Prometheus+Grafana监控的核心路径是暴露指标→抓取数据→可视化展示→告警联动;Spring Boot通过Micrometer集成actuator暴露/prometheus端点,Prometheus配置scrape_configs拉取,Grafana对接Prometheus数据源并导入看板或写PromQL查询,再扩展JVM及自定义业务指标,最后通过Alertmanager实现告警闭环。

Java 项目接入 Prometheus + Grafana 监控,核心是“暴露指标 → 抓取数据 → 可视化展示 → 告警联动”。不依赖复杂中间件,Spring Boot 项目只需几处关键配置就能跑起来。
1. 在 Spring Boot 中暴露 Prometheus 指标
Spring Boot 2.x 起默认集成 Micrometer,它是连接 Java 应用与 Prometheus 的桥梁。只需两步:
- 添加依赖(Maven):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency> - 配置 application.yml:
management:
endpoints:
web:
exposure.include: health,info,metrics,prometheus
endpoint:
prometheus:
scrape-interval: 15s
启动后,访问 /actuator/prometheus 就能看到标准的 Prometheus 文本格式指标(如jvm_memory_used_bytes{area="heap",id="PS Eden Space"} 1.2e+08)。
2. 配置 Prometheus 抓取应用指标
Prometheus 是 pull 模式,需主动从你的服务拉取数据。修改 prometheus.yml:
- 在
scrape_configs下新增 job:
- job_name: 'spring-boot-app'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['your-host:8080']
注意:若部署在 Docker 或 Kubernetes 中,target 应填容器内网地址或 Service 名。 - 重启 Prometheus,打开 Targets 页面,确认状态为 UP,说明抓取成功。
3. 用 Grafana 展示指标并构建看板
Grafana 不存储数据,它从 Prometheus 读取并渲染图表:
立即学习“Java免费学习笔记(深入)”;
- 启动 Grafana(Docker 方式最简):
docker run -d --name grafana -p 3000:3000 grafana/grafana-enterprise - 登录 http://localhost:3000(默认 admin/admin),添加 Prometheus 数据源:
URL 填http://host.docker.internal:9090(Mac/Win)或http://宿主机IP:9090(Linux);
保存测试(Save & Test)显示 Success 即可。 - 导入现成看板(推荐):
搜索 ID 4701(JVM Micrometer)或 12856(Spring Boot Actuator),一键导入;
也可手动新建 Panel,输入 PromQL 如:rate(http_server_requests_seconds_count{status=~"5.."}[5m])查 5xx 错误率,jvm_memory_used_bytes{area="heap"} / jvm_memory_max_bytes{area="heap"}算堆内存使用率。
4. 补充 JVM 和业务指标(按需增强)
基础指标够用,但真实场景常需更细粒度:
-
JVM 深度指标:Micrometer 默认已暴露 GC、线程、内存等,无需额外代码;
若需 JMX 特定 MBean(如 Tomcat 连接池),可用micrometer-registry-jmx或独立部署 JMX Exporter 代理。 -
自定义业务指标:比如统计订单创建量:
Counter.builder("order.created.total")
.description("Total orders created")
.register(meterRegistry)
.increment();
后续即可在 Grafana 中用order_created_total查询。 -
告警能力:在 Prometheus 中写规则(
alert.rules),再通过 Alertmanager 推送至钉钉/邮件——这是监控闭环的关键一环,不可跳过。


















