Date created: Monday, April 29, 2013 2:58:17 PM. Last modified: Tuesday, April 30, 2013 11:29:44 AM
Check Dell RAID, Disks and Battery via SNMP
Check RAID state, virual disk state and physical disk state, and RAID battery backup unit health, via two bash scritps. Set up to be checked via SNMP and return OK or FAULT + fault desctription, when there is a problem.
These can be checked via nagios with check_snmp using `check_snmp -o .1.3.6.1.4.1.8072.1.3.2.3.1.2.8.99.104.101.99.107.98.98.117 -C c0mMunITY -P 2c -r OK` and `check_snmp -o .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.99.104.101.99.107.114.97.105.100 -C c0mMunITY -P 2c -r OK`
Add two extend options to /etc/snmp/snmpd.conf (don't forget to restart snmpd!)
extend checkbbu /usr/scripts/checkbbu.sh extend checkraid /usr/scripts/checkraid.sh
Add MegaCLI and omreport to the sudoers file for the snmpd user `snmp`;
# Cmnd alias specification Cmnd_Alias MCLI = /opt/MegaRAID/MegaCli/MegaCli Cmnd_Alias OMREPORT = /usr/sbin/omreport # User privilege specification snmp ALL=MCLI, OMREPORT, NOPASSWD: MCLI, OMREPORT
Add the two scripts for check on RAID disks and battery below; In each script you can enable either omreport or MegaCLI functionality depending on which you have installed (or both!).
Script for checking raid battery via omreport and/or MegaCLI, checkbbu.sh
#!/bin/bash
fault="No"
# Use omreport output for RAID testing
omenable=1
omreport=/usr/sbin/omreport
# Use MegaCLI for RAID testing
megaenable=1
megacli=/opt/MegaRAID/MegaCli/MegaCli
sudo=/usr/bin/sudo
if [ $omenable -eq 1 ]
then
for status in $($sudo $omreport storage battery | grep Status | grep -v "Capacity Status" | awk '{print $NF}')
do
if [ "$status" != "Ok" ]
then
fault="Battery has status: $status"
fi
done
for state in $($sudo $omreport storage battery | grep State | grep -v "Learn State" | awk '{print $NF}')
do
if [ "$state" != "Ready" ]
then
fault="Battery has state: $status"
fi
done
fi
if [ $megaenable -eq 1 ]
then
output=/tmp/$RANDOM
/usr/bin/sudo /opt/MegaRAID/MegaCli/MegaCli -AdpBbuCmd -aALL > $output
# Battery Replacement required : No
batreplace=$(grep "Battery Replacement required" $output | awk '{print $5}')
# Pack is about to fail & should be replaced : No
batabout=$(grep "Pack is about to fail & should be replaced" $output | awk '{print $11}')
# Remaining Time Alarm : No
battime=$(grep "Remaining Time Alarm" $output | awk '{print $5}')
# Remaining Capacity Alarm: No
batcapac=$(grep -m 1 "Remaining Capacity Alarm" $output | awk '{print $4}')
if [ "$batreplace" != "No" ] || [ "$batabout" != "No" ] || [ "$battime" != "No" ] || [ "$batcapac" != "No" ] ; then
fault="Battery Replacement required: $batreplace, Pack is about to fail and should be replaced: $batabout, Remaining Time Alarm: $battime, Remaining Capacity Alarm: $batcapac"
fi
rm $output
fi
if [ "$fault" != "No" ]
then
echo -n "FAULT: $fault"
else
echo -n "OK"
fi
Script for check RAID virtual disk state and physical disks via omreport and/or MegaCLI, checkraid.sh
#!/bin/bash
fault="No"
# Use omreport output for RAID testing
omenable=1
omreport=/usr/sbin/omreport
# Use MegaCLI for RAID testing
megaenable=1
megacli=/opt/MegaRAID/MegaCli/MegaCli
sudo=/usr/bin/sudo
if [ $omenable -eq 1 ]
then
for state in $($sudo $omreport storage pdisk controller=0 | grep State | awk '{print $NF}')
do
if [ "$state" != "Online" ] && [ "$state" != "Ready" ]
then
fault="Physical disk has state: $state"
fi
done
for failure in $($sudo $omreport storage pdisk controller=0 | grep Failure | awk '{print $NF}')
do
if [ "$failure" != "No" ]
then
fault="Physical disk failure predicted: $failure"
fi
done
for state in $($sudo $omreport storage vdisk | grep State | awk '{print $NF}')
do
if [ "$state" != "Ready" ]
then
fault="Virtual disk has state: $state"
fi
done
fi
if [ $megaenable -eq 1 ]
then
for status in $($sudo $megacli -LdPdInfo -aALL | grep S.M.A.R.T | awk '{print $NF}')
do
if [ "$status" != "No" ]
then
fault="Drive has flagged a S.M.A.R.T alert: $status"
fi
done
for state in $($sudo $megacli -LdPdInfo -aALL | grep -m 1 State | awk '{print $NF}')
do
if [ "$state" != "Optimal" ]
then
fault="Virtual Disk State: $state"
fi
done
fi
if [ "$fault" != "No" ]
then
echo -n "FAULT: $fault"
else
echo -n "OK"
fi
Previous page: Kubernetes
Next page: Dell OMSA on Linux