《Prometheus + Grafana 监控体系实战》—— 从指标采集到智能告警!

视频看了几百小时还迷糊?关注我,几分钟让你秒懂!

你是不是也这样?

  • 系统突然 CPU 100%,却不知道是哪个服务、哪个接口引起的
  • 用户反馈"页面打不开",但 Nginx、应用、数据库都"活着",问题在哪?
  • 想做容量规划,但 连 QPS、内存、GC 都没统计过

别再靠"重启大法"和"人肉盯屏"了!
Prometheus + Grafana ------ 云原生监控事实标准,帮你实现:

自动发现服务 :K8s / Spring Boot / MySQL 自动接入

多维指标分析 :QPS、延迟、错误率、JVM、磁盘 IO 全覆盖

灵活告警 :CPU > 90% 持续 5 分钟 → 自动钉钉/邮件通知

可视化大屏:一张图看透全系统健康状态!

本文将带你 从零搭建 + Spring Boot 集成 + 告警配置 + 生产调优,彻底掌握云原生监控体系!


一、为什么选 Prometheus?

🆚 对比传统监控(Zabbix / Nagios)

能力 Zabbix Prometheus
数据模型 主机为中心 指标(Metric)为中心
采集方式 Agent 主动上报 Pull(拉取)模型
查询语言 固定图表 PromQL(强大函数 + 多维过滤)
云原生支持 K8s 官方推荐
扩展性 插件复杂 Exporter 生态丰富

💡 核心优势
以"时间序列"为核心,天然适合微服务 + 容器化场景!


二、Prometheus 核心架构

四大核心组件:

组件 作用
Prometheus Server 抓取、存储、查询指标
Exporters 将第三方系统(MySQL、Redis)暴露为 Prometheus 格式
Grafana 可视化仪表盘
Alertmanager 告警路由、去重、通知

关键理念一切皆指标(Everything is a Metric)


三、实战第一步:单机快速体验

🔧 1. 启动 Prometheus(Docker)

prometheus.yml

复制代码
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets: ['host.docker.internal:9100']  # Node Exporter

docker run -d \
  --name=prometheus \
  -p 9090:9090 \
  -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus

🔧 2. 启动 Node Exporter(监控主机)

复制代码
docker run -d \
  --name=node-exporter \
  -p 9100:9100 \
  quay.io/prometheus/node-exporter

🔧 3. 访问 Prometheus UI

  • http://localhost:9090Graph → 输入 node_cpu_seconds_total → Execute
    ✅ 看到 CPU 使用率曲线!

四、实战第二步:Spring Boot 应用集成

🔧 1. 添加依赖(Micrometer)

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

🔧 2. 开启 Prometheus 端点(application.yml)

复制代码
management:
  endpoints:
    web:
      exposure:
        include: health,info,prometheus  # ← 关键!
  metrics:
    tags:
      application: ${spring.application.name}

🔧 3. 验证指标暴露

访问 http://localhost:8080/actuator/prometheus,看到:

复制代码
# HELP jvm_memory_used_bytes The amount of used memory
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{application="order-service",area="heap",id="PS Eden Space",} 1.234E8
...
http_server_requests_seconds_count{application="order-service",method="POST",uri="/order",status="200",} 42.0

自动暴露:JVM、HTTP 请求、Tomcat、Logback 等指标!


五、实战第三步:Grafana 可视化大屏

🔧 1. 启动 Grafana

复制代码
docker run -d \
  --name=grafana \
  -p 3000:3000 \
  grafana/grafana

🔧 2. 配置数据源

  • 访问 http://localhost:3000(admin/admin)
  • Configuration → Data Sources → Add Prometheus
  • URL: http://host.docker.internal:9090

🔧 3. 导入现成 Dashboard

  • JVM 监控 :ID 4701(Micrometer JVM)
  • Spring Boot :ID 6783
  • Node Exporter :ID 1860

✅ 效果:一键生成专业级监控大屏


六、实战第四步:智能告警(Alertmanager)

🔧 1. 配置 Alertmanager(alertmanager.yml)

复制代码
route:
  receiver: 'dingtalk'

receivers:
  - name: 'dingtalk'
    webhook_configs:
      - url: 'http://your-dingtalk-robot-url'  # 钉钉机器人

🔧 2. 在 Prometheus 中定义告警规则(prometheus.yml)

复制代码
rule_files:
  - "alert_rules.yml"

