Prometheus Grafana 监控面板
引言
大家好,今天想跟你们聊聊监控这个话题。说实话,之前我们团队在监控这块走了不少弯路,最开始用的一些简单脚本+邮件告警,说白了就是自欺欺人——出问题了自己都看不到。后来引入了 Prometheus + Grafana 这套组合,才算是真正把监控这件事做扎实了。
这篇文章我会从零开始,带你们搭建一套完整的监控面板。不是什么高大上的架构,就是实实在在能用的那种。咱们开始吧。
一、为什么要用 Prometheus + Grafana
先简单说说为什么选这两个工具。Prometheus 负责采集和存储指标数据,Grafana 负责把数据可视化。它们俩配合起来,简直是监控界的"黄金搭档"。
Prometheus 的优势在于:
- 采集方式简单,通过 HTTP 接口就能拉取数据
- 自带强大的查询语言 PromQL
- 生态丰富,几乎所有主流服务都有现成的 Exporter
Grafana 则更加灵活:
- 支持多种数据源,不仅仅是 Prometheus
- 面板类型丰富,曲线图、热力图、仪表盘都能做
- 告警规则配置方便,支持多种通知渠道
我们团队现在基本上所有项目的监控都用这套方案,从服务器资源到业务指标,都能清晰直观地看到。
二、环境准备和基础配置
首先你得有个 Prometheus 服务。Docker 方式最简单,一条命令就搞定:
docker run -d \
--name prometheus \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
配置文件 prometheus.yml 大概长这样:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
这里我配置了两个采集目标:Prometheus 本身和 Node Exporter。Node Exporter 用来采集服务器硬件指标,CPU、内存、磁盘这些。
Grafana 的启动也很简单:
docker run -d \
--name grafana \
-p 3000:3000 \
-v grafana-data:/var/lib/grafana \
grafana/grafana
首次登录默认用户名密码都是 admin,记得改掉。
三、接入第一个监控面板
登录 Grafana 后,先添加数据源。点击左侧齿轮图标 → Data Sources → Add data source,选择 Prometheus,URL 填 http://prometheus:9090(如果是本机就是 http://localhost:9090)。
接下来我们创建一个面板来监控服务器 CPU 使用率。
点击左侧 + 图标 → Dashboard → Add new panel。在 Query 区域输入 PromQL:
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
这行查询的意思是:计算 CPU 的非空闲时间百分比,也就是实际使用率。irate 是 Prometheus 用来计算瞬时增长率的函数,比 rate 更灵敏,适合这种波动较大的指标。
右侧可以设置面板样式。我通常会:
- 把 Title 改成"服务器 CPU 使用率"
- Legend 改成 {{instance}},这样会显示具体的服务器 IP
- 勾选 "Instant" 可以看实时值,不勾选就是曲线图
设置完后点 Apply,一个 CPU 监控面板就完成了。
四、常用监控指标分享
做了这么多项目,我总结了一些最常用的监控指标,分享给大家:
1. 内存使用情况
(node_memory_MemTotalBytes - node_memory_MemAvailableBytes) / node_memory_MemTotalBytes * 100
这个直接显示内存使用百分比,超过 80% 就该注意了。
2. 磁盘空间
(node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100
监控根分区剩余空间,单位是百分比更直观。
3. 网络流量
sum by (instance) (irate(node_network_receive_bytes_total[5m])) / 1024 / 1024
这是接收速率,单位 MB/s。发送速率把 receive 改成 transmit 就行。
4. 请求量和错误率
如果你用的是 Nginx,可以安装 nginx_exporter,然后这样监控:
sum(rate(nginx_http_requests_total[5m]))
错误率:
sum(rate(nginx_http_requests_total{status=~"5.."}[5m])) / sum(rate(nginx_http_requests_total[5m])) * 100
这些指标对于判断服务健康状况特别重要。
五、告警配置不能少
光有面板不行,还得有告警。要不然出了问题没人知道,Grafana 的告警功能就很实用。
在面板编辑页面,点击右侧 Alert → Create Alert。配置大概是这样:
- Evaluate every: 5m(每 5 分钟检查一次)
- For: 10m(持续 10 分钟才触发,避免抖动)
- Conditions: 查询结果 > 80
然后配置通知渠道。点击 Grafana 左侧铃铛图标 → Notification channels → Add channel。支持邮件、钉钉、企业微信、Webhook 等多种方式。
我建议至少配置两个渠道:一个实时通讯(钉钉/企业微信),一个存档(邮件),这样重要告警不会漏掉。
总结
今天聊了这么多,其实核心就几点:Prometheus 负责采集数据,Grafana 负责展示和告警。先把基础的面板搭起来,监控服务器资源;然后逐步接入业务指标,比如请求量、响应时间、错误率等;最后配上告警规则,形成完整的监控体系。
监控这件事,真的越早做越好。等出了问题再想起来装监控,黄花菜都凉了。希望这篇文章能帮到你们,有问题欢迎评论区交流。
Prometheus Grafana 监控面板
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法