微服务指标监控一站式搭建:Prometheus抓取+Grafana大屏展示详解

一、组件分工

  1. Prometheus(普罗米修斯)
    时序数据库,定时拉取(Pull模式)各个服务暴露的监控指标(JVM、接口QPS、耗时、异常数、线程池、Tomcat等),持久化时序数据;自带简单Web查询页面、告警规则引擎。
  2. Grafana
    可视化面板工具,不存数据,对接Prometheus数据源,拖拽生成监控大盘、多维度图表、阈值告警,支持邮件/钉钉/企业微信推送。

核心架构流程

SpringBoot应用暴露Metrics接口 → Prometheus定时抓取指标 → Grafana读取Prometheus数据渲染图表 + 配置告警。

二、Windows单机部署

1、Prometheus部署

  1. 下载地址:官网地址
    Windows 下载 prometheus-x.x.x.windows-amd64.zip,解压路径无中文空格。
  2. 极简配置 prometheus.yml
yaml 复制代码
global:
  scrape_interval: 15s # 每15秒拉一次指标
scrape_configs:
  # 监控Prometheus自身
  - job_name: "prometheus"
    static_configs:
      - targets: ["127.0.0.1:9090"]
  1. 启动
    cmd进入bin目录:
cmd 复制代码
prometheus.exe
  1. 访问后台:http://127.0.0.1:9090

2、Grafana部署

  1. 下载:官网
    Windows zip包解压,进入bin目录执行 grafana-server.exe
  2. 访问地址: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:添加数据源

  1. 左侧「Connections」→「Data sources」→「Add data source」
  2. 选择Prometheus,填写地址:http://127.0.0.1:9090
  3. 点击「Save & test」提示数据源连通成功。

步骤2:一键导入成熟SpringBoot大盘

不用自己拖拽图表

SpringBoot Micrometer通用面板ID:12900

  1. 左侧「Dashboards」→「Import」;
  2. 填入ID 12900 → Load;
  3. 数据源选中刚才配置的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)

  1. 编写告警规则:CPU使用率>80%、接口错误率>5%、实例下线触发告警;
  2. 独立部署AlertManager,配置钉钉/邮箱接收告警通知。

方案2:Grafana内置告警(简单场景首选)

  1. Grafana图表面板编辑 → Alert标签页;
  2. 设置阈值:比如5xx错误连续1分钟大于10次;
  3. 配置通知渠道:钉钉Webhook、企业微信、邮件;
  4. 触发条件满足后自动推送告警消息。

八、高频踩坑

  1. Prometheus Target显示DOWN
    检查SpringBoot服务是否正常运行、防火墙放行端口、actuator地址是否能访问;
  2. Grafana图表无数据
    PromQL时间区间选择是否匹配抓取间隔、指标名称写错、数据源选错;
  3. actuator端点外网不能访问
    检查Spring Security是否拦截/actuator/prometheus路径,开发环境临时放行。
相关推荐
Java成神之路-8 小时前
Spring Cloud 微服务契约先行:为什么 Controller 建议要实现 Feign 接口?
spring·spring cloud·微服务
飘灬渺11 小时前
Grafana中GeoMap实现展示网络线路
grafana
霸道流氓气质15 小时前
微服务架构中多实例消息抢占问题:技术解析与解决方案
微服务·云原生·架构
漫谈数据智理17 小时前
IDS-RAM 如何支撑数据空间走向可
大数据·运维·微服务
DLYSB_19 小时前
Kafka 消费倾斜死锁与 Partition 掉队:我用 Rust 写了个“数据管道物理哨兵”,比 Grafana 报警快了 18 秒
rust·kafka·grafana·报警灯
云烟成雨TD19 小时前
Micrometer 系列【63】统一观测:基于 Spring Boot 的生产级演示案例 | 基于 OTLP 集成 Prometheus + Jaeger
spring boot·云原生·prometheus
zhangjw342 天前
第41篇:微服务入门:架构理念+核心组件,理解微服务本质
微服务·云原生·架构
星期一研究室2 天前
从一条分割线开始,在文档中打造你的内容节奏
微服务·产品·设计
智码看视界2 天前
Day49-AI微服务化-将大模型能力封装为标准微服务
java·微服务·ai·架构·大模型·sse流式输出·ai中台
youngerwang3 天前
【软件系统架构案例分析每日深耕 Day 17】CBAM成本效益分析:微服务改造决策
微服务·系统架构·cbam·案例每日深耕·微服务改造