Random Project

modifications for EMC Lenovo storcenter

Hi,

I modified some OID for best compatibility with EMC LENOVO StorCenter version.

Hope it helps!

**********************************************
#!/bin/bash
#################################################################################
# Script: check_storcenter #
# Author: Claudio Kuenzler www.claudiokuenzler.com #
# Description: Plugin for Nagios (and forks) to check an EMC/Iomega #
# Storcenter device with SNMP (v3). #
# License: GPLv2 #
# History: #
# 20111010 Created plugin (types: disk, raid, cpu, mem) #
# 20111011 Added info type #
# 20111013.0 Corrected uptime (but device returns strange value?) #
# 20111013.1 Corrected uptime (using hrSystemUptime.0 now) #
# 20111020 Disk type now doesnt return CRITICAL anymore if disks missing #
# 20111031 Using vqeU in mem type (if response comes with kB string) #
# 20120425 Add port as variable #
#################################################################################
# Usage: ./check_storcenter -H host -P port -U user -t type [-w warning] [-c critical]
#################################################################################
help=”check_storcenter (c) 2011 Claudio Kuenzler published under GPL license
nUsage: ./check_storcenterv2 -H host -P port -U user -p password -t type [-w warning] [-c critical]
nRequirements: snmpwalk, trn
nOptions: t-H hostnamentt-U user (to be defined in snmp settings on Storcenter)ntt-t Type to check, see list below
tt-P snmp portn
tt-w Warning Threshold (optional)ntt-c Critical Threshold (optional)n
nTypes: ttdisk -> Checks hard disks for their current status
ttraid -> Checks the RAID status
ttcpu -> Check current CPU load (thresholds possible)
tthrProcessorLoad -> Check current CPU Load with OID = hrProcessorLoad
ttmem -> Check current memory (RAM) utilization (thresholds possible)
ttinfo -> Outputs some general information of the device”

# Nagios exit codes and PATH
STATE_OK=0 # define the exit code if status is OK
STATE_WARNING=1 # define the exit code if status is Warning
STATE_CRITICAL=2 # define the exit code if status is Critical
STATE_UNKNOWN=3 # define the exit code if status is Unknown
PATH=$PATH:/usr/local/bin:/usr/bin:/bin # Set path

# If the following programs aren’t found, we don’t launch the plugin
for cmd in snmpwalk tr [
do
if ! `which ${cmd} 1>/dev/null`
then
echo “UNKNOWN: ${cmd} does not exist, please check if command exists and PATH is correct”
exit ${STATE_UNKNOWN}
fi
done
#################################################################################
# Check for people who need help – aren’t we all nice 😉
if [ “${1}” = “–help” -o “${#}” = “0” ];
then
echo -e “${help}”;
exit 1;
fi
#################################################################################
# Get user-given variables
while getopts “H:U:p:P:t:w:c:” Input;
do
case ${Input} in
H) host=${OPTARG};;
P) port=${OPTARG};;
U) user=${OPTARG};;
p) password=${OPTARG};;
t) type=${OPTARG};;
w) warning=${OPTARG};;
c) critical=${OPTARG};;
*) echo “Wrong option given. Please use options -H for host, -U for SNMP-User, -p for SNMP-Password, -P for port, -t for type, -w for warning and
-c for critical”
exit 1
;;
esac
done
#################################################################################
# Let’s check that thing
case ${type} in

# Disk Check
disk) disknames=($(snmpwalk -v 3 -u ${user} -l authNoPriv -a MD5 -A ${password} -O vqe ${host} ${port} .1.3.6.1.4.1.1139.10.4.3.1.2 | tr ‘ ‘ ‘-‘))
countdisks=${#disknames[*]}
diskstatus=($(snmpwalk -v 3 -u ${user} -l authNoPriv -a MD5 -A ${password} -O vqe ${host} ${port} .1.3.6.1.4.1.1139.10.4.3.1.4 | tr ‘”‘ ‘ ‘))
diskstatusok=0
diskstatusforeign=0
diskstatusfaulted=0
diskstatusmissing=0
disknumber=0

for status in ${diskstatus[@]}
do
if [ $status = “NORMAL” ]; then diskstatusok=$((diskstatusok + 1)); fi
if [ $status = “FOREIGN” ]; then diskstatusforeign=$((diskstatusforeign + 1)); diskproblem[${disknumber}]=${disknames[${disknumber}]}; fi
if [ $status = “FAULTED” ]; then diskstatusfaulted=$((diskstatusfaulted + 1)); diskproblem[${disknumber}]=${disknames[${disknumber}]}; fi
if [ $status = “MISSING” ]; then diskstatusmissing=$((diskstatusmissing + 1)); fi
let disknumber++
done

if [ $diskstatusforeign -gt 0 ] || [ $diskstatusfaulted -gt 0 ]
then echo “DISK CRITICAL – ${#diskproblem[@]} disk(s) failed (${diskproblem[@]})”; exit ${STATE_CRITICAL};
elif [ $diskstatusmissing -gt 0 ]
then echo “DISK OK – ${countdisks} disks found, ${diskstatusmissing} disks missing/empty”; exit ${STATE_OK}
else echo “DISK OK – ${countdisks} disks found, no problems”; exit ${STATE_OK}
fi
;;

# Raid Check
raid) raidstatus=$(snmpwalk -v 3 -u ${user} -l authNoPriv -a MD5 -A ${password} -O vqe ${host} ${port} .1.3.6.1.4.1.11369.10.4.1.0 | tr ‘”‘ ‘ ‘)
raidtype=$(snmpwalk -v 3 -u ${user} -l authNoPriv -a MD5 -A ${password} -O vqe ${host} ${port} .1.3.6.1.4.1.11369.10.4.2.0)

#echo ${raidstatus}
if [ $raidstatus = “REBUILDING” ] || [ $raidstatus = “DEGRADED” ] || [ $raidstatus = “REBUILDFS” ]
then echo “RAID WARNING – RAID$raidstatus”; exit ${STATE_WARNING}
elif [ $raidstatus = “FAULTED” ]
then echo “RAID CRITICAL – RAID$raidstatus”; exit ${STATE_CRITICAL}
else echo “RAID OK (Raid $raidtype)”; exit ${STATE_OK}
fi
;;

# CPU Load Old version with hrProcessorLoad
hrProcessorLoad) load=($(snmpwalk -v 3 -u ${user} -l authNoPriv -a MD5 -A ${password} -O vqe ${host} ${port} hrProcessorLoad))
load1=${load[0]}
if [ -n “${warning}” ] || [ -n “${critical}” ]
then
if [ ${load1} -ge ${warning} ] && [ ${load1} -lt ${critical} ]
then echo “CPU USAGE WARNING – Current load is ${load1}|load=${load1}”; exit ${STATE_WARNING}
elif [ ${load1} -ge ${warning} ] && [ ${load1} -ge ${critical} ]
then echo “CPU USAGE CRITICAL – Current load is ${load1}|load1=$load1”; exit ${STATE_CRITICAL}
else echo “CPU USAGE OK – Current load is ${load1}|load1=${load1}”; exit ${STATE_OK}
fi
else echo “CPU LOAD OK – Current load is ${load1}|load1=${load1}”; exit ${STATE_OK}
fi
;;

