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

文章目录


前言

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


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

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

脚本的编写思路为:

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

二、各模块功能介绍

2.1 CPU监测并获取数据模块

通过从/proc/stat文件中获取系统启动开始累计的CPU的空闲总时间 idle,再将其中的user、nice、system、idle、iowait、irq、softirq、steal、guest、guest_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/s、KB/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/s、KB/s、B/s,可以写一个单位间的转换函数,帮助我们更好地进行单位间的转换,增强可读性。

2.5 邮件告警模块

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

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


2.6 参数配置模块

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

三、脚本整合

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



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

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

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

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

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

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

bash 复制代码
#使用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"
  • 今天就部署一个真正的服务器监控,感受自动化带来的成就感
  • 明天就优化,让你的脚本更智能、更强大

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

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

相关推荐
牢姐与蒯2 分钟前
一点小碎片——每个线程独有的东西——上下文+栈
linux·运维·服务器
小此方5 分钟前
Linux网络(二十):TCP拥塞控制与延迟应答详解:从拥塞窗口到TCP性能优化,理解TCP与UDP的效率差异
linux·网络·php
yunwei3710 分钟前
eBPF 开发实践:使用 eBPF 隐藏进程或文件信息
linux·后端·性能优化
芝麻开门29218 分钟前
Linux文件系统
linux·文件系统
羔羊++20 分钟前
24_实验二十三_运行内核
linux
羔羊++23 分钟前
23_实验二十二_移植网卡驱动
linux
Elastic 中国社区官方博客26 分钟前
错误最多的服务运行正常:使用 ES|QL 从日志进行根因分析
大数据·运维·数据库·sql·elasticsearch·搜索引擎·全文检索
水饺编程27 分钟前
第1章:开发环境搭建,在 Windows 中安装 Git
linux·c语言·汇编·git·ubuntu
迪康coolmu28 分钟前
屏幕水印与防拍照落地:从水印类型到泄密溯源的完整配置
运维·网络·安全·网络安全·数据安全
0+11131 分钟前
Linux --进程间关系和守护进程
linux·运维·服务器