最近在公司一直做监控。发现有不少被监控服务器没有安装SNMP,也不允许安装NRPE插件。但是给予了SSH登陆权限。因此通过执行远程命令获取监控的内存变化,是个好办法.
第一步安装EXPECT,编写EXPECT脚本,用来模拟SSH登录,执行远程命令。
#!/usr/bin/expect -f
#Program:
# the script check the Cisco switch's status ,the username and passwd as parameters to the scripts!
#History:
# 2014/11/25 hlszyc
set timeout 60
set IP [lindex $argv 0]
set Username [lindex $argv 1]
set Password [lindex $argv 2]
set Command [lindex $argv 3]
spawn ssh $Username@$IP $Command
expect "*password:"
send "$Password\r"
#expect "*#"
#send "exit\r"
expect eof
exit
~
第二步编写SHELL脚本。其中有两个只是点。比较大小和用AWK进行除法计算。
#!/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
CH_ComputerRoomEnviroment file\n
[host IP ] -H [Usename] -U ... \n
Usage Option:\n
-H: host's web IP\n
-U: Username\n
-P: Password\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'}'
}
while getopts :H:U:P:w:c:h Parm
do
case $Parm in
H)IP=$OPTARG
;;
U)UserName=$OPTARG
;;
P)PassWord=$OPTARG
;;
w)WarnValue=$OPTARG
;;
c)CriticalValue=$OPTARG
;;
h | ?)
usage
;;
esac
done
#echo 'Warn:'$WarnValue
#echo 'Critical:'$CriticalValue
#exit
phymem=`/usr/lib/nagios/plugins/ssh2.exp $IP $UserName $PassWord free | grep "Mem:" |awk '{print $2}'`
phymemused=`/usr/lib/nagios/plugins/ssh2.exp $IP $UserName $PassWord free | grep 'Mem:' | awk '{print $3}'`
#echo $phymem
#echo $phymemused
mem_per=$(awk_sum $phymemused $phymem)
swapmem=`/usr/lib/nagios/plugins/ssh2.exp $IP $UserName $PassWord free | grep "Swap:" |awk '{print $2}'`
swapmemused=`/usr/lib/nagios/plugins/ssh2.exp $IP $UserName $PassWord free | grep 'Swap:' | awk '{print $3}'`
swapmemfree=`/usr/lib/nagios/plugins/ssh2.exp $IP $UserName $PassWord free | grep 'Swap:' | awk '{print $4}'`
#echo $swapmem
#echo $swapmemused
#echo $swapmemfree
#set swap warn value
swap_warn=0.20
#set swap critical value
swap_critical=0.10
swap_per=$(awk_sum $swapmemfree $swapmem)
#echo 'swap:'$swap_per
#exit
if (($swapmemused != 0)); then
swap_now0=`expr $swap_per \> $swap_critical`
swap_now=`expr $swap_per \> $swap_warn`
if (($swap_now == 0)); then
echo 'WARN!'$phymemused'KB /'$phymem'KB ,Total memory used : '$mem_per' , swap free '$swap_per' |value='$phymemused'KB;'$WarnValue';'$CriticalValue';0;1'
exit $WARNING
fi
if (($swap_now0 == 0)); then
echo 'Critical!'$phymemused'KB /'$phymem'KB ,Total memory used : '$mem_per' , swap free '$swap_per' |value='$phymemused'KB;'$WarnValue';'$CriticalValue';0;1'
exit $CRITICAL
fi
fi
mem_now0=$(compare_number $mem_per $CriticalValue)
#echo $mem_now0
if [ $mem_now0 == 1 ]; then
echo 'Critical!'$phymemused'KB /'$phymem'KB ,Total memory used : '$mem_per' , swap free '$swap_per' |value='$phymemused'KB;'$WarnValue';'$CriticalValue';0;1'
exit $CRITICAL
fi
mem_now=$(compare_number $mem_per $WarnValue)
if [ $mem_now == 1 ]; then
echo 'Warn!'$phymemused'KB /'$phymem'KB ,Total memory used : '$mem_per' , swap free '$swap_per' |value='$phymemused'KB;'$WarnValue';'$CriticalValue';0;1'
exit $WARNING
fi
mem_now0=$(compare_number $mem_per $CriticalValue)
#if [ "$mem_now0"="1" ]; then
# echo 'Critical!'$phymemused'KB /'$phymem'KB ,Total memory used : '$mem_per' , swap free '$swap_per' |value='$phymemused'KB;'$WarnValue';'$CriticalValue';0;1'
# exit $CRITICAL
#fi
echo 'OK!'$phymemused'KB /'$phymem'KB ,Total memory used : '$mem_per' , swap free '$swap_per' |value='$phymemused'KB;'$WarnValue';'$CriticalValue';0;1'
exit $OK
第三步执行
[root@fan-central plugins]# ./ssh_remote_memory -H 172.26.128.85 -U root -P smgadmin -w 0.98 -c 0.99
OK!2971980KB /3106792KB ,Total memory used : 0.96 , swap free 1.00 |value=2971980KB;0.98;0.99;0;1
第四部通过centreon加入Nagios监控系统。
然后重启Nagios服务。