Vous êtes ici:

Menu


Les Event Handlers ou gestionnaire d'événement vont permettre au moteur de supervision d'interagir avec des scripts en fonction des états d'un hôte ou d'un service. Imaginons que vous avez un serveur Web supervisé par Centreon. Si le processus apache s'arrête pour une raison inconnue. Vous pouvez, grâce aux Event Handlers, relancer le service apache. Attention, tout de même, il faut bien réfléchir aux actions que vous voulez mettre en oeuvre pour éviter des comportements non désirés.
Dans ce tutoriel, je vais l'utiliser pour relancer un service centengine d'un serveur de test sous Debian 10. Cela me permettra de connaître la fréquence des arrêts non désirés de cette nouvelle version pendant 24 heures.

1 Prérequis

J'ai donc installé un serveur Debian avec une configuration de base avec le nouveau package centreon-engine livré avec Buster. Ce serveur ne supervise rien, il sert juste pour ce tutoriel. Bien sûr je le supervise avec un Centreon 19.04, tout à fait opérationnel avec le plugin SNMP livré avec cette version.
Stacks Image 294368
Le but de ce tuto étant de détecter un arrêt du processus centengine et de tenter de le redémarrer à distance, nous allons d'abord trouver le moyen d'effectuer cette action.

2 Redémarrage à distance du processus centengine

Il n'y a aucun lien entre le serveur Debian et le serveur de supervision, ce n'est pas un poller distant mais bien un serveur autonome, nous allons trouver une solution de contournement. Cet exemple pourra servir pour tout autre processus. Tout d'abord, voici les différentes commandes pour redémarrer le moteur centengine.
service centengine restart

ou
systemctl restart centengine
Nous utiliserons la première commande. Nous utiliserons l'utilisateur centreon-engine donc il faudra utiliser le mécanisme sudo. Pour la connexion à distance, j'ai choisi une solution via le protocole ssh. Comme je n'ai pas envie de réinventer la roue, je vais utiliser un plugin centreon qui est capable d'effectuer cette opération.
Installer le plugin centreon-plugin-Operatingsystems-Linux-Local.
yum install centreon-plugin-Operatingsystems-Linux-Local
Comme nous devons réaliser une connexion ssh sans mot de passe, nous utiliserons une clé publique pour l'utilisateur centreon-engine. Sur le serveur Debian Buster, créez un mot de passe pour centreon-engine (attention, par défaut, cet utilisateur sous debian 10 n'a pas de login bash)
passwd centreon-engine
Sur le serveur Centreon, connectez-vous en centreon-engine. Créez votre clé publique et envoyez cette clé sur le serveur Debian.
root@supervision:~# su - centreon-engine
$ ssh-keygen

$ ssh-copy-id -i  centreon-engine@<IP Serveur Debian>
Sur le serveur Debian, il faut élever les privilèges de centreon-engine pour la commande de redémarrage de centengine. Nous allons utiliser le mécanisme sudo. Créez le fichier suivant :
vi /etc/sudoers.d/centreon
Saisissez les lignes suivantes :
## Elevation centreon-engine

User_Alias CENTREON=%centreon-engine
Defaults:CENTREON !requiretty

# Centreon Engine
CENTREON ALL = NOPASSWD: /usr/sbin/service centengine restart

2.1 plugin centreon

Maintenant, nous allons tester notre commande avec la ligne suivante, j'utilise le mode cmd-return avec l'option remote et sudo.
/usr/lib/centreon/plugins/centreon_linux_local.pl --plugin=os::linux::local::plugin --mode=cmd-return --sudo --command=/usr/sbin/service --command-options="centengine restart"  --manage-returns='0,OK,process centengine start#1,CRITICAL,process KO#,UNKNOWN,Command problem' --remote --hostname=<IP Serveur Debian> --ssh-option='-l=centreon-engine'
Description des paramètres
plugin=os::linux::local::plugin : utilisation du plugin
mode=cmd-return : le mode cmd-return permet l'utilisation d'une commande et de récupérer le code de sortie de celui-ci
sudo : on indique qu'il faut utiliser la commande sudo pour élever le privilège de l'utilisateur
command=/usr/sbin/service : nom et chemin de la commande
command-options="centengine restart" : options de la commande
manage-returns='0,OK,process centengine start#1,CRITICAL,process KO#,UNKNOWN,Command problem' : interprétations du résultat de la commande chaque état est séparé par le symbole Dièze ou Hashtag
remote : on indique qu'on utilise le protocole ssh pour envoyer la commande à distance.
hostname=<IP Serveur Debian> : adresse IP du serveur Debian
ssh-option='-l=centreon-engine' : option ssh, dans ce cas c'est l'utilisateur centreon-engine.
Testons notre commande en arrêtant manuellement le processus centengine sur le serveur buster et en se connectant en tant que centreon-engine sur le moteur de supervision.
[root@centreon1910 ~]# su - centreon-engine

