一、组件分工
- Prometheus(普罗米修斯)
时序数据库,定时拉取(Pull模式)各个服务暴露的监控指标(JVM、接口QPS、耗时、异常数、线程池、Tomcat等),持久化时序数据;自带简单Web查询页面、告警规则引擎。 - Grafana
可视化面板工具,不存数据,对接Prometheus数据源,拖拽生成监控大盘、多维度图表、阈值告警,支持邮件/钉钉/企业微信推送。
核心架构流程
SpringBoot应用暴露Metrics接口 → Prometheus定时抓取指标 → Grafana读取Prometheus数据渲染图表 + 配置告警。
二、Windows单机部署
1、Prometheus部署
- 下载地址:官网地址
Windows 下载prometheus-x.x.x.windows-amd64.zip,解压路径无中文空格。 - 极简配置
prometheus.yml
yaml
global:
scrape_interval: 15s # 每15秒拉一次指标
scrape_configs:
# 监控Prometheus自身
- job_name: "prometheus"
static_configs:
- targets: ["127.0.0.1:9090"]
- 启动
cmd进入bin目录:
cmd
prometheus.exe
- 访问后台:
http://127.0.0.1:9090
2、Grafana部署
- 下载:官网
Windows zip包解压,进入bin目录执行grafana-server.exe。 - 访问地址:
http://127.0.0.1:3000
默认账号密码:admin/admin,首次登录强制修改密码。
三、SpringBoot3 接入Prometheus
1、Maven依赖
xml
<!-- actuator暴露监控端点 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- micrometer prometheus指标导出 -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
2、application.yml 开放端点
yaml
management:
endpoints:
web:
exposure:
include: health,prometheus,info,metrics
metrics:
export:
prometheus:
enabled: true
endpoint:
health:
show-details: always
启动后指标地址:http://127.0.0.1:8080/actuator/prometheus
3、Prometheus追加业务服务抓取配置
修改 prometheus.yml,新增job抓取SpringBoot服务:
yaml
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["127.0.0.1:9090"]
# 新增微服务
- job_name: "order-service"
static_configs:
- targets: ["127.0.0.1:8080"]
metrics_path: "/actuator/prometheus"
重启Prometheus,Targets页面看到实例状态UP即抓取成功。
四、Grafana 对接Prometheus + 导入监控大盘
步骤1:添加数据源
- 左侧「Connections」→「Data sources」→「Add data source」
- 选择Prometheus,填写地址:
http://127.0.0.1:9090 - 点击「Save & test」提示数据源连通成功。
步骤2:一键导入成熟SpringBoot大盘
不用自己拖拽图表
SpringBoot Micrometer通用面板ID:12900
- 左侧「Dashboards」→「Import」;
- 填入ID
12900→ Load; - 数据源选中刚才配置的Prometheus,确认导入。
内置大盘自动展示指标
- JVM:堆内存、非堆内存、GC次数、GC耗时、线程总数、死锁线程;
- Tomcat:连接数、请求排队数、错误请求量;
- HTTP接口:QPS、P95/P99响应耗时、4xx/5xx异常计数;
- 系统CPU、磁盘、内存使用率;
- 自定义业务埋点指标。
五、常用PromQL查询语句
1、接口QPS(每秒请求量)
promql
sum(rate(http_server_requests_seconds_count[1m])) by (uri)
2、接口P99响应耗时
promql
histogram_quantile(0.99, sum(rate(http_server_requests_seconds_bucket[1m])) by (le,uri))
3、5xx错误请求数
promql
sum(rate(http_server_requests_seconds_count{status=~"5.."}[1m])) by (uri)
4、JVM堆内存使用量
promql
jvm_memory_used_bytes{area="heap"}
六、自定义业务埋点指标
统计下单次数
1、注入MeterRegistry
java
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
@Service
public class OrderService {
private final Counter orderCreateCounter;
public OrderService(MeterRegistry registry) {
this.orderCreateCounter = registry.counter("business.order.create");
}
public void createOrder() {
// 业务逻辑
orderCreateCounter.increment(); // 指标+1
}
}
2、PromQL查询下单总次数
promql
sum(rate(business_order_create_total[1m]))
自定义指标会自动出现在Grafana图表中。
七、告警配置
方案1:Prometheus原生告警(AlertManager)
- 编写告警规则:CPU使用率>80%、接口错误率>5%、实例下线触发告警;
- 独立部署AlertManager,配置钉钉/邮箱接收告警通知。
方案2:Grafana内置告警(简单场景首选)
- Grafana图表面板编辑 → Alert标签页;
- 设置阈值:比如5xx错误连续1分钟大于10次;
- 配置通知渠道:钉钉Webhook、企业微信、邮件;
- 触发条件满足后自动推送告警消息。
八、高频踩坑
- Prometheus Target显示DOWN
检查SpringBoot服务是否正常运行、防火墙放行端口、actuator地址是否能访问; - Grafana图表无数据
PromQL时间区间选择是否匹配抓取间隔、指标名称写错、数据源选错; - actuator端点外网不能访问
检查Spring Security是否拦截/actuator/prometheus路径,开发环境临时放行。