Vous êtes ici:

Menu


Vérifier la version de centreon plugin par rapport au GitHub

Stacks Image 5251
Je vous propose un petit plugin qui me sert à vérifier le delta de version des plugins centreon entre ceux installés sur mon serveur et sur le GitHub de Centreon. Les prérequis de ce plugin est l'installation de git mais normalement si vous avez utilisé le dépôt sur GitHub, il est déjà installé.

1 Le plugin check_version_plugin_centreon.sh

J'utilise un script bash pour mon plugin. Il utilise une commande qui permet de récupérer les tag de version du GitHub de Centreon. Ainsi la commande suivante permet de récupérer les tags après un filtre pour enlever les mauvais tags.
git ls-remote --tags https://github.com/centreon/centreon-plugins.git | grep 'refs/tags/[0-9]\{8\}$' | cut -f2 | sort -r
refs/tags/20170713
refs/tags/20170613
refs/tags/20170519
refs/tags/20170329
refs/tags/20170310
refs/tags/20170216
refs/tags/20170120
refs/tags/20161212
refs/tags/20161121
refs/tags/20161014
refs/tags/20160902
refs/tags/20160803
refs/tags/20160627
refs/tags/20160524
refs/tags/20160324
refs/tags/20160220
refs/tags/20160217
refs/tags/20160122
refs/tags/20151218
refs/tags/20151126
Comme vous pouvez le constater, nous visualisons les dates de mise à jour de la plus récente à la plus ancienne. Le plugin vérifiera le delta des versions et suivants les seuils définis nous retournera un état OK, Critique ou Warning. Un paramètre supplémentaire permettra de définir un autre chemin pour le plugin Centreon, par défaut ce chemin est /usr/lib/centreon/plugins.
#!/bin/bash
#===============================================================================
# Centreon Plugin Bash Script - check_version_plugin_centreon.sh
# Auteur : kermith72
# Date   : 17/07/2017
# But    : This script checks the version of centreon_plugin
#===============================================================================
#
# Usage info
show_help() {
cat << EOF
Usage: ${0##*/} [-w=] [-c=]
This script checks the centreon_plugin's version

    -w|--warning  Threshold warning.
    -c|--critical Threshold critical.
    -p|--plugin plugin's path
    -h|--help     help
EOF
}


GIT="/usr/bin/git"

for i in "$@"
do
  case $i in
    -w=*|--warning=*)
      WARNING="${i#*=}"
      shift # past argument=value
      ;;
    -c=*|--critical=*)
      CRITICAL="${i#*=}"
      shift # past argument=value
      ;;
    -p=*|--plugin=*)
      PATH_PLUGIN="${i#*=}"
      shift # past argument=value
      ;;
    -h|--help)
      show_help
      exit 2
      ;;
    *)
            # unknown option
    ;;
  esac
done


# Check for missing parameters
if [[ -z "$WARNING" ]] || [[ -z "$CRITICAL" ]] ; then
    echo "Missing parameters!"
    show_help
    exit 2
fi

# Check warning is lower  than critical
if [[ "$WARNING" -gt "$CRITICAL" ]]; then
        echo "WARNING must be lower than CRITICAL ! "
        exit 2
fi

# Check path
if [[ -z "$PATH_PLUGIN" ]]; then
        PATH_PLUGIN="/usr/lib/centreon/plugins/centreon_plugins.pl"
fi

if [[ ! -e "$PATH_PLUGIN" ]]; then
    echo "Plugin's path critical"
    exit 2
fi


if [[ -d "$PATH_PLUGIN" ]]; then
    echo "It's a directory ! Plugin's path critical"
    exit 2
fi


# Check git
if [[ ! -e "$GIT" ]]; then
    echo "git is not installed"
    exit 2
fi

CMD_GIT=$GIT" ls-remote --tags https://github.com/centreon/centreon-plugins.git"
CMD_PLUGIN=`$PATH_PLUGIN --version`
VERSION_PLUGIN=${CMD_PLUGIN:16}
DELTA_VERSION=0

for i in `$CMD_GIT | grep 'refs/tags/[0-9]\{8\}$' | cut -f2 | sort -r`
do
  TAG=${i:10}
  if [[ "DELTA_VERSION" -eq "0" ]]
  then
     VERSION_GIT=$TAG
  fi
  if [ "$VERSION_PLUGIN" -eq "$TAG"  ]
  then
     break
  fi
  let "DELTA_VERSION +=1 "

done

# Check if DELTA_VERSION is lower than WARNING  threshold parameter
if (( "$DELTA_VERSION" < "$WARNING" )); then
        if [[ "$DELTA_VERSION" -eq "0" ]]; then
        	echo "OK - Ver. Centreon $VERSION_PLUGIN Ver. Git $VERSION_GIT, plugin is up to date"
        else
        	echo "OK - Ver. Centreon $VERSION_PLUGIN Ver. Git $VERSION_GIT, plugin is OK"
	fi
	exit 0
fi
# Check if DELTA_VERSION is greater than WARNING threshold parameter and lower than CRITICAL threshold parameter
if (( "$DELTA_VERSION" >= "$WARNING" )) && [[ "$DELTA_VERSION" -lt "$CRITICAL" ]]; then
        echo "WARNING - Ver. Centreon $VERSION_PLUGIN Ver. Git $VERSION_GIT, The plugin should be updated"
        exit 1
