IT & + si affinités

Encore un blog de sysadmin … mais pas uniquement ;-)

Ajout des perfdata au plugin check_procs de Nagios

Le plugin original check_proc de de Nagios ne fournit pas de données de performances utilisables par pnp pour générer des graphs, il existe un patch à appliquer au sources, mais il faut du coup recompiler le plugin.

Pour éviter cela, voici un petit script intermédiaire qu’il suffit d’appeler à la place de check_procs :

 

#!/bin/bash

proc_status=`/usr/lib/nagios/plugins/check_procs -w $2 -c $4`
code=$?

perfdata="processus="`echo $proc_status |cut -f 3 -d " "`";"

echo $proc_status"|"$perfdata
exit $code

 

 

Script Nagios de monitoring SNMP de cartes MegaRaid

Pour continuer dans le monitoring du raid des cartes LSI MegaRaid, voici un autre script plus ancien qui permet de vérifier l’état du raid par requête SNMP et renvoi un code et un message utilisable par Nagios.

 

#!/bin/bash

##################################################################
# Creation: @Markhor75
# Last Modification: 2011/11/28
# This script check snmp status of LSI RAID cards
##################################################################

export name=`basename "$0"`

case "$1" in
   "-h"|"")
   echo "Usage:"
   echo "    $name -h                      Show this help."
   echo "    $name ip address or name"
   echo "    exemple : $name server.lan"
   exit
  ;;
esac

ip=$1
media_error=0
degraded_drives=0
general_statut=0
detail=""

nb_total_expected_disk=0        #total expected disk number
nb_disk=$(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::pdDiskPresentCount.0 | cut --delimiter=" " -f2) #physicaly presents disks
nb_array=$(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::vdPresentCount.0 | cut --delimiter=" " -f2) #array number
nb_spare=$(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::spareDevNumber.0  | cut --delimiter=" " -f9) #number of spare disks

function check_array {
        local statut
        state=$(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::state.$1 | cut --delimiter=" " -f2)

        case "$state" in
           "3")
                statut="0"                      #OK
                ;;
           "0"|"1")
                statut="2"                      #WARNING
                if [ $general_statut -lt 2 ]
                        then general_statut=2
                fi
                ;;
           "2")
                statut="2"                      #CRITICAL
                if [ $general_statut -lt 3 ]
                        then general_statut=3
                fi
                ;;
           *) statut="1"                        #UNKNOWN
                if [ $general_statut -lt 1 ]
                        then general_statut=1
                fi
                ;;

        esac

        nb_disk_array=$(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::arrayNumDrives.$1 | cut --delimiter=" " -f2)

        nb_total_expected_disk=$(( nb_total_expected_disk + nb_disk_array ))

        raid_type=$raid_type"/"$(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::prl.$1 | cut --delimiter=" " -f2)

        size=$size"/"$(( $(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::size.$1 | cut --delimiter=" " -f2) / 1024 ))

        }

j=0;
while [ $j -lt $nb_array ]
do
        state=$(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::state.$j | cut --delimiter=" " -f2)
        check_array $j
        let j=j+1
done

for i in `seq 0 $(($nb_disk - 1 ))`; #for each present disk
        do
        if [ $general_statut -ne 0 ] #if general status is not OK
        then
                 # get disk state and (if needed) running operations
                 disk_state[$i]=$(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::pdState.$i | cut --delimiter=" " -f2)

                 case "${disk_state[$i]}" in
                        "0"|"2"|"24")   #OK
                        ;;

                        "1"|"20")
                        detail=$detail$(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::operationProgress.$i  | cut --delimiter=" " -f2-)
                        ;;

                        "16"|"17")
                        detail=$detail$(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::operationProgress.$i  | cut --delimiter=" " -f2-)
                        ;;
                 esac

        else
                #get minor errors
                (( media_error+=$(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::mediaErrCount.$i | cut --delimiter=" " -f2) ))
                (( media_error+=$(snmpget -v2c -O v -c public $ip LSI-MegaRAID-SAS-MIB::otherErrCount.$i | cut --delimiter=" " -f2) ))

                #if have this kind of error, we change global state
                if (( media_error != 0 ))
                then
                        general_statut="2"
                        detail='(Errors: '$media_error')'
                fi

         fi
done

#Removing suplus slash in the begining
raid_type=${raid_type:1}
size=${size:1}

#optimal_drives=$(( nb_total_expected_disk - nb_disk ))

detail_config="R:$raid_type S:$size Go Optimal Drives $nb_disk/$nb_total_expected_disk"
if [ $nb_spare -gt 0 ]
        then detail_config=$detail_config"(+"$nb_spare")"
fi
detail_config=$detail_config" "$detail

case "$general_statut" in
        "0")
        echo "OK: "$detail_config
        exit 0
        ;;

        "2")
        echo "WARNING: "$detail_config
        exit 1
        ;;

        "3")
        echo "CRITICAL: "$detail_config
        exit 2
        ;;

        "1"|*)
        echo "WARNING: Unknown state"
        exit 3
        ;;
esac