I wrote this script to check bandwidth of network devices's interface. I run it from command line successfully, the output is perfect, but when I add the scipt on nagios as a service, some time I receive this alert: no output from plugin with the UNKNOW state of the service. this cause of many notification about flapping state between UNKNOW and OK state.
Thank for any advice
this is my script:
Code: Select all
[size=85]#!/bin/bash
#Ussage: Check input bandwidth on each switch port
########## ./check_bw $IP_of_switch $port_No_with_slash $max_threshold $min_threshold#####
########## Version 3.0 ########################################
################################################################
########### Created by Thanh.ha ##############################
######## ###########################
###############################################################
###############################################################
print_usage() {
echo "Usage: ./check_bw -H Address -p port_number - I value_in_Kbps -i value_in_Kbps -O value_in_Kbps -o value_in_Kbps"
echo " ./$SCRIPTNAME -H ADDRESS"
echo " ./$SCRIPTNAME -p STRING"
echo " ./$SCRIPTNAME -I STRING"
echo " ./$SCRIPTNAME -i INTEGER"
echo " ./$SCRIPTNAME -O INTEGER"
echo " ./$SCRIPTNAME -o INTEGER"
echo " ./$SCRIPTNAME -h"
echo " ./$SCRIPTNAME -V"
echo "Example: ./check_bw -H 10.255.0.251 -p g0/2 -I 100000 -i 100 -O 100000 -o 100"
}
print_version() {
echo "$SCRIPTNAME" version "$VERSION"
echo "fix UNKNOWN error"
echo "********* NOTE *********************************"
echo "This nagios plugins comes with ABSOLUTELY NO WARRANTY."
echo "You may redistribute copies of the plugins under the terms of the GNU General Public License v2."
echo "Written by hafthanhf"
}
print_help() {
print_version
print_usage
}
# Plugin return statements
NORMAL=0
WARNING=1
CRITICAL=2
UNKNOWN=3
OID_sysDescr=SNMPv2-MIB::sysDescr.0
OID_bw_in_junos="1.3.6.1.4.1.2636.3.3.1.1.1"
OID_bw_out_junos="1.3.6.1.4.1.2636.3.3.1.1.4"
# Default variables
VERSION=2.5
DESCRIPTION="Unknown"
STATE="$STATE_UNKNOWN"
STATE_MESSAGE="UNKNOWN"
# Default options
COMMUNITY="****"
HOSTNAME="127.0.0.1"
#VERSION="2c"
#WARNING=0
#CRITICAL=0
PATH1=/usr/local/nagios/libexec/
PATH2=/usr/local/nagios/var
while getopts H:p:I:i:O:o:hV OPT
do
case "$OPT" in
H) HOSTNAME="$OPTARG" ;;
p) PORTNo="$OPTARG" ;;
I) MAXinTH="$OPTARG" ;;
i) MINinTH="$OPTARG" ;;
O) MAXoutTH="$OPTARG" ;;
o) MINoutTH="$OPTARG" ;;
h) print_help
exit "$UNKNOWN" ;;
V) print_version
exit "$UNKNOWN" ;;
esac
done
#Start to processing
################# SYSTEM INFO ############
###########################################
#Get system infomation
sysinfo=`snmpwalk -v 2c -c $COMMUNITY $HOSTNAME $OID_sysDescr | awk 'NR==1 {print $4}'`
#Get Interface's OID
ifoid=`snmpwalk -v 2c -c $COMMUNITY $HOSTNAME IF-MIB::ifDescr | grep "\<$PORTNo\>" | awk -F '[{. }]' '{print $2}'`
#Get Interface's description
portname=`snmpwalk -v 2c -c $COMMUNITY $HOSTNAME IF-MIB::ifAlias.$ifoid | awk -F '[{:}]' '{print $4}'`
###########log#############
timelog=$PATH2/bwlog/timelog_$HOSTNAME"_"$ifoid
outlog=$PATH2/bwlog/byteout_$HOSTNAME"_"$ifoid
inlog=$PATH2/bwlog/bytein_$HOSTNAME"_"$ifoid
################# Traffic INFO ############
###########################################
byteout=`snmpwalk -v 2c -c $COMMUNITY $HOSTNAME IF-MIB::ifOutOctets.$ifoid | awk -F '[{:}]' '{ print $4 }'`
bytein=`snmpwalk -v 2c -c $COMMUNITY $HOSTNAME IF-MIB::ifInOctets.$ifoid | awk -F '[{:}]' '{ print $4 }' `
date1=`cat $(echo $timelog)`
date2=`date +%s`
timediff=$(( $date2 - $date1 ))
#bytein1=`cat $inlog`
#byteout1=`cat $outlog`
indiff=$(($bytein - `cat $inlog`))
### debug###
#echo $indiff
outdiff=$(($byteout - `cat $outlog`))
#echo $outdiff
echo $(date +%s) > $timelog
echo "$byteout" > $outlog
echo "$bytein" > $inlog
bw_in=`expr $indiff \* 8 / $timediff / 1000`
bw_out=`expr $outdiff \* 8 / $timediff / 1000`
if [ $bw_in -ge 0 ] && [ $bw_out -ge 0 ] ; then
if [ $bw_in -le $MAXinTH ] && [ $bw_in -ge $MINinTH ]; then
if [ $bw_out -lt $MAXoutTH ] && [ $bw_out -gt $MINoutTH ] ; then
/usr/bin/printf "%b" "Cong $PORTNo : $channel hoat dong binh thuong\n\n Bang thong tren cong $PORTNo luc nay la:\nInput: $bw_in Kbps\nOutput: $bw_out Kbps"
exit 0
elif [ $bw_out -ge $MAXoutTH ] ; then
/usr/bin/printf "%b" "Canh bao! Bang thong output tren: $PORTNo : $channel cao qua, co the dang nghen duong truyen, lien he to GPON de tro giup \n\n Bang thong tren cong $PORTNo luc nay la: \n Output bandwidth: $bw_out Kbps\n Input bandwidth: $bw_in Kbps"
exit $CRITICAL
else
echo -e "Canh bao! Bang thong output tren: $PORTNo : $channel dang thap qua, co the bi dut UPLINK!\nBang thong tren cong $PORTNo luc nay la: \n Output bandwidth: $bw_out Kbps\n Input bandwidth: $bw_in Kbps"
exit $CRITICAL
fi
elif [ $bw_in -gt $MAXinTH ] ; then
echo -e "Canh bao! Bang thong input tren: $PORTNo : cao qua, co the dang nghen duong truyen, lien he to GPON de tro giup\nBang thong tren cong $PORTNo luc nay la: \n Output bandwidth: $bw_out Kbps\n Input bandwidth: $bw_in Kbps"
exit $CRITICAL
else
echo -e "Canh bao! Bang thong input tren: $PORTNo : $channel dang thap qua, co the bi dut UPLINK!\nBang thong tren cong $PORTNo luc nay la: \n Output bandwidth: $bw_out Kbps\n Input bandwidth: $bw_in Kbps"
exit $CRITICAL
fi
else
# echo -e "Bang thong tren cong $PORTNo luc nay la: \n Output bandwidth: $bw_out Kbps\n Input bandwidth: $bw_in Kbps"
# echo "Khong lay duoc thong tin tren thiet bi, doi mot chut ....."
exit $UNKNOWN
fi[/size]