别再裸奔搞监控了!一篇带你上手 Prometheus+Grafana 的实战指南
大家好,我是 Echo_Wish。今天我们来聊聊 Prometheus + Grafana ——一个在运维、数据可观测、SRE、边缘监控领域都快成为标配的组合拳。
我写这篇文章的目的很简单,不是跟你背理论,而是——
看完就能上手,搭好监控、出图、报警,全链打通。
而不是只会喊:“Prometheus 是普罗米修斯,来自希腊神话中的火种”。这跟我们监控没半毛钱关系,咱实战才是王道。
🥇 一句话概述:为啥都爱 Prometheus + Grafana?
- Prometheus 负责采集和存储
- Grafana 负责展示和告警
- 二者搭起来最轻、最快、最灵活
- 云原生时代已经成为事实标准
更关键的一点:
Prometheus 是拉模式,一切指标都可量化、可定义,讲究自助式监控。
不再需要黑盒猜系统状态,而是把系统变成“透明仪表盘”。
我第一次用 Prometheus 时,内心只有一句:
“卧槽,监控就应该这么爽!”
🚀 二、快速上手 Prometheus:能跑起来比啥都强
我们别绕圈,直接用最常见的方式启动:
📌 1. 下载 Prometheus
wget https://github.com/prometheus/prometheus/releases/latest/download/prometheus-2.46.0.linux-amd64.tar.gz
tar -zxvf prometheus-2.46.0.linux-amd64.tar.gz
cd prometheus-2.46.0.linux-amd64
启动:
./prometheus --config.file=prometheus.yml
浏览器访问:
http://localhost:9090
看到 UI,就算启动成功。
🛠 三、Prometheus 配置解析——监控第一个目标
Prometheus 要监控什么?靠 prometheus.yml 定义。
最经典的例子 —— 监控 Prometheus 自己:
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 15s
static_configs:
- targets: ['localhost:9090']
解释一下:
scrape_interval抓数据频率job_name名字随便起targets就是指标端点
能抓到什么?比如:
- 采集耗时
- TSDB 内存使用量
- 抓指标失败次数
基本看到这,你已经监控了一个系统了。
🧩 四、让真正的应用暴露指标!Hello Metrics 👋
我们用一个 Go 程序演示暴露业务指标:
package main
import (
"github.com/prometheus/client_golang/prometheus/promhttp"
"net/http"
)
func main() {
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":8080", nil)
}
运行以后,打开:
http://localhost:8080/metrics
你会看到一堆以 _total结尾的玩意,看似乱码,其实就是业务指标基础原语。
如果嫌 Go 不亲民,用 Python 也一样:
from prometheus_client import start_http_server, Counter
c = Counter('requests_total', 'Total requests')
start_http_server(8000)
while True:
c.inc()
打开:
http://localhost:8000
Prometheus 就能拉。
🔍 五、PromQL —— 运维的 SQL
PromQL 就是 Prometheus 的灵魂。比如 CPU 使用率:
rate(process_cpu_seconds_total[5m])
某个服务 QPS:
rate(http_requests_total[1m])
按状态分组:
sum(rate(http_requests_total[1m])) by (status)
这玩意一旦上瘾,你会觉得 SQL 都不香了。
🎨 六、Grafana 出场:监控不仅要准,还要漂亮
Prometheus 有图能力,但一般没人用,因为 Grafana 的仪表盘帅太多。
启动 Grafana:
docker run -d -p 3000:3000 grafana/grafana
访问:
http://localhost:3000
默认登录:
- 用户名:admin
- 密码:admin
然后添加 Prometheus 数据源:
- URL:
http://localhost:9090
Done!
📊 七、Grafana 可视化实战:按业务逻辑出图
比如:
QPS 曲线
sum(rate(http_requests_total[1m])) by (job)
内存
process_resident_memory_bytes
错误率
sum(rate(http_requests_total{status=~"5.."}[5m]))
搞成折线、柱状、饼图随便你。
你甚至能搞这样的大盘:
📌 3 行指标体现系统健康:
- RT(99 分位)
- QPS(1m)
- Error(5m涨幅)
这已经是标准 SRE 大屏套路。
🪖 八、Play with Alert —— 没报警就不是监控
Prometheus 自带 Alertmanager,可以这样定义报警:
groups:
- name: instance_down
rules:
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "实例挂了"
报警逻辑挺有意思:
- expr 是 PromQL
- for 是持续时间
- seveirty 告警等级
- summary 展示内容
Slack、钉钉、企业微信、PagerDuty 全能对接。
报警不是提示你“挂了”,而是告诉你:
“滚去修系统!”
🧲 九、Grafana 也能报警
Grafana 8+ 有自身报警系统,比如:
- 阈值报警
- 速率报警
- 无数据报警
- PromQL 报警
配个邮件渠道,你就能收到一封“惨叫”的邮件:
Latency P99 > 500ms over 10m
这就是“运维的紧箍咒”。
☁️ 十、容器与云原生监控才是 Prometheus 的春天
说句大实话:
99% 使用 Prometheus 的公司,都在 Kubernetes 上。
K8s 暴露了 Metrics,把整个集群变成可观测系统。
你只要这样加:
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs:
- role: node
节奏变成:
- Node 指标
- Pod 指标
- Kubelet 指标
- APIServer 指标
- etcd 指标
全部自动抓。
Grafana 上直接导入:
ID: 315
ID: 6417
你就会看到:
- CPU 饼图
- Pod 崩溃趋势
- 节点资源利用
- 网络延时
你会突然意识到:
过去裸奔太久了。
💡 十一、我的一些感悟:监控永远不是“装工具”,是“打造运营能力”**
很多公司搞监控,流于形式:
- 大屏很好看
- 报警没人响应
- 图写了一堆
- SLA 依旧扑街
原因很简单:
数据要驱动决策,而不是驱动 PPT。
一个健康的监控体系必须:
- 能发现问题
- 能定位问题
- 能趋势预判
- 能指导容量规划
- 能支撑 SLA 评估
否则都是花架子。
🏁 十二、写在最后
Prometheus + Grafana 的魅力在于:
- 开源、免费、标准化
- 插件丰富、生态爆表
- 学习成本极低
- 足够灵活
一句话总结:
监控不是为了看图,是为了把系统变成可度量的科学工程。
从今天开始,别再裸奔运维了。
让数据测量系统,让指标告诉你真相。