Monitoring plugin:
[root@RHEL5 ~]# tail -n 2 /etc/nagios/resource.cfg
#Add by Kingcraft
$USER5$=/usr/local/nagios/customexec
[root@RHEL5 ~]# vi /usr/local/nagios/customexec/check_traffic.sh
#!/bin/sh
# Author: zhai_kang,20131029
#snmpwalk -v 2c 172.17.27.1 -c VIP-B ifInOctets.10024
#check_traffic.sh -v 2c 172.17.27.1 -c VIP-B ifInOctets.10024 -W 400 -C 600
#unit:KB/s
#Parameter
VER=$2
IP=$3
COMM=$5
OID=$6
WARN=$8
CRIT=${10}
#In flow(KB/s)
In1=`snmpwalk -v $VER $IP -c $COMM $OID | awk '{print $NF}'`
sleep 1
In2=`snmpwalk -v $VER $IP -c $COMM $OID | awk '{print $NF}'`
if [[ $In1 -gt $In2 ]]
then
Ina=$(($In1 - $In2))
else
Ina=$(($In2 - $In1))
fi
if [[ $Ina -ge 1024 ]]
then
In="`echo "scale=3;$Ina/1024" | bc`"
elif [[ `echo 1.024 $Ina | awk '{if($1<=$2)print 1;else print 0}'` -eq 1 ]]
then
In="0`echo "scale=3;$Ina/1024" | bc`"
else
In=0
fi
#Obtain Return Data
SIGN_C=`echo $CRIT $In | awk '{if($1<=$2)print 1;else print 0}'`
SIGN_W=`echo $WARN $In | awk '{if($1<=$2)print 1;else print 0}'`
SIGN_O=`echo 0 $In | awk '{if($1<=$2)print 1;else print 0}'`
if [[ $SIGN_C -eq 1 ]]
then
line=`echo "SNMP Critical : In = $In KB/s"`
RC=2
elif [[ $SIGN_W -eq 1 ]]
then
line=`echo "SNMP Warning : In = $In KB/s"`
RC=1
elif [[ $SIGN_O -eq 1 ]]
then
line=`echo "SNMP OK : In = $In KB/s"`
RC=0
else
line="SNMP Unknown"
RC=3
fi
echo $line \| Interface_Traffic="$In;$WARN;$CRIT"
exit $RC
Custom drawing templates:
[root@RHEL5 ~]# vi /usr/local/pnp4nagios/share/templates/check_traffic.php
<?php
#-----The Color of The Three Primary Colors-----
# red #FF0000
# green #00FF00
# blue #0000FF
# yellow #FFFF00
# black #000000
# deepred #330000
#------------------Image Title------------------
$opt[1] = "--title \"Interface traffic For $hostname / $servicedesc\" ";
#-------------Interface Traffic------------
$def[1] = "DEF:var1=$RRDFILE[1]:$DS[1]:AVERAGE " ;
#$def[1] .= "HRULE:$WARN[1]#FFFF11 ";
$def[1] .= "LINE1:var1#FF0000:\"In \" " ;
$def[1] .= "GPRINT:var1:MIN:\"%3.4lg KB/s MIN \\t\" ";
$def[1] .= "GPRINT:var1:MAX:\"%3.4lg KB/s MAX \\t\" ";
$def[1] .= "GPRINT:var1:AVERAGE:\"%3.4lg KB/s AVERAGE \\n\" ";
#-------------5 Minutes Average Load-----------
#$def[1] .= "DEF:var2=$RRDFILE[2]:$DS[2]:AVERAGE " ;
#$def[1] .= "HRULE:$WARN[1]#FFFF11 ";
#$def[1] .= "LINE2:var2#00FF00:\"5-Mins \" " ;
#$def[1] .= "GPRINT:var2:MIN:\"%3.4lg %s$UNIT[1] MIN \\t\" ";
#$def[1] .= "GPRINT:var2:MAX:\"%3.4lg %s$UNIT[1] MAX \\t\" ";
#$def[1] .= "GPRINT:var2:Average:\"%3.4lg %s$UNIT[1] AVERAGE \\n\" ";
#------------15 Minutes Average Load-----------
#$def[1] .= "DEF:var3=$RRDFILE[3]:$DS[3]:AVERAGE " ;
#$def[1] .= "LINE3:var3#000000:\"15-Mins \" " ;
#$def[1] .= "GPRINT:var3:MIN:\"%3.4lg %s$UNIT[1] MIN \\t\" ";
#$def[1] .= "GPRINT:var3:MAX:\"%3.4lg %s$UNIT[1] MAX \\t\" ";
#$def[1] .= "GPRINT:var3:AVERAGE:\"%3.4lg %s$UNIT[1] AVERAGE \\n\" ";
?>
Define the monitoring command:
[root@RHEL5 ~]# vi /etc/nagios/objects/commands.cfg
define command{
command_name check_traffic
command_line $USER5$/check_traffic.sh -v $ARG1$ $HOSTADDRESS$ -c $ARG2$ $ARG3$ -W $ARG4$ -C $ARG5$
}
[root@RHEL5 ~]# vi /etc/nagios/objects/templates.cfg
define host{
name host-pnp
register 0
action_url /pnp4nagios/graph?host=$HOSTNAME$
}
define service{
name srv-pnp
register 0
action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
}
Definition monitor file:
[root@RHEL5 ~]# vi /etc/nagios/Cisco/HYQH-SH.cfg
define host{
use generic-switch,host-pnp
host_name HYQH.SH
alias HYQH.SH
address 172.17.21.250
}
define service{
use generic-Flows,srv-pnp
host_name HYQH.SH
service_description Fa 0/0
check_command check_traffic!2c!SH!ifInOctets.1!10240!20480
}
Restart:
[root@RHEL5 ~]# service nagios restart