#!/bin/bash ## # # receive statusinfo from Netgear ReadyNAS 2100 for Nagios # # you can get all snmp-options with: # snmpwalk -m ALL -v 2c -c MYCOMMUNITY MYIPADDRESS .1.3.6.1.4.1.4526 # # # Usage: # ./check_readynas IP-ADDRESS SNMP-COMMUNITY STATUSCHECK # # # 2010-07-19: initial Version \\ Jan Toenjes # 2011-07-06: updated version for new firmware release # \\ Jan Toenjes # \\ Oliver Bertrand # ## # temperature values for warning or critical / hdd (from datasheet) MAXDISKTEMPCRIT="45" MINDISKTEMPCRIT="5" MAXDISKTEMPWARN="39" MINDISKTEMPWARN="15" # unused systemtemperature values for warning or critical / (from webinterface) MAXSYSTEMPCRIT="65" MINSYSTEMPCRIT="0" MAXSYSTEMPWARN="55" MINSYSTEMPWARN="10" # nagios return values export STATE_OK=0 export STATE_WARNING=1 export STATE_CRITICAL=2 export STATE_UNKNOWN=3 export STATE_DEPENDENT=4 # check disk temperature for warning or critical values function checkDiskTemperature () { if [ $1 -gt "$MAXDISKTEMPWARN" ]; then returnValue=$STATE_WARNING ; fi if [ $1 -gt "$MAXDISKTEMPCRIT" ]; then returnValue=$STATE_CRITICAL ; fi if [ $1 -lt "$MINDISKTEMPWARN" ]; then returnValue=$STATE_WARNING ; fi if [ $1 -lt "$MINDISKTEMPCRIT" ]; then returnValue=$STATE_CRITICAL ; fi return $returnValue } # check third parameter and return the information case "$3" in disk1status) DSK1=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.3.1.3.1 | sed 's/.*ING: " //g' | sed 's/"//g') DSK1STAT=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.3.1.4.1 | sed 's/.*ING: "//g' | sed 's/"//g') if [ $DSK1STAT == "ok" ]; then intReturn=$STATE_OK else intReturn=$STATE_WARNING fi outMessage="Disk1: $DSK1 - $DSK1STAT" ;; disk2status) DSK2=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.3.1.3.2 | sed 's/.*ING: " //g' | sed 's/"//g') DSK2STAT=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.3.1.4.2 | sed 's/.*ING: "//g' | sed 's/"//g') if [ $DSK2STAT == "ok" ]; then intReturn=$STATE_OK else intReturn=$STATE_WARNING fi outMessage="Disk2: $DSK2 - $DSK2STAT" ;; disk3status) DSK3=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.3.1.3.3 | sed 's/.*ING: " //g' | sed 's/"//g') DSK3STAT=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.3.1.4.3 | sed 's/.*ING: "//g' | sed 's/"//g') if [ $DSK3STAT == "ok" ]; then intReturn=$STATE_OK else intReturn=$STATE_WARNING fi outMessage="Disk3: $DSK3 - $DSK3STAT" ;; disk4status) DSK4=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.3.1.3.4 | sed 's/.*ING: " //g' | sed 's/"//g') DSK4STAT=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.3.1.4.4 | sed 's/.*ING: "//g' | sed 's/"//g') if [ $DSK4STAT == "ok" ]; then intReturn=$STATE_OK else intReturn=$STATE_WARNING fi outMessage="Disk4: $DSK4 - $DSK4STAT" ;; disk1temp) DSK1TEMP=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.3.1.5.1 | cut -c 42-43) checkDiskTemperature $DSK1TEMP intReturn=$? outMessage="Disk1: $DSK1TEMP Grad | DiskTemp1 $DSK1TEMP Grad" ; ;; disk2temp) DSK2TEMP=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.3.1.5.2 | cut -c 42-43) checkDiskTemperature $DSK2TEMP intReturn=$? outMessage="Disk2: $DSK2TEMP Grad | DiskTemp2 $DSK2TEMP Grad" ; ;; disk3temp) DSK3TEMP=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.3.1.5.3 | cut -c 42-43) checkDiskTemperature $DSK3TEMP intReturn=$? outMessage="Disk3: $DSK3TEMP Grad | DiskTemp3 $DSK3TEMP Grad" ; ;; disk4temp) DSK4TEMP=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.3.1.5.4 | cut -c 42-43) checkDiskTemperature $DSK4TEMP intReturn=$? outMessage="Disk4: $DSK4TEMP Grad | DiskTemp4 $DSK4TEMP Grad $intReturn" ; ;; fan1) FAN1=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.4.1.2.1 | awk '{print $4}') intReturn=$STATE_OK outMessage="Fan1: $FAN1 U/min | fan1 $FAN1" ;; fan2) FAN2=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.4.1.2.2 | awk '{print $4}') intReturn=$STATE_OK outMessage="Fan2: $FAN2 | fan2 $FAN2" ;; systemp) SYSTEMP=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.5.1.2.1 | awk '{print $4}') SYSTEMPOK=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.5.1.3.1 | sed 's/.*ING: "//g' | sed 's/"//g') if [ $SYSTEMPOK == "ok" ]; then intReturn=$STATE_OK else intReturn=$STATE_WARNING fi outMessage="System Temperatur: $SYSTEMP - $SYSTEMPOK" ;; raidstatus) RAID=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.7.1.3.1 | sed 's/.*ING: " //g' | sed 's/"//g') RAIDSTAT=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.7.1.4.1 | sed 's/.*ING: "//g' | sed 's/"//g') if [ $RAIDSTAT == "ok" ]; then intReturn=$STATE_OK else intReturn=$STATE_WARNING fi outMessage="RAID: $RAID - $RAIDSTAT" ;; capacity) capacity=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.7.1.5.1 | awk '{print $4}') intReturn=$STATE_OK GB=$(echo "scale=2; $capacity/1024" | bc) outMessage="Capacity: $GB GB | capacity $GB" ;; freespace) SPACE=$(snmpget $1 -v2c -c $2 .1.3.6.1.4.1.4526.18.7.1.6.1 | awk '{print $4}') intReturn=$STATE_OK GB=$(echo "scale=2; $SPACE/1024" | bc) outMessage="Free Space: $GB GB | free $GB" ;; *) intReturn=$STATE_OK outMessage=" Usage: $0 IPADDRESS SNMPCOMMUNITY STATUS \n \n Available statuses are: \n\n disk1status|disk2status|disk3status|disk4status \n disk1temp|disk2temp|disk3temp|disk4temp \n fan1|fan2 \n systemp \n raidstatus \n freespace \n capacity" ;; esac echo -e $outMessage exit $intReturn