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 $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. 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.
