#!/bin/bash # ======================================================================================== # System loadavg plugin for Nagios # # Written by : chaishao # From : 51niux.com # Release : 1.1.0 # Creation date : 2017-03-08 # Revision date : 2017-03-08 # Description : Nagios plugin (script) to check system load_one . # This script has been designed and written on Linux System. # # USAGE : ./$PROGNAME [-w -c] # # Exemple: : ./$PROGNAME -w n1 -c n2 # ======================================================================================== # Nagios return codes STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 # Paths to dir used in this script. PYDIR=/usr/local/nagios/libexec/check_ganglia.py IP=localhost PROGNAME="load_one_check.sh" CPU_NUM=`grep -c "model name" /proc/cpuinfo` print_help(){ echo "$PROGNAME -w INT -c INT" echo "Options:" echo " -w/--warning)" echo " Sets a warning cpu nuclear multiple" echo " -c/--critical)" echo " Sets a critical cpu nuclear multiple" exit } # From : 51niux.com system_load_check(){ LOADAVG=`cat /proc/loadavg` LOADAVG1_PRINT=`echo $LOADAVG|awk {'print $1'}` LOADAVG5_PRINT=`echo $LOADAVG|awk {'print $2'}` LOADAVG15_PRINT=`echo $LOADAVG|awk {'print $3'}` LOADAVG1=`echo $LOADAVG|awk {'print $1'}|awk -F "." {'print $1'}` if [ -z $LOADAVG1 ];then echo "Load_one UNKNOWN system Load_avg is:${LOADAVG1_PRINT},cpu_num:$CPU_NUM" exit $STATE_UNKNOWN elif [ $LOADAVG1 -lt $WARNING ];then echo "Load_one OK - Load_avg is :$LOADAVG1_PRINT(1min),$LOADAVG5_PRINT(5min),$LOADAVG15_PRINT(15min),cpu_num:$CPU_NUM" exit $STATE_OK elif [ $LOADAVG1 -ge $CRITICAL ];then echo "Load_one CRITICAL - Load_avg is :$LOADAVG1_PRINT(1min),$LOADAVG5_PRINT(5min),$LOADAVG15_PRINT(15min),cpu_num:$CPU_NUM" exit $STATE_CRITICAL elif [ $LOADAVG1 -ge $WARNING ];then echo "Load_one WARNING - Load_avg is :$LOADAVG1_PRINT(1min),$LOADAVG5_PRINT(5min),$LOADAVG15_PRINT(15min),cpu_num:$CPU_NUM" exit $STATE_WARNING fi } # From : 51niux.com ganglia_load_check(){ $PYDIR -h $IP -m load_one -w $WARNING -c $CRITICAL } # Parse parameters while [ $# -gt 0 ];do case "$1" in -w) if [ $3 = "-c" ];then WARNING=`echo "$2 * $CPU_NUM"|bc|awk -F "." {'print $1'}` CRITICAL=`echo "$4 * $CPU_NUM"|bc|awk -F "." {'print $1'}` if `expr $WARNING + 0 &>/dev/null` && `expr $CRITICAL + 0 &>/dev/null` ;then if [ `netstat -lntup|grep gmond|wc -l` -eq 0 ];then system_load_check elif [ `$PYDIR -h $IP -m load_one -w 0 -c 0|awk {'print $NF'}|grep -v "[a-z]"|wc -l` -eq 0 ];then system_load_check else ganglia_load_check fi else echo "The format is: ./$PROGNAME -w n1 -c n2,Threshold mast is num!" fi else echo "The format is: ./$PROGNAME -w n1 -c n2" fi exit ;; -v) if [ $4 = "-c" ];then if `expr $3 + 0 &>/dev/null` && `expr $5 + 0 &>/dev/null` ;then WARNING=$3 CRITICAL=$5 if [ `netstat -lntup|grep gmond|wc -l` -eq 0 ];then system_load_check elif [ `$PYDIR -h $IP -m load_one -w 0 -c 0|awk {'print $NF'}|grep -v "[a-z]"|wc -l` -eq 0 ];then system_load_check else ganglia_load_check fi else echo "The value mode format is: ./$PROGNAME -v -w n1 -c n2" fi else echo "The value mode format is :./$PROGNAME -v -w n1 -c n2" fi exit ;; -h|-help) print_help exit ;; *) echo "The default format is: ./$PROGNAME -w n1 -c n2" exit ;; esac done