Prometheus 监控磁盘 I/O 的核心是通过 Node Exporter 采集 /proc/diskstats 指标,结合 5 个关键指标(读/写吞吐量、IOPS、平均等待时间、队列深度)与设备动态识别、延迟队列健康判断及 Grafana 四象限面板实现闭环追踪。
直接用 Prometheus 监控磁盘读写性能,核心是采集准确的 I/O 指标 + 合理计算关键业务维度。Node Exporter 是标准数据源,它把 /proc/diskstats 映射为可查询的时间序列,再配合 PromQL 聚合与 Grafana 可视化,就能形成闭环追踪。
不是所有暴露的指标都需告警,重点关注以下 5 个基础但高信息密度的指标:
rate(node_disk_read_bytes_total{device=~"sda|nvme0n1"}[5m]) / 1048576(单位 MB/s)rate(node_disk_written_bytes_total{device=~"sda|nvme0n1"}[5m]) / 1048576
rate(node_disk_reads_completed_total{device=~"sda|nvme0n1"}[5m]) + rate(node_disk_writes_completed_total{device=~"sda|nvme0n1"}[5m])
rate(node_disk_io_time_seconds_total{device=~"sda|nvme0n1"}[5m]) / rate(node_disk_io_now{device=~"sda|nvme0n1"}[5m])(单位秒,注意分母为 0 时需加 or vector(0) 防错)node_disk_io_now{device=~"sda|nvme0n1"}(瞬时值,反映实时压力)不能硬写 sda,实际设备名因系统而异。推荐两种方式动态适配:
$disk 变量,数据源设为 label_values(node_disk_io_time_seconds_total, device),面板中用 {device="$disk"} 替换硬编码lsblk -d -o NAME,ROTA,MODEL 区分类型:ROTA=1 是机械盘,ROTA=0 是 SSD/NVMe,便于按介质类型设置不同阈值光看吞吐量容易误判,必须结合延迟和队列行为:
node_disk_io_now 高但 node_disk_io_time_seconds_total 增长缓慢,可能是大量小 I/O 在排队未下发,需查 rrqm/s 和 wrqm/s(合并率)是否异常低一个实用的磁盘 I/O 主面板应包含以下四块内容,横向并列更利于横向对比:
histogram_quantile(0.95, sum(rate(node_disk_io_time_seconds_total{device=~".+"}[5m])) by (le, device)) 计算 P95100 * rate(node_disk_io_time_seconds_total[5m]))+ 平均请求大小((rate(node_disk_read_bytes_total[5m]) + rate(node_disk_written_bytes_total[5m])) / (rate(node_disk_reads_completed_total[5m]) + rate(node_disk_writes_completed_total[5m]) + 1e-6))