接着上午的文章,继续讨论如何通过SSH 执行df -h命令实现磁盘空间的监控。
运行效果如下:
[root@fan-central plugins]# ./ssh_remote_disk_Centos7 -H 172.26.128.82 -U root -P smgadmin@123! -R "/" -K "788" -w 80 -c 90
Disk OK - / TOTAL: 788G USED: 48G (7%) FREE: 700G (93.00%) | used=7%;80;90;0;100
代码如下:
#!/bin/bash
#ssh_remoteMemory
#History:
# by xzy 2017/04/18
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
OK=0
WARNING=1
CRITICAL=2
UNKNOWN=3
usage()
{
printf "function:\n
ssh_remoteDisk file\n
[host IP ] -H [Usename] -U ... \n
Usage Option:\n
-H: host's web IP\n
-U: Username\n
-P: Password\n
-R: RoutePath\n
-K: Keyword\n
-w: WarnValue\n
-c: CriticalValue\n"
exit $UNKNOWN
}
compare_number(){
expr $1 \> $2
}
awk_sum(){
# result="echo | awk '{print ($1/$2)*100}'"
# echo $result
# exit
# echo $result
# awk 'BEGIN{printf"%.2f%\n",('$1'/'$2')*100}'
awk 'BEGIN{printf"%.2f\n",'$1'/'$2'}'
}
awk_plus(){
# result="echo | awk '{print ($1/$2)*100}'"
# echo $result
# exit
# echo $result
# awk 'BEGIN{printf"%.2f%\n",('$1'/'$2')*100}'
awk 'BEGIN{printf"%.2f\n",'$1'-'$2'}'
}
while getopts :H:U:P:R:K:w:c:h Parm
do
case $Parm in
H)IP=$OPTARG
;;
U)UserName=$OPTARG
;;
P)PassWord=$OPTARG
;;
R)Path1=$OPTARG
;;
K)KeyWord1=$OPTARG
;;
w)WarnValue=$OPTARG
;;
c)CriticalValue=$OPTARG
;;
h | ?)
usage
;;
esac
done
diskvaluePer=`/usr/lib/nagios/plugins/ssh2.exp $IP $UserName $PassWord "df -h $Path1" | grep "$KeyWord1" |awk -F' ' '{print $5}'|awk -F'%' '{print $1}'`
diskTotal=`/usr/lib/nagios/plugins/ssh2.exp $IP $UserName $PassWord "df -h $Path1" | grep "$KeyWord1" |awk -F' ' '{print $2}'`
diskUsed=`/usr/lib/nagios/plugins/ssh2.exp $IP $UserName $PassWord "df -h $Path1" | grep "$KeyWord1" |awk -F' ' '{print $3}'`
diskFree=`/usr/lib/nagios/plugins/ssh2.exp $IP $UserName $PassWord "df -h $Path1" | grep "$KeyWord1" |awk -F' ' '{print $4}'`
diskvalueFreePer=$(awk_plus "100" $diskvaluePer)
disk_now0=$(compare_number $diskvaluePer $CriticalValue)
if [ $disk_now0 == 1 ]; then
echo 'Disk Critical - / TOTAL: '$diskTotal' USED: '$diskUsed' ('$diskvaluePer'%) FREE: '$diskFree' ('$diskvalueFreePer'%) | used='$diskvaluePer'%;'$WarnValue';'$CriticalValue';0;100'
exit $CRITICAL
fi
disk_now=$(compare_number $diskvaluePer $WarnValue)
if [ $disk_now == 1 ]; then
echo 'Disk Warn - / TOTAL: '$diskTotal' USED: '$diskUsed' ('$diskvaluePer'%) FREE: '$diskFree' ('$diskvalueFreePer'%) | used='$diskvaluePer'%;'$WarnValue';'$CriticalValue';0;100'
exit $WARNING
fi
echo 'Disk OK - / TOTAL: '$diskTotal' USED: '$diskUsed' ('$diskvaluePer'%) FREE: '$diskFree' ('$diskvalueFreePer'%) | used='$diskvaluePer'%;'$WarnValue';'$CriticalValue';0;100'
exit $OK