使用shell脚本编写监控系统资源(CPU,内存,磁盘)使用情况

🏡作者主页:点击!****

🛠️Shell编程专栏:点击!****

⏰️创作时间:2024年6月20日16点30分

🀄️文章质量:95分


目录

------------前言------------

1.本章目标

2.编写脚本

1.获取内存使用率

2.获取根分区磁盘占用率

3.设置监控阈值

4.检查CPU使用率

5.检查内存使用率

6.检查根分区磁盘使用率

7.测试


------------前言------------

在现代计算机系统中,确保系统资源的高效利用和及时响应异常情况至关重要。对于系统管理员和开发人员来说,监控CPU、内存和磁盘使用情况是日常维护的核心任务之一。Shell脚本作为一种强大而灵活的工具,能够帮助我们自动化这些监控任务,实时获取系统资源使用情况,并在资源使用超过设定阈值时及时发出警报。

1.本章目标

本篇文章将带领您学习如何编写一个简单但功能强大的Shell脚本,用于监控系统的CPU、内存和根分区磁盘的使用情况。当某项资源的使用率超过预设的警戒值时,脚本将自动发送警报邮件通知相关人员。通过本次学习,您将掌握基础的Shell编程技巧,并能将这些知识应用到实际的系统监控中去。准备好了吗?让我们开始探索Shell编程的世界吧!

题目

请编写一个Shell脚本,用于监控系统的CPU、内存和根分区磁盘的使用情况。该脚本需要在资源使用超过设定的阈值时发送警报邮件。

2.编写脚本

bash 复制代码
vim /sysmon.sh

加入一下内容

1.获取内存使用率

使用 free 命令和 awk 命令计算当前的内存使用率,并将其存储在变量 mem 中。

bash 复制代码
mem=$(free | grep Mem | awk '{print $3/$2 * 100.0}')

解释如下:

  1. free:显示系统的内存使用情况。
  2. grep Mem:从 free 的输出中筛选出包含内存信息的那一行。
  3. awk '{print $3/$2 * 100.0}':计算内存使用率,将已用内存除以总内存并乘以100,得到百分比。
  4. mem=$(...):将计算结果存储在变量 mem 中。
2.获取根分区磁盘占用率

使用 df -h 命令和 awk 命令获取根分区(/)的磁盘占用率,并将其存储在变量 disk 中。

bash 复制代码
disk=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')

解释如下:

  1. df -h /:显示根分区(/)的磁盘使用情况。
  2. awk 'NR==2 {print $5}':提取第二行的第五列数据,即根分区的使用率。
  3. sed 's/%//':去掉使用率百分比后的百分号。
  4. disk=$(...):将结果存储在变量 disk 中。
3.设置监控阈值

定义CPU、内存和磁盘使用率的阈值。分别为80%、90%和90%。

bash 复制代码
cpuce=80
ncce=90
cpce=90

解释如下:

  1. cpuce=80:设置CPU使用率警戒线为80%。
  2. ncce=90:设置内存使用率警戒线为90%。
  3. cpce=90:设置根分区磁盘使用率警戒线为90%。
4.检查CPU使用率

对比CPU使用率与设定的阈值,如果超过80%,则输出警告信息并发送邮件通知。

bash 复制代码
if (( $(echo "$cpu >= $cpuce" | bc -l) )); then
    echo "CPU占用率超过80% ($cpu%)"
    echo "CPU占用率超过80%" | mail -s "监控警报" monitor@bdqn.com
else
    echo "CPU占用率 $cpu%"
fi

解释如下:

  • if (( $(echo "$cpu >= $cpuce" | bc -l) )):使用 bc 计算表达式,如果 cpu 大于或等于 cpuce
  • echo "CPU占用率超过80% ($cpu%)":输出警告信息。
  • echo "CPU占用率超过80%" | mail -s "监控警报" monitor@bdqn.com:发送警报邮件。
  • elseecho "CPU占用率 $cpu%":如果 cpu 低于 cpuce,输出当前CPU使用率。
5.检查内存使用率

对比内存使用率与设定的阈值,如果超过90%,则输出警告信息并发送邮件通知。

bash 复制代码
if (( $(echo "$mem >= $ncce" | bc -l) )); then
echo "内存使用率超过90% ($mem%)"
echo "内存使用率超过90%" | mail -s "监控警报" monitor@bdqn.com
else
echo "内存使用率 $mem%"
fi

解释如下:

  • if (( $(echo "$mem >= $ncce" | bc -l) )):使用 bc 计算表达式,如果 mem 大于或等于 ncce
  • echo "内存使用率超过90% ($mem%)":输出警告信息。
  • echo "内存使用率超过90%" | mail -s "监控警报" monitor@bdqn.com:发送警报邮件。
  • elseecho "内存使用率 $mem%":如果 mem 低于 ncce,输出当前内存使用率。
6.检查根分区磁盘使用率

对比根分区磁盘使用率与设定的阈值,如果超过90%,则输出警告信息并发送邮件通知。

bash 复制代码
if (( $(echo "$disk >= $cpce" | bc -l) )); then
echo "磁盘使用率超过90% ($disk%)"
echo "磁盘使用率超过90%" | mail -s "监控警报" monitor@bdqn.com
else
echo "磁盘使用率 $disk%"
fi

解释如下:

  • if (( $(echo "$disk >= $cpce" | bc -l) )):使用 bc 计算表达式,如果 disk 大于或等于 cpce
  • echo "磁盘使用率超过90% ($disk%)":输出警告信息。
  • echo "磁盘使用率超过90%" | mail -s "监控警报" monitor@bdqn.com:发送警报邮件。
  • elseecho "磁盘使用率 $disk%":如果 disk 低于 cpce,输出当前磁盘使用率。
7.测试

编写完成之后执行测试

"成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子

相关推荐
Michaelwubo2 分钟前
Docker dockerfile镜像编码 centos7
运维·docker·容器
远游客07138 分钟前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<8 分钟前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟9 分钟前
centos-stream9系统安装docker
linux·docker·centos
好像是个likun33 分钟前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
超爱吃士力架38 分钟前
邀请逻辑
java·linux·后端
南宫生43 分钟前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__1 小时前
Web APIs学习 (操作DOM BOM)
学习
数据的世界013 小时前
.NET开发人员学习书籍推荐
学习·.net
cominglately3 小时前
centos单机部署seata
linux·运维·centos