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

相关推荐
学编程的小程10 小时前
服务器日志太分散不好查?我用Promtail+Loki+Grafana把采集、查询和分析串起来了
服务器·python·grafana
川石课堂软件测试12 小时前
JMeter异步接口测试实战
数据库·python·jmeter·mysql·kubernetes·测试用例·prometheus
lbb 小魔仙4 天前
Redis运行状态总靠手动查?我用redis_exporter+Prometheus把指标、告警和远程抓取全接起来了
redis·bootstrap·prometheus
程序员-Benothing4 天前
Linux系统监控工具全家桶:sar、dstat、glances、Prometheus
linux·运维·prometheus
花月C4 天前
Agent可观测性篇:Grafana
postgresql·grafana
wzq11_6664 天前
Prometheus监控——云原生与非云原生监控
云原生·prometheus
东风微鸣5 天前
把 Tailscale 接进 Prometheus 监控
java·数据库·prometheus
Kendra9195 天前
运维监控平台(Prometheus + Grafana)部署与维护
运维·grafana·prometheus
Dovis(誓平步青云)5 天前
一年1956亿行:智能电表场景下的时序数据存储实践
运维·前端·自动化·音视频·prometheus
空空dream6 天前
06 | Prometheus打通FastAPI云原生数据采集
云原生·prometheus·fastapi