# CPU Load
cpu) load=($(snmpwalk -v 3 -u ${user} -l authNoPriv -a MD5 -A ${password} -O vqe ${host} ${port} .1.3.6.1.2.1.25.3.3.1.2.768))
load1=${load[0]}
load1int=$(echo $load1 | awk -F ‘.’ ‘{print $1}’)
load5=${load[1]}
load15=${load[2]}

if [ -n “${warning}” ] || [ -n “${critical}” ]
then
if [ ${load1int} -ge ${warning} ] && [ ${load1int} -lt ${critical} ]
then echo “CPU LOAD WARNING – Current load is ${load1}|load1=$load1;load5=$load5;load15=$load15”; exit ${STATE_WARNING}
elif [ ${load1int} -ge ${warning} ] && [ ${load1int} -ge ${critical} ]
then echo “CPU LOAD CRITICAL – Current load is ${load1}|load1=$load1;load5=$load5;load15=$load15”; exit ${STATE_CRITICAL}
else echo “CPU LOAD OK – Current load is ${load1}|load1=$load1;load5=$load5;load15=$load15”; exit ${STATE_OK}
fi
else echo “CPU LOAD OK – Current load is ${load1}|load1=$load1;load5=$load5;load15=$load15”; exit ${STATE_OK}
fi
;;

# Memory (RAM) usage
mem) memtotal=$(snmpwalk -v 3 -u ${user} -l authNoPriv -a MD5 -A ${password} -O vqeU ${host} .1.3.6.1.2.1.25.2.3.1.5.1)
memused=$(snmpwalk -v 3 -u ${user} -l authNoPriv -a MD5 -A ${password} -O vqeU ${host} .1.3.6.1.2.1.25.2.3.1.6.1)
memfree=$(( $memtotal – $memused))
memusedpercent=$(expr $memused * 100 / $memtotal)
memtotalperf=$(expr $memtotal * 1024)
memfreeperf=$(expr $memfree * 1024)
memusedperf=$(expr $memused * 1024)

if [ -n “${warning}” ] || [ -n “${critical}” ]
then
if [ ${memusedpercent} -ge ${warning} ] && [ ${memusedpercent} -lt ${critical} ]
then echo “MEMORY WARNING – Current memory usage is at $memusedpercent%|mem_total=$memtotalperf;mem_used=$memusedperf;mem_free=$memfreeperf”; exit
${STATE_WARNING}
elif [ ${memusedpercent} -ge ${warning} ] && [ ${memusedpercent} -ge ${critical} ]
then echo “MEMORY CRITICAL – Current memory usage is at $memusedpercent%|mem_total=$memtotalperf;mem_used=$memusedperf;mem_free=$memfreeperf”; exit
${STATE_CRITICAL}
else echo “MEMORY OK – Current memory usage is at $memusedpercent%|mem_total=$memtotalperf;mem_used=$memusedperf;mem_free=$memfreeperf”; exit
${STATE_OK}
fi
else echo “MEMORY OK – Current memory usage is at $memusedpercent%|mem_total=$memtotalperf;mem_used=$memusedperf;mem_free=$memfreeperf”; exit
${STATE_OK}
fi
;;

# General Information
info) uptime=$(snmpwalk -v 3 -u ${user} -l authNoPriv -a MD5 -A ${password} -O vqt ${host} ${port} .1.3.6.1.2.1.25.1.1.0)
hostname=$(snmpwalk -v 3 -u ${user} -l authNoPriv -a MD5 -A ${password} -O vqt ${host} ${port} .1.3.6.1.2.1.1.5.0)
description=$(snmpwalk -v 3 -u ${user} -l authNoPriv -a MD5 -A ${password} -O vqt ${host} ${port} .1.3.6.1.4.1.11369.10.1.1.0)
uptimed=$(expr $uptime / 100 / 60 / 60 / 24)

echo “${hostname} (${description}), Uptime: ${uptime} ($uptimed days)”; exit ${STATE_OK}

;;

esac

echo “Unknown error”; exit ${STATE_UNKNOWN}