3. 服务器硬件监控:CPU、内存、磁盘、网络IO的监控指标与告警阈值设置

各位同学,咱们今天聊聊服务器硬件监控。说实话,很多刚入行的运维同学,一上来就盯着应用日志看,觉得硬件监控没啥技术含量。我当年也这么想过,直到有一次线上事故——磁盘写满了,整个ERP系统卡死,业务部门电话打爆了。从那以后,我再也不敢轻视硬件监控了。

硬件监控,说白了就是给服务器做“体检”。CPU、内存、磁盘、网络IO,这四大件任何一个出问题,系统都可能崩。咱们一个一个说。

3.1 CPU监控:别被“空闲率”骗了

CPU监控,很多人只看一个指标——使用率。嗯,这远远不够。

核心指标:

  • CPU使用率(%):用户态+系统态的总和。我个人习惯看平均负载,而不是瞬时值。
  • CPU平均负载(Load Average):1分钟、5分钟、15分钟。这个指标比使用率更靠谱。
  • 上下文切换(Context Switches):每秒切换次数。过高说明系统在“瞎忙活”。
  • CPU等待IO(iowait):这个很关键。CPU在等磁盘或网络,说明瓶颈不在CPU本身。

重点:CPU使用率100%不一定有问题,但iowait高一定有问题。我在项目中遇到过,数据库服务器CPU才30%,但iowait飙到60%,查了半天发现是磁盘阵列的缓存电池坏了。

告警阈值设置:

指标 警告阈值 严重阈值 说明
CPU使用率 > 80% 持续5分钟 > 95% 持续2分钟 排除突发峰值
平均负载 > CPU核心数×0.7 > CPU核心数×1.0 比如4核CPU,负载>2.8告警
iowait > 30% > 50% 这个要重点关注
上下文切换 > 10万次/秒 > 20万次/秒 视CPU型号调整

我的小技巧:top命令看CPU时,按“1”可以看每个核心的使用情况。我曾经发现一个ERP应用,把线程全挤在一个核心上,其他核心闲着。这就是典型的“伪高负载”。

3.2 内存监控:别等OOM才后悔

内存监控,很多人只看“已用内存”。其实Linux的内存管理机制很聪明,它会尽量用空闲内存做缓存。你看到的内存使用率80%,可能有一半是缓存,随时可以释放。

核心指标:

  • 物理内存使用率:排除缓存后的真实使用量。
  • Swap使用率:这个指标很关键。一旦开始用Swap,性能就崩了。
  • 可用内存:free + buff/cache。这才是系统真正能用的。
  • 内存页错误(Page Faults):特别是major page faults,说明内存不够用了。

注意:我曾经遇到一个案例,某ERP系统的内存使用率一直稳定在85%,看起来没问题。但Swap使用率从0%慢慢涨到了5%。我建议他们加内存,没人听。结果一个月后,系统频繁OOM,业务中断了3小时。嗯,从那以后,我把Swap使用率>0%就设为警告阈值。

告警阈值设置:

指标 警告阈值 严重阈值 说明
物理内存使用率 > 85% > 95% 排除缓存
Swap使用率 > 0% > 10% 只要用了Swap就告警
可用内存 < 2GB < 512MB 视业务量调整
Major Page Faults > 100次/秒 > 500次/秒 这个很危险

检查命令:free -h看概览,vmstat 1 5看内存动态变化。我个人习惯用cat /proc/meminfo看详细数据。

3.3 磁盘监控:IO才是命门

磁盘监控,很多人只看“磁盘使用率”。其实对于ERP系统来说,磁盘IO比容量更重要。你想想看,磁盘还有50%空间,但IO打满了,系统照样卡死。

核心指标:

  • 磁盘使用率(%):容量监控,别写满了。
  • 磁盘IOPS:每秒读写次数。机械盘一般100-200 IOPS,SSD可以到几千。
  • 磁盘吞吐量(MB/s):每秒读写数据量。
  • IO等待时间(await):每次IO的平均等待时间。超过20ms就要注意了。
  • IO队列长度(avgqu-sz):等待处理的IO请求数。超过磁盘并发能力就排队了。

关键点:磁盘使用率到80%就要告警,不是因为马上要满,而是因为文件系统碎片整理、日志增长等因素。我曾经遇到过,磁盘使用率85%时,一个日志文件突然暴涨,10分钟就写满了。

告警阈值设置:

指标 警告阈值 严重阈值 说明
磁盘使用率 > 80% > 90% 系统盘要更严格
IO等待时间 > 20ms > 50ms 机械盘标准
IO队列长度 > 2 > 5 单磁盘标准
磁盘IOPS > 80%最大IOPS > 95%最大IOPS 查磁盘规格

排查命令:iostat -x 1看磁盘详情,iotop看哪个进程在读写。我习惯用dstat -d看磁盘IO趋势。

3.4 网络IO监控:别让带宽成为瓶颈

网络IO,ERP系统的命脉。特别是分布式部署的ERP,应用服务器和数据库服务器之间、ERP和各分支机构的网络,任何一个环节出问题,业务就断了。

核心指标:

  • 带宽使用率(%):当前流量/最大带宽。
  • 网络延迟(ms):ping的响应时间。超过100ms就要注意。
  • 丢包率(%):超过1%就严重了。
  • TCP连接数:特别是TIME_WAIT状态的连接数。
  • 网络错误包:CRC错误、冲突包等。

避坑指南:我曾经遇到一个ERP系统,白天网络正常,每天晚上10点准时卡顿。查了三天,发现是备份脚本把网络带宽占满了。嗯,从那以后,我把带宽使用率>70%设为告警,并且给备份任务做了带宽限制。

告警阈值设置:

指标 警告阈值 严重阈值 说明
带宽使用率 > 70% > 90% 持续5分钟
网络延迟 > 50ms > 100ms 内网标准
丢包率 > 0.5% > 1% 超过1%业务会受影响
TCP TIME_WAIT > 1万 > 5万 需要优化连接池

监控命令:sar -n DEV 1看网络流量,netstat -s看网络统计。我习惯用nload实时看带宽占用。

3.5 综合监控策略:别让告警变成噪音

指标和阈值都设好了,但还有一个问题——告警风暴。你想想看,CPU使用率超过80%就告警,但ERP系统每天早高峰都会超过80%,那这个告警就变成噪音了。

我的建议:

  • 设置持续时长:比如CPU使用率>80%持续5分钟才告警,排除瞬时峰值。
  • 分级告警:警告级别发邮件,严重级别发短信/打电话。
  • 关联分析:CPU高+IO高,可能是磁盘问题;CPU高+内存高,可能是应用问题。
  • 业务时段:白天和晚上的阈值可以不同。比如晚上CPU>50%就告警,因为晚上应该空闲。

总结一下:硬件监控不是设几个阈值就完事了。你要理解每个指标背后的含义,知道什么情况是正常的,什么情况是异常。我在项目中见过太多“告警疲劳”的团队,最后真的出问题时,告警反而被忽略了。

好了,这一章就到这里。下一章咱们聊聊操作系统层面的监控,包括进程、文件句柄、系统日志这些。记住,硬件是基础,基础不牢,地动山摇。