====== check_apcpowerstrip.sh ======
===== Intro =====
This plugin checks the load on APC powerstrips and alerts on over current conditions. It can test both single and A/B bank strips.
{{:nagios:apc-powerstrip1.png?600 |}}
===== Command definition =====
define command{
command_name check_apcpowerstrip
command_line /usr/lib/nagios/plugins/check_apcpowerstrip.sh '$HOSTADDRESS$' '$ARG1$' '$ARG2$'
}
===== Check definition =====
#APC PDU load
define service{
use generic-service
host_name pdu-l, pdu-r
service_description APC PDU Load Total
check_command check_apcpowerstrip!YourSNMPcommunityString
}
===== check_apc.sh code =====
#!/bin/bash
#Written Andrew Stringer, 31/10/2013
#Purpose is to test power usage on smart power strips
#See http://www.oidview.com/mibs/318/PowerNet-MIB.html
#OID's of use for multi bank PDU
#.1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1 <- Multi-Bank Total Load (divide by 10)
#.1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.2 <- Multi-Bank B1 Load (divide by 10)
#.1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.3 <- Multi-Bank B2 Load (divide by 10)
#.1.3.6.1.4.1.318.1.1.12.2.4.1.1.2.1 <- Multi-Bank B1 Low Load Warning Threshold
#.1.3.6.1.4.1.318.1.1.12.2.4.1.1.2.2 <- Multi-Bank B2 Low Load Warning Threshold
#.1.3.6.1.4.1.318.1.1.12.2.2.1.1.2.1 <- Multi-Bank Total Low Load Warning Threshold
#.1.3.6.1.4.1.318.1.1.12.2.4.1.1.3.1 <- Multi-Bank B1 Near Overload Warning Threshold
#.1.3.6.1.4.1.318.1.1.12.2.4.1.1.3.2 <- Multi-Bank B2 Near Overload Warning Threshold
#.1.3.6.1.4.1.318.1.1.12.2.2.1.1.3.1 <- Multi-Bank Total Near Overload Warning Threshold
#.1.3.6.1.4.1.318.1.1.12.2.4.1.1.4.1 <- Multi-Bank B1 Overload Alarm Threshold
#.1.3.6.1.4.1.318.1.1.12.2.4.1.1.4.2 <- Multi-Bank B2 Overload Alarm Threshold
#.1.3.6.1.4.1.318.1.1.12.2.2.1.1.4.1 <- Multi-Bank Total Overload Alarm Threshold
#Single Bank OID
#.1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1 <- Single-Bank Total Load (divide by 10)
#.1.3.6.1.4.1.318.1.1.12.2.2.1.1.2.1 <- Single-Bank Low Load Warning Threshold
#.1.3.6.1.4.1.318.1.1.12.2.2.1.1.3.1 <- Single-Bank Near Overload Warning Threshold
#.1.3.6.1.4.1.318.1.1.12.2.2.1.1.4.1 <- Single-Bank Overload Alarm Threshold
#.1.3.6.1.4.1.318.1.1.12.1.5.0 = PDU Model number, dual AP8953, single AP7954
#Print out command line options
usage() { echo "Usage:- check_apcpowerstrip.sh (for multi bank PDU only)" 1>&2; exit 1; }
#Check we have some arguments passed
if [ -z "$1" ] ; then
usage
exit 4
fi
HOSTNAME=$1
COMMSTRING=$2
#Only for multibank powerstrip
BANK=$3
SNMPGET=/usr/bin/snmpget
MODEL=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.1.5.0 | cut -d: -f4 | cut -d" " -f2 | sed 's/^\"\(.*\)\"$/\1/' `
#echo ${MODEL}
if [ -z "${MODEL}" ]; then
echo "UNKNOWN - An error has occurred communicating with the PDU."
exit 3
fi
if [ ${MODEL} == "AP7951" ] || [ ${MODEL} == "AP7954" ]
then
TYPE='SINGLEBANK'
TOTALLOADRAW=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.2.3.1.1.2.1 | cut -d: -f4 | cut -d" " -f2 `
TOTALLOAD=`echo "scale = 2; $TOTALLOADRAW / 10" | bc -l`
WARNINGTHRESHOLD=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.2.2.1.1.3.1 | cut -d: -f4 | cut -d" " -f2 `
CRITICALTHRESHOLD=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.2.2.1.1.4.1 | cut -d: -f4 | cut -d" " -f2 `
#echo "TLr=${TOTALLOADRAW}, TL=${TOTALLOAD}, w=${WARNINGTHRESHOLD}, c=${CRITICALTHRESHOLD} "
if [[ "$TOTALLOADRAW" -lt $(($WARNINGTHRESHOLD * 10)) ]]; then
echo "OK - ${MODEL}, Total Load is ${TOTALLOAD}A."
exit 0
elif [[ "$TOTALLOADRAW" -le $(($CRITICALTHRESHOLD * 10 )) ]]; then
echo "WARNING - ${MODEL}, Total Load is ${TOTALLOAD}A, warning is ${WARNINGTHRESHOLD}A."
exit 1
elif [[ "$TOTALLOADRAW" -ge $(($CRITICALTHRESHOLD * 10 )) ]]; then
echo "CRITICAL - ${MODEL}, Total Load is ${TOTALLOAD}A, critical is ${CRITICALTHRESHOLD}A."
exit 2
else
echo "UNKNOWN - Total Load is not known."
exit 3
fi
elif [ ${MODEL} == "AP7922" ] || [ ${MODEL} == "AP8953" ]
then
TYPE='DUALBANK'
case ${BANK} in
B1|b1)
#Bank B1 load
BANK1LOADRAW=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.2.3.1.1.2.2 | cut -d: -f4 | cut -d" " -f2 `
BANK1LOAD=`echo "scale = 2; $BANK1LOADRAW / 10" | bc -l`
B1WARNINGTHRESHOLD=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.2.4.1.1.3.1 | cut -d: -f4 | cut -d" " -f2 `
B1CRITICALTHRESHOLD=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.2.4.1.1.4.1 | cut -d: -f4 | cut -d" " -f2 `
#echo "TLAr=${BANK1LOADRAW}, TL=${BANK1LOAD}, w=${B1WARNINGTHRESHOLD}, c=${B1CRITICALTHRESHOLD} "
if [[ "$BANK1LOADRAW" -lt $(($B1WARNINGTHRESHOLD * 10)) ]]; then
echo "OK - ${MODEL}, Bank B1 load is ${BANK1LOAD}A."
exit 0
elif [[ "$BANK1LOADRAW" -le $(($B1CRITICALTHRESHOLD * 10 )) ]]; then
echo "WARNING - ${MODEL}, Bank B1 load is ${BANK1LOAD}A, warning is ${B1WARNINGTHRESHOLD}A."
exit 1
elif [[ "$BANK1LOADRAW" -ge $(($B1CRITICALTHRESHOLD * 10 )) ]]; then
echo "CRITICAL - ${MODEL}, Bank B1 load is ${BANK1LOAD}A, critical is ${B1CRITICALTHRESHOLD}A."
exit 2
else
echo "UNKNOWN - Bank B1 load is not known."
exit 3
fi
#end of bank B1 case
;;
B2|b2)
#Bank B2 load
BANK2LOADRAW=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.2.3.1.1.2.3 | cut -d: -f4 | cut -d" " -f2 `
BANK2LOAD=`echo "scale = 2; $BANK2LOADRAW / 10" | bc -l`
B2WARNINGTHRESHOLD=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.2.4.1.1.3.2 | cut -d: -f4 | cut -d" " -f2 `
B2CRITICALTHRESHOLD=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.2.4.1.1.4.2 | cut -d: -f4 | cut -d" " -f2 `
#echo "TLAr=${BANK2LOADRAW}, TL=${BANK2LOAD}, w=${B2WARNINGTHRESHOLD}, c=${B2CRITICALTHRESHOLD} "
if [[ "$BANK2LOADRAW" -lt $(($B2WARNINGTHRESHOLD * 10)) ]]; then
echo "OK - ${MODEL}, Bank B2 load is ${BANK2LOAD}A."
exit 0
elif [[ "$BANK2LOADRAW" -le $(($B2CRITICALTHRESHOLD * 10 )) ]]; then
echo "WARNING - ${MODEL}, Bank B2 load is ${BANK2LOAD}A, warning is ${B2WARNINGTHRESHOLD}A."
exit 1
elif [[ "$BANK2LOADRAW" -ge $(($B2CRITICALTHRESHOLD * 10 )) ]]; then
echo "CRITICAL - ${MODEL}, Bank B2 load is ${BANK2LOAD}A, critical is ${B2CRITICALTHRESHOLD}A."
exit 2
else
echo "UNKNOWN - Bank B2 load is not known."
exit 3
fi
#end of bank B2 case
;;
*)
#Total A+B load
TOTALLOADRAW=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.2.3.1.1.2.1 | cut -d: -f4 | cut -d" " -f2 `
TOTALLOAD=`echo "scale = 2; $TOTALLOADRAW / 10" | bc -l`
WARNINGTHRESHOLD=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.2.2.1.1.3.1 | cut -d: -f4 | cut -d" " -f2 `
CRITICALTHRESHOLD=`${SNMPGET} -v1 -c ${COMMSTRING} ${HOSTNAME} SNMPv2-SMI::enterprises.318.1.1.12.2.2.1.1.4.1 | cut -d: -f4 | cut -d" " -f2 `
#echo "TLr=${TOTALLOADRAW}, TL=${TOTALLOAD}, w=${WARNINGTHRESHOLD}, c=${CRITICALTHRESHOLD} "
if [[ "$TOTALLOADRAW" -lt $(($WARNINGTHRESHOLD * 10)) ]]; then
echo "OK - ${MODEL}, Total Load is ${TOTALLOAD}A."
exit 0
elif [[ "$TOTALLOADRAW" -le $(($CRITICALTHRESHOLD * 10 )) ]]; then
echo "WARNING - ${MODEL}, Total Load is ${TOTALLOAD}A, warning is ${WARNINGTHRESHOLD}A."
exit 1
elif [[ "$TOTALLOADRAW" -ge $(($CRITICALTHRESHOLD * 10 )) ]]; then
echo "CRITICAL - ${MODEL}, Total Load is ${TOTALLOAD}A, critical is ${CRITICALTHRESHOLD}A."
exit 2
else
echo "UNKNOWN - Total Load is not known."
exit 3
fi
;;
#end of case statement
esac
else
echo "No Match for PDU found."
TYPE='UNKNOWN'
exit 3
fi
echo ${TYPE}
exit 0