当前位置: 首页 > 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://www.xdnf.cn/news/1490149.html

相关文章:

  • 基于「YOLO目标检测 + 多模态AI分析」的PCB缺陷检测分析系统(vue+flask+数据集+模型训练)
  • 数据结构精讲:栈与队列实战指南
  • 【Python】数据可视化之热力图
  • Photoshop - Photoshop 创建文档
  • 8.渗透-.虚拟机安装
  • Redis复制延迟全解析:从毫秒到秒级的优化实战指南
  • Axum 最佳实践:如何构建优雅的 Rust 错误处理系统?(三)
  • Python从入门到精通_00_初识python
  • Android开发-按钮触控
  • Lua > OpenResty Lua Module
  • kerberos详解
  • Redis数据结构之List
  • HarmonyOS 应用开发深度实践:基于 Stage 模型与声明式 UI 的精髓
  • webrtc弱网-LossBasedBweV2类源码分析与算法原理
  • Next.js中静态资源处理:图片、字体和其他文件
  • 【考研C语言编程题】数组元素批量插入实现(含图示+三部曲拆解)
  • 【C++上岸】C++常见面试题目--网络篇(第二十一期)
  • 蓓韵安禧DHA高含量好吸收特性深度解析
  • tomcat下载
  • 性能优化——首屏优化
  • rabbitmq 重试机制
  • Windows netstat 命令使用说明
  • ZSet
  • 5G NR PDCCH之信号调制
  • 【redis 基础】redis 的常用数据结构及其核心操作
  • GD32自学笔记:5.定时器中断
  • 3D 版接雨水
  • 【系统架构设计(20)】构件与中间件技术
  • 写程序or打游戏(组合计数)
  • 美股市场股票数据API对接文档