Vérifier la version de centreon plugin par rapport au GitHub
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 helpLa 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 dateRetour 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 OKRetour Warning
./check_version_centreon_plugin.sh -w=2 -c=8 WARNING - Ver. Centreon 20170329 Ver. Git 20170713, The plugin should be updatedRetour 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
Command line
$USER1$/check_version_centreon_plugin.sh -w=$_SERVICEWARNING$ -c=$_SERVICECRITICAL$ -p=$_SERVICEPATH$
3.2 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.
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
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