Linux服务器资源自动监控与报警脚本详解

发布于:2025-09-09 ⋅ 阅读:(26) ⋅ 点赞:(0)


前言

在当今的IT运维环境中,Linux服务器作为核心基础设施,其稳定性和性能直接影响业务连续性。随着业务规模扩大,人工监控服务器资源(如CPU、内存、磁盘、网络等)变得低效且不可靠。自动化监控与报警脚本成为运维团队的重要工具,能够实时捕获异常并快速响应,避免潜在的服务中断或性能瓶颈。


一、脚本结构图及编写思路讲解

这是一个模块化的自动化资源监控告警脚本,目的是为了自动化监测服务器的CPU使用率、内存使用率、硬盘使用率、硬盘I/O延迟、实时带宽这些数据是否到达设定阈值,并进行日志记录以及到达阈值时的邮箱报警。具体各模块的作用如下图所示:
在这里插入图片描述
脚本的编写思路为:

  • 从系统底层的数据中获取需要的实时数据
  • 处理获得到的底层数据
  • 比较设定阈值和处理后的数据
  • 将处理后的数据进行日志记录,并根据比较结果判断是否要进行邮件告警

二、各模块功能介绍

2.1 CPU监测并获取数据模块

通过从/proc/stat文件中获取系统启动开始累计的CPU的空闲总时间idle,再将其中的usernicesystemidleiowaitirqsoftirqstealguestguest_nice这些在CPU的各环节使用的总时间相加获得CPU使用总时间。通过在中间加一个短暂的延迟,两次获取到这两个数值并作差,使用以下公式可以得出这段时间内的CPU利用率:

实时CPU利用率 = (当前空闲总时间 - 前一次空闲总时间)/ (当前CPU总时间 - 前一次CPU总时间) x 100%

在这里插入图片描述

2.2 内存、硬盘监测并获取数据模块

内存和硬盘的计算方法基本相同,内存可以通过从/proc/meminfo获取可用内存和完整内存,通过以下公式得出内存利用率:

内存利用率 = (完整内存 - 可用内存)/ 完整内存 x 100%
即:内存利用率 = 已用内存 / 完整内存 x 100%

硬盘则是利用了df命令,df /可以获得挂载在根目录下的硬盘sda的已用硬盘量和完整硬盘量,并用以下公式的出磁盘利用率:

磁盘利用率 = 已用磁盘量 / 完整磁盘量 x 100%

在这里插入图片描述
在这里插入图片描述

2.3 I/O await监测并获取数据模块

硬盘的I/O await这个数据代表了硬盘I/O的延迟当硬盘I/O延迟过大时,会造成业务数据获取与存储的卡顿,影响用户体验。通过iostat可以获得硬盘的I/O await数据,但要注意的是直接使用iostat获取的是累积的数值,所以需要使用iostat -x 1 2并去除显示的累积值来获取实时的I/O await。
在这里插入图片描述

2.4 网络流量监控

在计算网络流量的下载上传数据前必须得知道,宽带带宽使用的单位为Mbps、Kbps计算的是每秒流通的比特数,而日常生活中使用的MB/sKB/s为每秒流通的字节数,中间的转换公式为:

bps = B/s × 8

因此当想要将计算得来的字节每秒转换为比特每秒需要先乘以8,于是当我们从/proc/net/dev中获取到累积的入站流量累积RX1和出站流量累积TX1后,进行INTERVAL时间的等待后,再次获取新的两个累积值RX2、TX2之后,使用以下公式可以的出入站实时流量的数据(以B/s作为单位):

入站流量(B/s)=(RX2-RX1) / INTERVAL
出站流量(B/s)=(TX2-TX1) / INTERVAL

同时因为存在多个单位的原因,MB/sKB/sB/s,可以写一个单位间的转换函数,帮助我们更好地进行单位间的转换,增强可读性。
在这里插入图片描述

2.5 邮件告警模块

实现重复化的判断以及告警功能,如CPU、内存、硬盘、I/O await这几个数据间的判断及判断后的操作基本相同,都是使用获取到的值和设定的阈值进行比较,然后进日志记录和邮件告警,所以这些环节可以编写为一个函数方便进行复用。而网络流量的监控因为要求数据的准确性,进行了多次取值计算平均值以及判断多次取值中到达阈值的判断,因此需要单独配置。

邮件告警可以使用mail实现,echo “邮件告警内容” | mail -s “邮件标题” -r “邮件发送人<邮件发送人地址>” 邮件发送目标地址

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.6 参数配置模块

将脚本中的一些人为设定的参数提取到一个文件方便调整,或将一些脚本中常出现的值、路径等放入此处,减少输入长文本的操作,加快脚本的编写速度。
在这里插入图片描述

三、脚本整合

模块全部编写完成后,将模块导入主程序文件,再整合逻辑进行判断达成最终效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、选择合适的脚本使用方式

根据监控频率的需求进行脚本文件开启方式的选择。

特性 定时任务 (cron) while true 循环(使用sleep进行时间控制)
最小间隔 1分钟 任意秒数
资源占用 高(常驻内存)
可靠性 高(系统管理) 低(需自行监控)
状态保持(变量复用)
适合场景 定期任务 实时监控
日志管理 系统自动 需要自定义

一般只有在秒级监控、实时监控或变量需要复用时才会使用while true

五、虚拟机环境进行脚本验证测试

内存、硬盘使用dd进行测试。

#使用dd往内存中直接放文件去填充内存,接着测试
dd if=/dev/zero of=/dev/shm/fill_memory bs=2M count=1024 status=progress

I/O await可以使用fio命令模拟。
网络出入站流量使用iperf3测试工具,测试机器作为服务器使用iperf3 -s,另一台主机作为客户端使用iperf3 -c <服务器IP> -t <时间>测试入站流量,加上-R测试出站流量。
CPU使用stress -c 4 -t 60s测试。
在这里插入图片描述

总结

别再被复杂的脚本吓倒了!当你掌握了正确的思路,脚本编写就像打游戏一样简单刺激——每个功能都是你要解锁的成就,每行代码都是你击败的怪物!

💪 记住这三大核心秘诀:

1. 化繁为简的魔法
再复杂的脚本都是由一个个小模块组成的!就像搭乐高一样——先造小块,再拼成大作。CPU监控、内存检查、邮件告警…逐个击破,你就是脚本界的建筑师!

2. 实践出真知的真理
看十遍不如写一遍!写废了?恭喜你!每个bug都是你升级的经验值。今天可能还在纠结语法,明天就能写出自动化监控系统——进步就在一次次尝试中爆发!

3. 举一反三的智慧
同一个监控思路,稍作修改就能用在CPU、内存、磁盘上!这就是脚本的威力——掌握一个套路,吊打多个场景。你会突然发现:原来我这么牛逼?!

🔥 现在就开始你的逆袭:

  • 立刻动手写你的第一个监控脚本,哪怕只是打印"Hello World"
  • 今天就部署一个真正的服务器监控,感受自动化带来的成就感
  • 明天就优化,让你的脚本更智能、更强大

别再怀疑自己了! 每个脚本大神都是从"小白"开始的。你写的每一行代码,解决的每一个问题,都在让你离"大神"更近一步!

💻 现在就打开终端,开始你的脚本征服之路吧! 🚀🚀🚀


网站公告

今日签到

点亮在社区的每一天
去签到