fi
# Check if DELTAVERSION is greater than CRITICAL threshold parameter
if (( "$DELTA_VERSION" >= "$CRITICAL" )); then
        echo "CRITICAL - Ver. Centreon $VERSION_PLUGIN Ver. Git $VERSION_GIT, The plugin must be updated"
        exit 2
fi

2 Test du plugin

Voici le test du plugin avec toutes les possibilités. Attention, ne pas mettre d’espace entre le paramètre et sa valeur associée.
Commande passée sans argument, erreur car ils sont obligatoires
./check_version_centreon_plugin.sh
Missing parameters!
Usage: check_version_centreon_plugin.sh [-w=] [-c=]
This script checks the centreon_plugin's version

    -w|--warning  Threshold warning.
    -c|--critical Threshold critical.
    -p|--plugin plugin's path
    -h|--help     help
La valeur Critique doit être supérieure à la valeur Warning.
./check_version_centreon_plugin.sh -w=4 -c=2
WARNING must be lower than CRITICAL !
Retour OK avec le plugin à jour
./check_version_plugin_centreon.sh -w=1 -c=3
OK - Ver. Centreon 20170713  Ver. Git 20170713, plugin is up to date
Retour OK sans que le plugin soit à jour
./check_version_centreon_plugin.sh -w=4 -c=8
OK - Ver. Centreon 20170329  Ver. Git 20170713, plugin is OK
Retour Warning
./check_version_centreon_plugin.sh -w=2 -c=8
WARNING - Ver. Centreon 20170329  Ver. Git 20170713, The plugin should be updated
Retour Critical
./check_version_centreon_plugin.sh -w=4 -c=8 -p="/usr/lib/nagios/plugins/centreon_plugins.pl"
CRITICAL - Ver. Centreon 20160524  Ver. Git 20170713, The plugin must be updated

3 Configuration Centreon

3.1 Création de la commande check_version_centreon_plugin

Stacks Image 1195414
Création de la commande check_version_centreon_plugin
Command line
$USER1$/check_version_centreon_plugin.sh -w=$_SERVICEWARNING$ -c=$_SERVICECRITICAL$ -p=$_SERVICEPATH$

3.2 Création du service version_plugin

Stacks Image 1195441
Création du service version_plugin
Pour la création du service, utilisez le modèle generic-service et la commande créée précedemment check_version_centreon_plugin. Pour ma part, j’ai positionné les macro Warning à 4 et Critical à 8. Ce qui correspond à déclencher un warning sur plus de quatre versions par rapport à la version du Github. La macro PATH permet de changer le chemin du plugin Centreon. On choisira un intervalle de vérification assez important pour ce type de service. Il est même possible de modifier la période de contrôle pour faire une vérification mensuelle par exemple.

3.3 Mise en service du plugin

Les services sont en service sur ma supervision.
Stacks Image 1195456
création de la courbe temp
J'ai une vision instantanée des versions utilisées et de la dernière version du GitHub.

4 Mise à jour des plugins centreon

Pour mettre à jour vos plugins Centreon et si vous avez récupérez vos fichier avec git. Positionnez vous dans ce dossier et lancez la commande suivante :
git pull
Il s'ensuit de nombreux messages de mises à jour du dépôt GitHub.
remote: Counting objects: 2571, done.
remote: Compressing objects: 100% (132/132), done.
remote: Total 2571 (delta 903), reused 976 (delta 860), pack-reused 1547
Réception d'objets: 100% (2571/2571), 500.63 KiB | 0 bytes/s, done.
Résolution des deltas: 100% (1374/1374), complété avec 203 objets locaux.
Depuis https://github.com/centreon/centreon-plugins
   c07e164..8c771fb  master     -> origin/master
 * [nouvelle branche] aws-plugins -> origin/aws-plugins
 * [nouvelle branche] legacy_traffic -> origin/legacy_traffic
 * [nouvelle étiquette] 20170216   -> 20170216
 * [nouvelle étiquette] 20170310   -> 20170310
 * [nouvelle étiquette] 20170329   -> 20170329
 * [nouvelle étiquette] 20170519   -> 20170519
 * [nouvelle étiquette] 20170613   -> 20170613
 * [nouvelle étiquette] 20170713   -> 20170713
Mise à jour c07e164..8c771fb
Fast-forward
 .github/issue_template.md                                                |  27 ++++
. . . . .
Copier ensuite les fichiers dans le dossier des plugins.
cp -rp * /usr/lib/centreon/plugins/
Le plugin est à jour
./check_version_plugin_centreon.sh -w=1 -c=2
OK - Ver. Centreon 20170713  Ver. Git 20170713, plugin is up to date

Références

Le GitHub Centreon-plugins : https://github.com/centreon/centreon-plugins
Comment vérifier l'existence d'une branche ou d'un tag sur un repository distant sans le cloner : http://adopteungit.fr/blog/2017/04/14/verifier-existence-branch-tag-repo-distant-sans-cloner.html
comments powered by Disqus
 Vous êtes ici: