Date created: 04/29/13 14:58:17. Last modified: 04/30/13 11:29:44

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: Kickstart Example
Next page: Dell OMSA on Linux