-bash-4.2$ /usr/lib/centreon/plugins/centreon_linux_local.pl --plugin=os::linux::local::plugin --mode=cmd-return --sudo --command=/usr/sbin/service --command-options="centengine restart" --manage-returns='0,OK,process centengine start#1,CRITICAL,process KO#,UNKNOWN,Command problem' --remote --hostname=192.168.1.79 --ssh-option='-l=centreon-engine'
OK: process centengine start | 'code'=0;;;;
Le plugin nous retourne le code de sortie de la commande. Vous devez avoir votre processus centengine en état de fonctionnement.

3 Configuration de notre gestionnaire d'événement

Nous devons créer notre script de gestionnaire d'événement. Celui-ci devra gérer le statut du service ainsi que l'état hard ou soft de ce statut. Voici le script que l'on placera dans un dossier eventhandler dans le dossier /usr/lib/centreon/plugins. Je n'ai rien inventé, ce script provient de la documentation Nagios. J'ai juste rajouté le script précédent sur l'événement Critical en statut Hard.
Créez le dossier
mkdir /usr/lib/centreon/plugins/eventhandler

Créez le fichier
vi /usr/lib/centreon/plugins/eventhandler/handle-proc-event-restart-engine

Saisissez les lignes suivantes
#!/bin/bash
#script pour les service handle-master-proc-event
# prise en compte que si état HARD
case "$2" in
HARD)
case "$1" in
CRITICAL)
/usr/lib/centreon/plugins/centreon_linux_local.pl --plugin=os::linux::local::plugin --plugin=os::linux::local::plugin --mode=cmd-return --sudo --command=/usr/sbin/service --command-options="centengine restart" --manage-returns='0,OK,process centengine start#1,CRITICAL,process KO#,UNKNOWN,Command problem' --remote --hostname=192.168.1.79 --ssh-option='-l=centreon-engine'
;;
WARNING)
;;
UNKNOWN)
;;
OK)
;;
esac
;;
esac
exit 0
Donnez les droits d'exécution et changer le propriétaire du fichier.
chmod +x /usr/lib/centreon/plugins/eventhandler/handle-proc-event-restart-engine
chown centreon: /usr/lib/centreon/plugins/eventhandler/handle-proc-event-restart-engine
Nous allons créer notre commande dans l'interface Centreon. Sélectionnez configuration -> commands -> checks. ajoutez une commande de vérification.
Stacks Image 294397
Nous ajoutons notre script suivi de deux macros systèmes sur le statut du service et de son état.
$CENTREONPLUGINS$/eventhandler/handle-proc-event-restart-engine $SERVICESTATE$ $SERVICESTATETYPE$
Sauvegardez cette commande et sélectionnez le service qui vérifie l'état du processus centengine. Nous allons lui associer ce gestionnaire d'événement. Voici notre service :
Stacks Image 294400
Cliquez sur l'onglet Data Processing.
Stacks Image 294405
Activez la gestion d'événement et sélectionnez le gestionnaire d'événement handle-proc-event-restart-engine. Sauvegardez et appliquez la configuration.

4 Vérification du fonctionnement

Pour tester, rien de plus facile. Arrêtez votre processus centengine. Il vous suffira d'attendre tranquillement l'état hard du statut critical de notre service proc-centengine. Voici un aperçu du gestionnaire d'événements :
Stacks Image 294410
Une fois que l'état Hard du statut Critical est confirmé, le moteur du serveur de supervision va déclencher le gestionnaire d'événement comme le montre le fichier de log.
[1563138004] [767] SERVICE ALERT: testbuster;proc-centengine;OK;HARD;3;OK: Number of current processes running: 1
[1563138004] [767] SERVICE EVENT HANDLER: testbuster;proc-centengine;OK;HARD;3;handle-proc-event-restart-engine
Au bout de quelque temps votre service retourne à l'état OK
Stacks Image 294413
Avec le graphe, nous pouvons visualiser l'action du gestionnaire d'événements
Stacks Image 294416
Nous avons vu un exemple d'utilisation du gestionnaire d'événements appelé aussi Event Handlers. Attention, il faudra faire attention aux événements mal maîtrisés qui mettraient en péril le bon fonctionnement de votre installation.
comments powered by Disqus
comments powered by Disqus
 Vous êtes ici: