视频看了几百小时还迷糊?关注我,几分钟让你秒懂!
你是不是也这样?
- 系统突然 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 从入门到精通》------ 云原生时代的操作系统!