158 lines
5.0 KiB
Bash
Executable File
158 lines
5.0 KiB
Bash
Executable File
#!/bin/ash
|
|
# set -x
|
|
START=`date +%s`
|
|
#INTERFACES=`ls /sys/class/net/`
|
|
|
|
|
|
while getopts "w:c:h" OPT; do
|
|
case $OPT in
|
|
"w") warn=$OPTARG;;
|
|
"c") crit=$OPTARG;;
|
|
"h") help;;
|
|
esac
|
|
done
|
|
|
|
|
|
WARNING=$(echo "$warn * 1000000" | bc)
|
|
CRITICAL=$(echo "$crit * 1000000" | bc)
|
|
|
|
#which iftop > /dev/null 2>&1
|
|
#if [ $? != 0 ]; then
|
|
# echo "Iftop not installed"
|
|
# exit 1
|
|
#fi
|
|
|
|
IFTOP="/usr/bin/iftop"
|
|
PERFDATA=""
|
|
overloaded=""
|
|
ex_st=0
|
|
int=0
|
|
int_ol=0
|
|
for i in eth0;
|
|
do
|
|
#IF_UP=`cat /sys/class/net/$i/operstate`
|
|
if [ -e "/sys/class/net/$i/operstate" ]; then
|
|
IF_UP=`cat /sys/class/net/$i/operstate 2>&1`
|
|
else
|
|
continue
|
|
fi
|
|
if [ $IF_UP == "up" ] || [ $IF_UP == "unknown" ]; then
|
|
INTERFACE=$i
|
|
TMP_FILE="/tmp/int_${INTERFACE}_cache"
|
|
|
|
$IFTOP -i $INTERFACE -n -t -s 2 > $TMP_FILE 2>&1
|
|
if [ $? != 0 ]; then
|
|
rm -f $TMP_FILE
|
|
continue
|
|
fi
|
|
|
|
##### TOTAL ########
|
|
TOTAL=`cat $TMP_FILE | grep -i 'Total send and receive rate'| awk -F ":" '{print $2}'| awk '{print $1}'`
|
|
####################
|
|
##### SEND RATE ####
|
|
SEND=`cat $TMP_FILE | grep -i 'Total send rate'| awk -F ":" '{print $2}'| awk '{print $1}'`
|
|
###################
|
|
#### REC RATE #####
|
|
REC=`cat $TMP_FILE | grep -i 'Total receive rate'| awk -F ":" '{print $2}'| awk '{print $1}'`
|
|
##################
|
|
rm -f $TMP_FILE 2>&1
|
|
|
|
|
|
|
|
metric=`echo "$TOTAL" | grep -Eo '[[:alpha:]]+'`
|
|
TOTAL=${TOTAL/${metric}}
|
|
TOTAL=`echo "$TOTAL" | sed 's/,/./'`
|
|
|
|
if [ $metric == "Mb" ]; then
|
|
TOTAL=$(echo "$TOTAL * 1000000" | bc)
|
|
elif [ $metric == "Kb" ]; then
|
|
TOTAL=$(echo "$TOTAL * 1000" | bc)
|
|
elif [ $metric == "b" ]; then
|
|
TOTAL=$TOTAL
|
|
else
|
|
TOTAL=$TOTAL
|
|
fi
|
|
TOTAL=${TOTAL%.*}
|
|
|
|
metric=`echo "$SEND" | grep -Eo '[[:alpha:]]+'`
|
|
SEND=${SEND/${metric}}
|
|
SEND=`echo "$SEND" | sed 's/,/./'`
|
|
|
|
if [ $metric == "Mb" ]; then
|
|
SEND=$(echo "$SEND * 1000000" | bc)
|
|
elif [ $metric == "Kb" ]; then
|
|
SEND=$(echo "$SEND * 1000" | bc)
|
|
elif [ $metric == "b" ]; then
|
|
SEND=$SEND
|
|
else
|
|
SEND=$SEND
|
|
fi
|
|
SEND=${SEND%.*}
|
|
|
|
metric=`echo "$REC" | grep -Eo '[[:alpha:]]+'`
|
|
REC=${REC/${metric}}
|
|
REC=`echo "$REC" | sed 's/,/./'`
|
|
|
|
if [ $metric == "Mb" ]; then
|
|
REC=$(echo "$REC * 1000000" | bc)
|
|
elif [ $metric == "Kb" ]; then
|
|
REC=$(echo "$REC * 1000" | bc)
|
|
elif [ $metric == "b" ]; then
|
|
REC=$REC
|
|
else
|
|
REC=$REC
|
|
fi
|
|
REC=${REC%.*}
|
|
|
|
if [ -z $TOTAL ] ; then
|
|
TOTAL=0
|
|
fi
|
|
if [ $TOTAL -ge $CRITICAL ]; then
|
|
overloaded="$overloaded $INTERFACE"
|
|
int_ol=$(echo "$int_ol + 1" | bc)
|
|
ex_st=2
|
|
elif [ $TOTAL -lt $CRITICAL ] && [ $TOTAL -ge $WARNING ]; then
|
|
overloaded="$overloaded $INTERFACE"
|
|
int_ol=$(echo "$int_ol + 1" | bc)
|
|
if [ $ex_st -eq 0 ]; then
|
|
ex_st=1
|
|
fi
|
|
elif [ $TOTAL -le $WARNING ]; then
|
|
if [ $ex_st -eq 0 ]; then
|
|
ex_st=0
|
|
fi
|
|
else
|
|
echo 0 > /dev/null
|
|
|
|
fi
|
|
|
|
int=$(echo "$int + 1" | bc)
|
|
PERFDATA="$PERFDATA Total_$INTERFACE=${TOTAL};${WARNING};${CRITICAL};0;${CRITICAL} Send_$INTERFACE=${SEND}; Receive_$INTERFACE=${REC};"
|
|
|
|
elif [ $IF_UP == "down" ]; then
|
|
echo 0 > /dev/null
|
|
else
|
|
echo 0 > /dev/null
|
|
fi
|
|
done
|
|
|
|
END=`date +%s`
|
|
EXEC_TIME=$(($END-$START))
|
|
PERFDATA="$PERFDATA ExecTime=$EXEC_TIME;"
|
|
|
|
if [ $ex_st -eq 0 ]; then
|
|
echo "OK: $int interfaces under expected load | $PERFDATA"
|
|
exit $ex_st
|
|
|
|
elif [ $ex_st -eq 1 ]; then
|
|
echo "Warning: $int_ol overloaded interfaces ($overloaded); $int interfaces OK | $PERFDATA"
|
|
exit $ex_st
|
|
elif [ $ex_st -eq 2 ]; then
|
|
echo "Critical: $int_ol overloaded interfaces ($overloaded); $int interfaces OK | $PERFDATA"
|
|
exit $ex_st
|
|
else
|
|
echo "Unknown: $int_ol overloaded interfaces ($overloaded). $int interfaces OK | $PERFDATA"
|
|
exit 3
|
|
fi
|
|
|