Des petits scripts de supervision Nagios pour XtremIO, en attendant un set plus complet

English sum-up :
Here is my recently coded Nagios compatible XtremIO supervision scripts. These scripts are a first step to a complete set of monitoring scripts for the EMC AFA. A forthcoming v2 version will be out in few days/weeks.

Vous le savez sans doute si vous me suivez depuis quelques semaines déjà, nos sommes désormais en production sur nos deux AFA XtremIO. Afin de pouvoir effectuer une supervision de premier niveau (hardware principalement) sur ces machines, j’ai donc développé deux petits scripts shell, compatibles Nagios, permettant de checker régulièrement les baies à la recherche de problèmes hardwares éventuels. Je vous les livre en « version 1 » sachant que je vais travailler d’ici quelques jours sur une version 2 du kit de supervision disposant de scripts complémentaires pour afiner encore le monitoring.

Les deux scripts font appel à un fichier « include » où se trouvent les credentials et le hostname de la baie à interroger. Si vous avez plus d’une baie, il vous faudra dupliquer ces scripts avec des paramètres diffrents (en attendant la V2) :

#! /bin/bash

DEBUG=no
ARRAY=fqdn.tld.com
USERNAME=admin
PASSWORD=***AdminPWD***

xio_getxml() {
        if [ "$DEBUG" = "yes" ]; then
                echo "ARRAY=${ARRAY}"
                echo "USERNAME=${USERNAME}"
                echo "PASSWORD=${PASSWORD}"
                echo "REQ=${1}"
                echo "curl -sk \"https://${USERNAME}:${PASSWORD}@${ARRAY}/api/json/${1}\""
        fi

        curl -sk "https://${USERNAME}:${PASSWORD}@${ARRAY}/api/json/${1}"
        }

Le premier script s’occupe de checker l’ensemble des composants hardwares de chaque contrôleur. Si un (ou plusieurs) composants sont défaillants, le script renvoie la liste des composants en question et leur niveau d’alerte :

#! /bin/bash
#

if [ "$0" = "basename $0" ]; then
        INC="./xtremio_include.sh"
else
        REP=`dirname $0`
        INC=$REP/xtremio_include.sh
fi
. $INC

if [ "$1" = "" ]; then
        echo "USAGE : $0 "
        echo "ctrlnum : numero du controleur a interroger"
        echo
        echo "Renvoie l'etat general hardware du controleur specifie, au format de sortie NAGIOS"
        exit 3
fi

# test numerique pour argument ctrlnum
CTRLNUM=$(( $1 + 1 - 1))
if [ $CTRLNUM -eq 0 ]; then
        echo "Argument ctrlnum invalide, valeurs numeriques uniquement... 1, 2, 3 etc. ..."
        exit 3
fi

# Check des controleurs. Il y a de base 11 indicateurs d'etat dans le retour de la commande "types/storage-controllers/x"
# on les check un par un ...

RC=0
STR=""
CHECKLIST="dimm-health-state sas1-hba-port-health-level current-health-state internal-sensor-health-state temperature-health-state ib2-link-health-level sas2-hba-port-health-level ib1-link-health-level fan-health-state voltage-health-state mgmt-link-health-level"

for check in $CHECKLIST; do
        VAL=`xio_getxml types/storage-controllers/${CTRLNUM} | grep "${check}" | awk '{ print $2 }' | tr -d "\",:"`

        if [ "$VAL" != "level_1_clear" ]; then
                STR="$STR ${check}=${VAL}"
                if [ "$VAL" = "level_4_minor" ]; then
                        RC=1
                else
                        RC=2
                fi
        fi
done

if [ $RC -eq 0 ]; then
        RCSTR="Controleur $CTRLNUM OK. Aucune erreur hardware"
else
        RCSTR="Erreur(s) CTRL $CTRLNUM : $STR"
fi

echo -n $RCSTR
exit $RC

Rappelez-vous que le script renvoie une sortie « au format NAGIOS », c’est à dire une seule ligne de texte et un return code correspondant au niveau de criticité global du check : 0 = tout va bien, 1 = certains composants sont en warning, 2 = certains composants sont en erreur, 3 = état inconnu. Pour superviser un XBrick complet, vous devez créer deux check sous Nagios, un pour chaque contrôleur. Par défaut avec 1 XBrick, vous disposez de deux contrôleurs numérotés 1 et 2. S’il y a 2 XBricks, vous avez quatres contrôleurs 1,2,3,4 etc. …

Le second script s’occupe de vérifier l’état des groupes de protections XDP (les « paquets » de 20 SSD de vos XBricks) :

#! /bin/bash
#

if [ "$0" = "basename $0" ]; then
        INC="./xtremio_include.sh"
else
        REP=`dirname $0`
        INC=$REP/xtremio_include.sh
fi
. $INC

if [ "$1" = "" ]; then
        echo "USAGE : $0 "
        echo "dpgnum : numero du data protection group XDP a tester"
        echo
        echo "Renvoie l'etat general de l'ensemble XDP specifie, au format de sortie NAGIOS"
        exit 3
fi

# test numerique pour argument ctrlnum
DPGNUM=$(( $1 + 1 - 1 ))
if [ $DPGNUM -eq 0 ]; then
        echo "Argument dpgnum invalide, valeurs numeriques uniquement... 1, 2, 3 etc. ..."
        exit 3
fi

SEV=`xio_getxml types/data-protection-groups/${DPGNUM} | grep obj-severity | awk '{ print $2 }' | tr -d "\":," `
echo $SEV | grep "information" >/dev/null

if [ $? -eq 0 ]; then
        RCSTR="Data protection group $DPGNUM OK, mode nomminal"
        RC=0
else

        RCSTR="Severite du DPG : $SEV, check XMS !"
        RC=2
fi

echo -n $RCSTR
exit $RC

Comme pour les contrôleurs, si vous n’avez qu’un XBrick, vous n’avez donc qu’un seul groupe de protection numéroté « 1 ». Si vous disposez de 2 XBricks, vous avez deux groupes de protection 1 et 2 etc. …

J’espère que ces petits bouts de code vous aiderons à démarrer une activité de supervision de premier niveau sur vos XtremIO.

Merci pour vos retours éventuels !