Voici un script permettant la supervision des CIFS d'un NAS EMC type NS 40 G. Les propriétés des CIFS ne sont pas accessibles avec les plugins standard de Nagios. Nous devons créer nous-mêmes ces outils. La solution choisie est la création d'un script BASH utilisant la commande nas_fs, nous utiliserons pour cela la Control Station du NAS. Ce script sera exécuté à distance via le plugin check_by_ssh.
1 Création du plugin check_cifs_size
Il faut créer le script dans la Control Station du NAS. Voici le code :
#!/bin/bash # réalisé le 26/02/2013 # script pour retourner la taille des CIFS des NAS EMC # Version : 1 # inspiré du script de Yoann LAMY http://www.be-root.com # variable d'environement pour la commande nas_quota # très important pour la commande check_by_ssh NAS_DB=/nas export NAS_DB # Commands CMD_BASENAME="/bin/basename" CMD_EXPR="/usr/bin/expr" CMD_BC="/usr/bin/bc" CMD_NAS="/nas/bin/nas_fs" # Script name SCRIPTNAME=`$CMD_BASENAME $0` # Version VERSION="1.0" # Plugin return codes STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 # Default variables DESCRIPTION="Unknown" INFO="Unknown" STATE=$STATE_UNKNOWN CODE=0 # Default options DISK="" WARNING=0 CRITICAL=0 # Option processing print_usage() { echo "Usage: ./check_cifs_size -d NAME_CIFS -w 80 -c 90" echo " $SCRIPTNAME -d STRING" echo " $SCRIPTNAME -w INTEGER" echo " $SCRIPTNAME -c INTEGER" echo " $SCRIPTNAME -h" echo " $SCRIPTNAME -V" } print_version() { echo $SCRIPTNAME version $VERSION echo "" echo "This nagios plugins comes with ABSOLUTELY NO WARRANTY." echo "You may redistribute copies of the plugins under the terms of the GNU General Public License v2." } print_help() { print_version echo "" print_usage echo "" echo "Check the CIFS size of NAS EMC" echo "" echo "-d STRING" echo " Name of CIFS" echo "-w INTEGER" echo " Warning level for size in percent (default: 0)" echo "-c INTEGER" echo " Critical level for size in percent (default: 0)" echo "-h" echo " Print this help screen" echo "-V" echo " Print version and license information" echo "" echo "" echo "This plugin uses the 'nas_fs' command included with the NAS EMC." echo "This plugin support performance data output." echo "If the percentage of the warning and critical levels are set 0, then the script returns a OK state." } size_convert() { if [ $VALUE -ge 1099511627776 ]; then VALUE=`echo "scale=2 ; ( ( ( $VALUE / 1024 ) / 1024 ) / 1024 ) / 1024" | $CMD_BC` VALUE="$VALUE To" elif [ $VALUE -ge 1073741824 ]; then VALUE=`echo "scale=2 ; ( ( $VALUE / 1024 ) / 1024 ) / 1024" | $CMD_BC` VALUE="$VALUE Go" elif [ $VALUE -ge 1048576 ]; then VALUE=`echo "scale=2 ; ( $VALUE / 1024 ) / 1024" | $CMD_BC` VALUE="$VALUE Mo" else VALUE=`echo "scale=2 ; $VALUE / 1024" | $CMD_BC` VALUE="$VALUE Octets" fi } while getopts d:w:c:hV OPT do case $OPT in d) DISK="$OPTARG" ;; w) WARNING=$OPTARG ;; c) CRITICAL=$OPTARG ;; h) print_help exit $STATE_UNKNOWN ;; V) print_version exit $STATE_UNKNOWN ;; esac done shift $(($OPTIND - 1)) if [[ $DISK = "" ]]; then DESCRIPTION="CIFS $INFO - CIFS non défini" else /nas/bin/nas_fs -size $DISK | cut -d " " -f 3,6,9 > cifssize$1.temp while read line; do if [[ $line = "$DISK id" ]]; then STATE=$STATE_CRITICAL INFO="CRITICAL" DESCRIPTION="CIFS $INFO - erreur name CIFS : $DISK" break elif [[ $line != "= in blockcount" ]]; then #echo $line tailTotal=`echo $line | cut -d " " -f1` tailTotal=$(($tailTotal/1024)) tailTotalB=$(($tailTotal*1073741824)) tailLibre=`echo $line | cut -d " " -f2` tailLibre=$(($tailLibre/1024)) tailLibreB=$(($tailLibre*1073741824)) tailUsed=`echo $line | cut -d " " -f3` tailUsed=$(($tailUsed/1024)) tailUsedB=$(($tailUsed*1073741824)) if [ $WARNING != 0 ] || [ $CRITICAL != 0 ]; then DISK_USED_POURCENT=`$CMD_EXPR \( $tailUsedB \* 100 \) / $tailTotalB` PERFDATA_WARNING=`$CMD_EXPR \( $tailTotalB \* $WARNING \) / 100` PERFDATA_CRITICAL=`$CMD_EXPR \( $tailTotalB \* $CRITICAL \) / 100` if [ $DISK_USED_POURCENT -gt $CRITICAL ] && [ $CRITICAL != 0 ]; then STATE=$STATE_CRITICAL INFO="CRITICAL" elif [ $DISK_USED_POURCENT -gt $WARNING ] && [ $WARNING != 0 ]; then STATE=$STATE_WARNING INFO="WARNING" else STATE=$STATE_OK INFO="OK" fi else STATE=$STATE_OK INFO="OK" fi VALUE=$tailTotalB size_convert tailTotal_FORMAT=$VALUE VALUE=$tailUsedB size_convert tailUsed_FORMAT=$VALUE VALUE=$tailLibreB size_convert tailLibre_FORMAT=$VALUE DESCRIPTION="CIFS $INFO - $DISK TOTAL: $tailTotal_FORMAT USED: $tailUsed_FORMAT FREE: $tailLibre_FORMAT" DESCRIPTION="$DESCRIPTION | size=${tailTotalB}B used=${tailUsedB}B;$PERFDATA_WARNING;$PERFDATA_CRITICAL;0;$tailTotalB" fi done < cifssize$1.temp rm cifssize$1.temp fi echo $DESCRIPTION exit $STATE
Je me suis inspiré des plugins nagios en bash sur le site http://www.be-root.com, merci à Yoan Lamy. Il faudra bien sûr une connexion ssh authentifiée par clé afin de se connecter sans mot de passe et ne pas oublier la variable d'environnement NAS_DB dans le script.
2 Configuration de Centreon
2.1 Commande check_by_ssh_cifs
Créons une commande avec des macros personnalisées. Le paramètre -E 31 permet d'ignorer le message d'avertissement d'EMC à la connexion.
2.2 Modèle de service Svc_cifs_nas
Ensuite il est vivement conseillé d'utiliser un modèle de service, il contiendra les paramètres qui seront communs à tous les services.
Ne pas oublier d'appliquer le modèle graphique storage.
2.3 Création des services
Il ne restera plus que la création des services avec le nom des CIFS.
2.4 Monitoring
Après le rechargement de la configuration, vous obtiendrez cette vue.
Et vous pourrez épater votre responsable avec cette vue avec les widgets de Centreon :-)