Vous êtes ici:

Menu

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

cifs01
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

cifs02
Ensuite il est vivement conseillé d'utiliser un modèle de service, il contiendra les paramètres qui seront communs à tous les services.

cifs03
Ne pas oublier d'appliquer le modèle graphique storage.

2.3 Création des services

cifs04
Il ne restera plus que la création des services avec le nom des CIFS.

2.4 Monitoring

cifs05
Après le rechargement de la configuration, vous obtiendrez cette vue.
cifs06
Et vous pourrez épater votre responsable avec cette vue avec les widgets de Centreon :-)
comments powered by Disqus
 Vous êtes ici: