Aller au contenu principal
Version: 20.10

Auto Remediation

Introduction​

Le gestionnaire d'événements ou la correction automatique sont des commandes systÚme facultatives (scripts ou exécutables) qui sont exécutées chaque fois qu'un changement d'état d'un hÎte ou d'un service se produit.

Une utilisation évidente du gestionnaire d'événements est la possibilité pour Centreon de résoudre proactivement les problÚmes avant que quiconque ne soit averti.

Quand le gestionnaire d'Ă©vĂ©nements est-il exĂ©cutĂ© ?​

Le gestionnaire d'événements est exécuté lorsqu'un service ou un hÎte :

  • Est dans un Ă©tat problĂ©matique SOFT
  • Entre initialement dans un Ă©tat problĂ©matique HARD
  • RĂ©cupĂšre initialement d'un Ă©tat problĂ©matique SOFT ou HARD
  • Les Ă©tats SOFT et HARD sont dĂ©crits ici

Types de gestionnaires d'Ă©vĂ©nements​

Il existe différents types de gestionnaires d'événements que vous pouvez définir pour gérer les changements d'état :

  • Gestionnaire d'Ă©vĂ©nements global pour les hĂŽtes
  • Gestionnaire d'Ă©vĂ©nements global pour les services
  • Gestionnaire d'Ă©vĂ©nements spĂ©cifiques Ă  un hĂŽte
  • Gestionnaire d'Ă©vĂ©nements spĂ©cifiques Ă  un service

Les gestionnaires d'événements globaux d'hÎtes et de services sont exécutés pour chaque changement d'état d'hÎte ou de service qui se produit, immédiatement avant tout gestionnaire d'événement spécifique à l'hÎte ou au service.

Activation des gestionnaires d'Ă©vĂ©nements​

Les gestionnaires d'Ă©vĂ©nements peuvent ĂȘtre activĂ©s ou dĂ©sactivĂ©s sur un collecteur.

Les gestionnaires d'Ă©vĂ©nements spĂ©cifiques Ă  l'hĂŽte et au service peuvent ĂȘtre activĂ©s ou dĂ©sactivĂ©s dans vos dĂ©finitions d'hĂŽte et de service. Les gestionnaires d'Ă©vĂ©nements spĂ©cifiques ne seront pas exĂ©cutĂ©s si l'option globale est dĂ©sactivĂ©e sur votre collecteur.

Ordre d'exĂ©cution du gestionnaire d'Ă©vĂ©nements​

Comme déjà mentionné, les gestionnaires d'événements globaux d'hÎte et de service sont exécutés immédiatement avant les gestionnaires d'événements spécifiques à l'hÎte ou au service.

Les gestionnaires d'événements sont exécutés pour les problÚmes HARD et les états de récupération immédiatement aprÚs l'envoi des notifications.

Configuration​

CrĂ©er une commande​

Les commandes du gestionnaire d'Ă©vĂ©nements seront probablement des scripts shell ou perl, mais il peut s'agir de n'importe quel type d'exĂ©cutable pouvant ĂȘtre exĂ©cutĂ© Ă  partir d'un invite de commande. Au minimum, les scripts doivent prendre les macros suivantes comme arguments :

  • Pour les services : $SERVICESTATE$, $SERVICESTATETYPE$, $SERVICEATTEMPT$
  • Pour les hĂŽtes : $HOSTSTATE$, $HOSTSTATETYPE$, $HOSTATTEMPT$

Les scripts doivent examiner les valeurs des arguments qui leur sont transmis et prendre toutes les mesures nécessaires en fonction de ces valeurs.

Les commandes du gestionnaire d'Ă©vĂ©nements s'exĂ©cuteront normalement avec les mĂȘmes autorisations que l'utilisateur sous lequel Centreon Engine (utilisateur centreon-engine) s'exĂ©cute sur votre machine. Cela peut poser un problĂšme si vous souhaitez Ă©crire un gestionnaire d'Ă©vĂ©nements qui redĂ©marre les services systĂšme, car les privilĂšges root sont gĂ©nĂ©ralement requis pour effectuer ce type de tĂąches.

IdĂ©alement, vous devez Ă©valuer les types de gestionnaires d'Ă©vĂ©nements que vous allez implĂ©menter et accorder juste assez de permissions Ă  l'utilisateur Centreon Engine pour exĂ©cuter les commandes systĂšme nĂ©cessaires. Vous voudrez peut-ĂȘtre essayer d'utiliser sudo pour ce faire.

Suivre cette procédure pour créer une commande.

Utilisez Misc pour le type de commande pour classer vos commandes.

Activer les gestionnaires d'Ă©vĂ©nements sur votre plate-forme​

REndez-vous dans le menu Configuration > Pollers > Engine configuration et Ă©diter toutes les configuration Centreon Engine sur lesquelles vous souhaitez activer le gestionnaire d'Ă©vĂšnements.

