Prometheus 监控指标含义解读
Linux 服务器监控与故障排查实战
在日常运维工作中,监控数据的采集只是第一步,真正的价值在于能否读懂这些数字背后的含义。很多工程师面对 Grafana 面板上密密麻麻的曲线时,往往只关注“有没有告警”,却忽略了指标本身在诉说什么。当系统出现性能瓶颈时,准确解读指标含义往往比盲目调整参数更能快速定位问题。
CPU 指标:别被平均值骗了
提到 CPU 使用率,很多人第一时间看的是 node_cpu_usage 这个聚合值。但实际上,Prometheus 暴露的 CPU 指标远比你想象的丰富。node_cpu_seconds_total 按 mode 维度区分了 user、system、iowait、idle 等状态,这里面最有诊断价值的是 iowait。
当 iowait 持续走高而 CPU idle 并不低时,说明进程大部分时间在等待磁盘 IO 完成,这时候单纯升级 CPU 毫无意义,应该去检查存储链路或数据库查询是否产生了大量随机读写。反过来,如果是 system 占比过高,则可能是系统调用过于频繁,需要审视代码中是否存在频繁的上下文切换。
内存指标:缓存不是免费午餐
node_memory_MemAvailable_bytes 是判断内存是否紧张的关键,但很多人会忽略 node_memory_Cached_bytes 和 node_memory_Buffers_bytes。linux 会把空闲内存用于缓存文件内容,这部分在技术上可以回收,所以单纯看 used 百分比意义不大。
真正需要警惕的是 Swap 的使用情况。node_memory_SwapTotal_bytes 和 node_memory_SwapFree_bytes 的差值能直接反映内存是否真正不足。如果 Swap 开始频繁活动,说明物理内存已经捉襟见肘,系统在用磁盘空间弥补内存缺口,这时候应用的响应延迟会明显上升。
磁盘与网络:IO 模型的晴雨表
磁盘监控不要只看使用率,node_disk_io_time_seconds_total 提供的 IO 等待时间更能说明问题。机械硬盘和 SSD 的延迟量级完全不同,同样的 10ms 等待在 SSD 环境下可能意味着队列已经积压,而在机械硬盘上可能是正常水平。
网络指标中,node_network_receive_bytes_total 和 node_network_transmit_bytes_total 统计的是流量绝对值,但配合 node_network_receive_errors_total 一起看才有意义。当错误数与流量成正比增长时,网络链路本身可能存在物理层问题,而不是应用层的负载导致的。
读懂这些指标的本质,就是把抽象的数字翻译成具体的系统状态。监控本身不产生价值,只有被正确解读的监控数据,才能在故障发生时为你指明方向。

参与讨论
iowait这个指标确实容易忽略,之前排查io问题就栽在这上面