alert_rules.yml

复制代码
groups:
- name: example
  rules:
  - alert: HighCpuUsage
    expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High CPU usage on {{ $labels.instance }}"
      description: "CPU usage is above 90% for 5 minutes"

  - alert: ServiceDown
    expr: up{job="order-service"} == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "Order service is down"

🔧 3. 重启 Prometheus + Alertmanager

复制代码
docker run -d --name=alertmanager -p 9093:9093 \
  -v $(pwd)/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
  prom/alertmanager

✅ 效果:服务宕机 or CPU 飙升 → 钉钉收到告警!


七、生产环境避坑指南

❌ 坑1:指标爆炸(Cardinality Explosion)

  • 现象:ES 被撑爆,Prometheus OOM
  • 原因 :标签值过多(如 user_id="12345" 作为标签)
  • 解决方案
    • 禁止高基数字段作标签
    • 使用 @Timed(extraTags = {"uri", "/api/order"}) 固定 URI。

❌ 坑2:Pull 模型在 NAT 环境失效

  • 现象:Prometheus 访问不到内网服务
  • 解决方案
    • 改用 Pushgateway(短期任务);
    • 或通过 ServiceMonitor(K8s Operator)

❌ 坑3:告警风暴

  • 现象:一个故障触发 100 条告警
  • 解决方案
    • Alertmanager 分组

      复制代码
      route:
        group_by: ['alertname', 'cluster']
        group_wait: 30s
        group_interval: 5m

❌ 坑4:存储空间不足

  • 默认只保留 15 天数据
  • 长期存储方案
    • Thanos(支持 S3)
    • Cortex
    • VictoriaMetrics

八、高级技巧:自定义业务指标

🔧 场景:监控订单创建成功率

复制代码
@Service
public class OrderService {

    private final Counter orderCounter;

    public OrderService(MeterRegistry meterRegistry) {
        this.orderCounter = Counter.builder("order_created_total")
            .description("Total orders created")
            .tags("status", "success")  // 或 "failed"
            .register(meterRegistry);
    }

    public void createOrder() {
        try {
            // ... 创建订单
            orderCounter.increment();
        } catch (Exception e) {
            Counter.builder("order_created_total")
                .tags("status", "failed")
                .register(meterRegistry)
                .increment();
            throw e;
        }
    }
}

✅ 在 Grafana 中查询:

复制代码
rate(order_created_total{status="failed"}[5m]) 
/ 
rate(order_created_total[5m])

→ 实时失败率!


九、总结:监控体系学习路线图

复制代码
Prometheus 单机部署 → Spring Boot 集成  
↓  
Node Exporter 监控主机 → MySQL/Redis Exporter  
↓  
Grafana 导入 Dashboard → 自定义业务指标  
↓  
Alertmanager 告警 → 钉钉/企业微信通知  
↓  
Thanos 长期存储 → K8s 服务发现

💡 记住
没有监控的系统 = 盲人开车

用好 Prometheus + Grafana,你就能 提前发现问题,而不是等用户投诉


视频看了几百小时还迷糊?关注我,几分钟让你秒懂!

👉 下期预告:《Kubernetes 从入门到精通》------ 云原生时代的操作系统!

相关推荐
soft20015256 小时前
Rocky Linux 9.6 环境下,Prometheus + Grafana 生产级安装手册
linux·grafana·prometheus
广目软件7 小时前
GM DC Monitor一体化监控预警平台部署手册2025-12-10
运维·自动化·ansible·zabbix·运维开发·prometheus
Live in Shanxi.7 小时前
Prometheus监控服务器及K8s集群资源
服务器·kubernetes·prometheus
联系QQ19226381 天前
COMSOL文献复现:手性结构通用模型的透射反射率计算
prometheus
星哥说事1 天前
Prometheus:监控系统的部署与指标收集
prometheus
有想法的py工程师2 天前
PostgreSQL × Debezium × Kafka CDC(Change Data Capture)监控体系
postgresql·kafka·zabbix·grafana·prometheus
凤凰战士芭比Q3 天前
(四)zabbix利用Grafana进行图形展示
zabbix·grafana
不会kao代码的小王3 天前
openEuler上部署Prometheus+Grafana监控系统:让服务状态一目了然
grafana·prometheus
沟通qq 19226383 天前
实现LabVIEW与西门子PLC的网口通讯,支持200、300、1200、1500、400、S...
prometheus