Dans l'onglet Check Opyions, activer l'option Event Handler Option :

image

Configurer les gestionnaires d'Ă©vĂ©nements​

Globalement​

Pour configurer globalement la correction automatique pour toutes les ressources d'un poller, se rendre dans le menu Configuration > Pollers > Engine configuration et Ă©diter la configuration Centreon Engine sur lesquelles vous souhaitez activer la correction automatique globale.

Dans l'onglet Check Options, sélectionnez la commande pour les options hosts and/or services event handler :

image

Cliquer sur Save.

Sur des ressources sĂ©lectionnĂ©es​

Pour les hĂŽtes

Se rendre dans le menu Configuration > Hosts > Hosts et éditer la configuration de votre hÎte. Dans l'onglet Data Processing sélectionner la commande :

image

Cliquer sur Save.

Vous pouvez configurer cette commande sur les modĂšles.

Pour les services

Se rendre dans le menu Configuration > Services > Services by host et éditer la configuration de votre hÎte. Dans l'onglet Data Processing sélectionner la commande :

image

Cliquer sur Save.

Vous pouvez configurer cette commande sur les modĂšles.

Exemple​

L'exemple ci-dessous suppose que vous surveillez le serveur HTTP sur la machine locale. Nous supposerons que l'option Max Check Attempts pour le service a une valeur de 4 ou plus (c'est-à-dire que le service est vérifié 4 fois avant qu'il ne soit considéré comme ayant un réel problÚme). Un exemple de définition de service abrégé pourrait ressembler à ceci ...

Le script du gestionnaire d'événements (/usr/lib/centreon/plugins/eventhandlers/restart-httpd).

#!/bin/sh
#
# Event handler script for restarting the web server on the local machine
#
# Note: This script will only restart the web server if the service is
# retried 3 times (in a "soft" state) or if the web service somehow
# manages to fall into a "hard" error state.
#

# What state is the HTTP service in?
case "$1" in
OK)
# The service just came back up, so don't do anything...
;;
WARNING)
# We don't really care about warning states, since the service is probably still running...
;;
UNKNOWN)
# We don't know what might be causing an unknown error, so don't do anything...
;;
CRITICAL)
# Aha! The HTTP service appears to have a problem - perhaps we should restart the server...
# Is this a "soft" or a "hard" state?
case "$2" in

# We're in a "soft" state, meaning that Centreon is in the middle of retrying the
# check before it turns into a "hard" state and contacts get notified...
SOFT)

# What check attempt are we on? We don't want to restart the web server on the first
# check, because it may just be a fluke!
case "$3" in

# Wait until the check has been tried 3 times before restarting the web server.
# If the check fails on the 4th time (after we restart the web server), the state
# type will turn to "hard" and contacts will be notified of the problem.
# Hopefully this will restart the web server successfully, so the 4th check will
# result in a "soft" recovery. If that happens no one gets notified because we
# fixed the problem!
3)
echo -n "Restarting HTTP service (3rd soft critical state)..."
# Call the init script to restart the HTTPD server
/etc/rc.d/init.d/httpd restart
;;
esac
;;

# The HTTP service somehow managed to turn into a hard error without getting fixed.
# It should have been restarted by the code above, but for some reason it didn't.
# Let's give it one last try, shall we?
# Note: Contacts have already been notified of a problem with the service at this
# point (unless you disabled notifications for this service)
HARD)
echo -n "Restarting HTTP service..."
# Call the init script to restart the HTTPD server
/etc/rc.d/init.d/httpd restart
;;
esac
;;
esac
exit 0

L'exemple de script fourni ci-dessus tentera de redémarrer le serveur Web sur la machine locale :

  • Une fois que le service a Ă©tĂ© revĂ©rifiĂ© pour la troisiĂšme fois et est dans un Ă©tat SOFT CRITICAL
  • Une fois que le service passe pour la premiĂšre fois dans un Ă©tat HARD CRITICAL

Le script devrait thĂ©oriquement redĂ©marrer et le serveur Web et rĂ©soudre le problĂšme avant que le service ne passe dans un Ă©tat de problĂšme HARD, mais nous incluons un cas de secours dans le cas oĂč cela ne fonctionne pas la premiĂšre fois. Il convient de noter que le gestionnaire d'Ă©vĂ©nements ne sera exĂ©cutĂ© que la premiĂšre fois que le service tombe dans un Ă©tat de problĂšme HARD. Cela empĂȘche Centreon d'exĂ©cuter en continu le script pour redĂ©marrer le serveur Web si le service reste dans un Ă©tat de problĂšme HARD, vous ne souhaitez pas ce comportement.

Ensuite, créez une commande comme:

  • Command Name: restart-httpd
  • Command Type: Misc
  • Command Line: $CENTREONPLUGINS$/eventhandlers/restart-httpd $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$

Maintenant, dans la définition du service, sélectionner la commande restart-httpd pour votre définition de gestionnaire d'événements.