编写远程监控机器的内存的插件

  最近在公司一直做监控。发现有不少被监控服务器没有安装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服务。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值