Vous êtes ici:

Menu

Stacks Image 36951
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

cifs01
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

cifs02
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

cifs03
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.
cifs04
Sur le graphe ci-dessus, on aperçoit au début, une sur-allocation des Tree Quota. Et la correction quelques minutes plus tard.
cifs05
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.
comments powered by Disqus
 Vous êtes ici: