《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:9090 → Graph → 输入 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 从入门到精通》------ 云原生时代的操作系统!

相关推荐
lbb 小魔仙6 天前
OpenClaw + cpolar 实战:远程 NAS、分享小游戏、RDP,再配置公网 AI 入口
数据库·人工智能·redis·oracle·prometheus
zhoupenghui1687 天前
Golang pprof 工具详解:监控、压测与调优实战指南
prometheus·pprof
ggaofeng8 天前
prometheus时序数据库
prometheus
DylanlZhao10 天前
我想看看本地 LLM 给我省了多少钱,于是我监控了它
llm·grafana
A心有千千结12 天前
Nginx网关可观测建设:打通流量入口,加速线上故障诊断
nginx·prometheus·devops
天天喝旺仔12 天前
Prometheus + Grafana 监控告警体系搭建实战:从 Exporter 指标采集、PromQL 查询到 Alertmanager 告警落地
容器·kubernetes·grafana·prometheus·时序数据库
川石课堂软件测试16 天前
涨薪技术|Prometheus之HTTP API中使用PromQL
网络协议·测试工具·jmeter·http·单元测试·postman·prometheus
IT界的老黄牛18 天前
Prometheus TSDB 拆不出来、也存不了一年:4 条外部存储出路 + 容量测算
prometheus·时序数据库·监控·thanos·victoriametrics·remote_write
Ningcode_cloud18 天前
Kubernetes 弹性伸缩实验手册:从集群搭建到 HPA / VPA 自动扩缩容
云原生·k8s·prometheus
qq_4523962319 天前
第十二篇:《数据采集:Grafana Alloy、Fluent Bit、Vector 的选型与配置》
java·贪心算法·grafana