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 负责展示和告警。先把基础的面板搭起来,监控服务器资源;然后逐步接入业务指标,比如请求量、响应时间、错误率等;最后配上告警规则,形成完整的监控体系。

监控这件事,真的越早做越好。等出了问题再想起来装监控,黄花菜都凉了。希望这篇文章能帮到你们,有问题欢迎评论区交流。