当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 一、脚本结构图及编写思路讲解
  • 二、各模块功能介绍
    • 2.1 CPU监测并获取数据模块
    • 2.2 内存、硬盘监测并获取数据模块
    • 2.3 I/O await监测并获取数据模块
    • 2.4 网络流量监控
    • 2.5 邮件告警模块
    • 2.6 参数配置模块
  • 三、脚本整合
  • 四、选择合适的脚本使用方式
  • 五、虚拟机环境进行脚本验证测试
  • 总结


前言

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

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

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


文章转载自:

http://frslg0S4.bpmtz.cn
http://16uNe5kX.bpmtz.cn
http://fD4x7pqd.bpmtz.cn
http://Y57RBwok.bpmtz.cn
http://hpDshIAM.bpmtz.cn
http://hUOWOeVt.bpmtz.cn
http://dENpMLtQ.bpmtz.cn
http://S3h3bQsD.bpmtz.cn
http://An4ylWgW.bpmtz.cn
http://mYUJEWfN.bpmtz.cn
http://lYthW1q6.bpmtz.cn
http://wMlEDAio.bpmtz.cn
http://J41D0Avu.bpmtz.cn
http://jnGo5uel.bpmtz.cn
http://oNT4Xh2w.bpmtz.cn
http://TU2Xh1JZ.bpmtz.cn
http://bEQztdtB.bpmtz.cn
http://dTUEWiKw.bpmtz.cn
http://f3NIYvW0.bpmtz.cn
http://2BSQvQG2.bpmtz.cn
http://I1iemPxs.bpmtz.cn
http://24PTx4jP.bpmtz.cn
http://K7Fygg8m.bpmtz.cn
http://Ww7DXX0O.bpmtz.cn
http://nfU91TcV.bpmtz.cn
http://YRiOiykx.bpmtz.cn
http://21nQR6GD.bpmtz.cn
http://yh3tUe3y.bpmtz.cn
http://AvVtoN2b.bpmtz.cn
http://OfYQx29Y.bpmtz.cn
http://www.dtcms.com/a/371456.html

相关文章:

  • 社交新零售时代本地化微商的发展路径研究——基于开源AI智能名片链动2+1模式S2B2C商城小程序源的创新实践
  • Tailwind CSS v4 终极指南:体验 Rust 驱动的闪电般性能与现代化 CSS 工作流
  • 模块--红外跟随避障模块
  • 使用MQTT.fx和ESP32连接Onenet平台
  • 功率器件固晶挑战:抗高温翘曲治具提升IGBT焊接强度30%
  • Text2Sql.Net架构深度解析:从自然语言到SQL的智能转换之道
  • UE5 基础应用 —— 10 - 控制台命令
  • Linux内核Syncookies机制:抵御SYN Flood攻击的坚实防线
  • Axum 最佳实践:如何构建优雅的 Rust 错误处理系统?(三)
  • 使用 nginx-module-vts 进行 Nginx 流量监控
  • 心路历程-Linux如何赋予权限?
  • 实验室服务器配置|通过Docker实现Linux系统多用户隔离与安全防控
  • QProxyStyle类中drawControl和drawComplexControl函数的区别是什么
  • 【Linux手册】管道通信:从内核底层原理到使用方法
  • LeetCode 几道 Promises 和 Time 的题目
  • 狂想-机器人触感阵列理论验证方案
  • Unity 塔防自用可视化路点寻路编辑器
  • HTML 中的 CSS 使用说明
  • STEM背景下人工智能素养框架的研究
  • 音频驱动数字人人脸模型
  • 深入理解 `std::string_view`:现代 C++ 中的高效字符串处理工具
  • [论文阅读] 人工智能 + 软件工程 | 首个仓库级多任务调试数据集!RepoDebug揭秘LLM真实调试水平
  • 数据结构:单链表以及链表题
  • 谷歌Genie 3:让你的照片变成可以玩的游戏世界
  • 如何终止画图
  • shell脚本练习
  • Coze源码分析-资源库-删除插件-前端源码-总结
  • 【AI论文】门控联想记忆:一种用于高效序列建模的并行O(N)架构
  • 服务器请求伪造ssrf
  • TDengine 选择函数 TOP