Voici une amélioration du script check_cifs_size, il permet la prise en compte des Tree Quota. Le plugin calcule le total alloué en quota et le compare à la taille réelle du CIFS. Un message de type Warning est déclenché si la taille maxi de quota dépasse la taille du CIFS. Bien sûr, la totalité des CIFS n'utilise pas les Tree Quota, c'est pourquoi nous utiliserons une macro personnalisée pour déterminer l'utilisation ou non de ces quotas.
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 04/03/2013 # script pour retourner la taille des CIFS des NAS EMC # vérifie aussi la taille totale allouée du tree quota # Version : 2 # 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_FS="/nas/bin/nas_fs" CMD_NAS_QUOTA="/nas/bin/nas_quotas" # Script name SCRIPTNAME=`$CMD_BASENAME $0` # Version VERSION="1.1" # 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 QUOTA=0 # Option processing print_usage() { echo "Usage: ./check_cifs_size -d NAME_CIFS -q 1 -w 80 -c 90" echo " $SCRIPTNAME -d STRING" echo " $SCRIPTNAME -q INTEGER" 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 "-q QUOTA" echo " include TREE QUOTA (default: 0)" 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' and 'nas_quotas' 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." echo "If the QUOTA is set 1, calculate the sum of quota tree. It's warning if the sum of quota tree exceeds the size of CIFS" } 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:q:hV OPT do case $OPT in d) DISK="$OPTARG" ;; w) WARNING=$OPTARG ;; c) CRITICAL=$OPTARG ;; q) QUOTA=$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 # lit la taille du CIFS $CMD_NAS_FS -size $DISK | cut -d " " -f 3,6,9 > cifssize$DISK.temp if [ $QUOTA != 0 ]; then # lit les taille des tree quota du CIFS concerné $CMD_NAS_QUOTA -report -tree -fs $DISK | grep "|#" | cut -d "|" -f5 > cifsquota$DISK.temp # calcul de la taille alloué max des tree quota QUOTAMAX=0 while read line; do VALEUR=$((`echo $line`*1024)) let QUOTAMAX=$QUOTAMAX+$VALEUR done < cifsquota$DISK.temp rm cifsquota$DISK.temp fi # 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" elif [ $tailTotalB -lt $QUOTAMAX ]; then # l'espace max alloué au quota est supérieur à la taille total du cifs 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 if [ $QUOTA != 0 ]; then VALUE=$QUOTAMAX size_convert tailquota_FORMAT=$VALUE DESCRIPTION="CIFS $INFO - $DISK TOTAL: $tailTotal_FORMAT USED: $tailUsed_FORMAT FREE: $tailLibre_FORMAT QUOTAMAX: $tailquota_FORMAT" DESCRIPTION="$DESCRIPTION | size=${tailTotalB}B quotamax=${QUOTAMAX}B used=${tailUsedB}B;$PERFDATA_WARNING;$PERFDATA_CRITICAL;0;$tailTotalB" else 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 fi done < cifssize$DISK.temp rm cifssize$DISK.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. Il faudra rajouter une macro personnalisée $_SERVICEQUOTA$. Le paramètre -E 31 permet d'ignorer le message d'avertissement d'EMC à la connexion.
$USER1$/check_by_ssh -H $HOSTADDRESS$ -l $_SERVICEUSERNAME$ -E 31 -C "./check_cifs_size -d $_SERVICEDISK$ -q $_SERVICEQUOTA$ -c $_SERVICECRITICAL$ -w $_SERVICEWARNING$"
2.2 Modèle de service Svc_cifs_nas
Nous rajouterons la macro personnalisée QUOTA et nous définirons la non-utilisation des quotas pour le modèle de service.
2.3 Création des services
Il suffira de surcharger les services qui ont besoin de calculer l'espace totale alloué pour les Tree Quota.
2.4 Monitoring
Et voici les nouveaux graphes pour les CIFS de NAS EMC.
Sur le graphe ci-dessus, on aperçoit au début, une sur-allocation des Tree Quota. Et la correction quelques minutes plus tard.
Un autre exemple, nous avons mis un remplissage à 80 % pour la courbe quotamax afin de ne pas masquer la courbe d'utilisation du disque CIFS.
Sur le graphe ci-dessus, on aperçoit au début, une sur-allocation des Tree Quota. Et la correction quelques minutes plus tard.
Un autre exemple, nous avons mis un remplissage à 80 % pour la courbe quotamax afin de ne pas masquer la courbe d'utilisation du disque CIFS.