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 $STATEJe 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 :-)
