shell脚本实战-实现磁盘使用率超过90%就告警的三种方法v1版

mjjackey

关注

阅读 87

2023-03-30


需求

时刻监控磁盘使用率,达到90%就开始告警。
告警可以使用:

  • 邮件告警
  • 钉钉告警
  • 微信告警

今天我们先来看最简单的V1的版本,实现简单需求,后面再增加功能

方法一:

awk 嵌套if循环

df -h|awk 'NR>1{if(int($5)>80){print $1" (mounted on "$6") used "$5" will not enough space!^m^"}else{print $1" (mounted on "$6") used "$5" is ok"}}

awk这种方法,难度适中,本身AWK就作为一种变成语言存在,所以相对学起来比较难。

一条命令搞定的方法,难倒一大片小伙伴。

我们尽可能使用更清晰的方法来搞定。

方法二

最普遍的写法:

[root@UIS-cloud1 ~]# cat  dftest.sh 
#!/bin/bash
fnume=(`df -h |wc -l`-1)
for ((i=1;i<=fnume;i++))

do

    if [ `df -h |awk 'NR>1{print int($5)}' |head -$i|tail -1` -gt 80 ];then
        echo "`df -h |awk 'NR>1{print $1" (mounted on "$6") used "$5" will not enough space!^m^"}' |head -$i|tail -1`"
    else
        echo "`df -h |awk 'NR>1{print $1" (mounted on "$6") used "$5" is ok"}' |head -$i|tail -1`"

    fi

done

方法二要比方法一更容易理解,不习惯读长代码的小伙伴会觉得比较难。

你可以把方法二在拆分一下。 当然对于初学的小伙伴,还是建议如下的方法三:

方法三:

更简单的方法:

[root@itlaoxin41 ~]# cat df.sh 
#!/bin/bash
## 先判断文件是否存在
if [ -f df.txt ];then
`cat /dev/null > df.txt`
fi
num=`df -h |awk '{print int($5)}'`
`df -h |awk '{print $1,int($5)}' |grep -v "文件系统" >>df.txt`
## 打印磁盘名称和磁盘使用率
for i in $num 
do
if [ $i -gt 80 ];then 
disk=`grep $i df.txt |awk '{print $1}'`
echo "$disk is not ok"
	
fi

done

方法三就比较容易了, 先判断df.txt是否存在,如果存在就清空,如果不存在在下面的脚本执行过程中,也会自己创建。

通过df -h 截取两方面的内容,一部分是磁盘名称,另一部分是磁盘使用率

后面可以为这个脚本增加邮件功能。

总结

一个脚本使用多种方法解决,可以很好的锻炼脚本能力。
另外在这个脚本的基础上,不断的加需求,直到成为一个最完美的脚本。

精彩评论(0)

0 0 举报