添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
犯傻的韭菜  ·  在Debian ...·  3 月前    · 
想表白的羊肉串  ·  丽台Quadro ...·  5 月前    · 
Hi all,
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
  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" ;;
#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
				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
        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
				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
#       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]
Thankyou Box293,
sometimes, the output is correct as below:

Code: Select all

Canh bao! Bang thong input tren: e0/1/1 :  cao qua, co the dang nghen duong truyen, lien he to GPON de tro giup
Bang thong tren cong e0/1/1 luc nay la: 
 Output bandwidth: 133854 Kbps
 Input bandwidth: 4638 Kbps
But sometimes :

Code: Select all

Timeout: No Response from 172.20.28.200
Do you have any idea to solve this?
It looks like your plugin is timing out talking to the device, you could try adding the timeout argument ( -t xxx ) to your snmpwalk commands.
Also instead of using the snmpwalk commands you could use snmpget instead.
  • Community Support Forums For Nagios Commercial Products
  • ↳   Nagios XI
  • ↳   Nagios Log Server
  • ↳   Nagios Network Analyzer
  • ↳   Nagios Fusion
  • ↳   Development on Github
  • ↳   Nagios Core
  • ↳   Nagios Plugins
  • ↳   NCPA
  • Community Support Forums For Nagios Open Source Projects
  • ↳   Open Source Nagios Projects
  •