From 35c05b8ba90b431af0904c5bedf027e4fe5811ed Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Tue, 5 Sep 2017 17:38:48 +0200 Subject: [PATCH] [WIP] article pour les wrappers de checks --- HowtoNagiosChecksWrapper.md | 164 ++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 HowtoNagiosChecksWrapper.md diff --git a/HowtoNagiosChecksWrapper.md b/HowtoNagiosChecksWrapper.md new file mode 100644 index 00000000..ccfec277 --- /dev/null +++ b/HowtoNagiosChecksWrapper.md @@ -0,0 +1,164 @@ +--- +title: Howto Nagios alerts wrapper. +... + +Cet article documente la façon dont on peut temporairement désactiver les alertes de monitoring (Nagios, Icinga…) grace à un "wrapper" autour du check réalisé sur le serveur. + +Le principe est de faire croire au monitoring que tout va bien, même si ça n'est pas forcément le cas, lorsque certaines conditions sont satisfaites. + +Plusieurs variations sont possibles, mais nous allons documenter une approche très simple, basée sur la présence d'un fichier temporaire. + +## Gestion du fichier temporaire + +Un script `alerts_switch` s'occupera de gérer le fichier temporaire. + +~~~ +$ /usr/share/script/alerts_switch disable tomcat +~~~ + +Cette action va créer un fichier temporaire `/tmp/tomcat_alerts_disabled` et inscrire une entrée datée dans le fichier `/var/log/tomcat_alerts.log`. + +~~~ +$ /usr/share/script/alerts_switch enable tomcat +~~~ + +Cette action va renommer le fichier en `/tmp/tomcat_alerts_enabled` s'il existe ou le créer (pour indiquer clairement qu'on a souhaité que les alertes soient activées). On ne supprimer pas le fichier pour ne pas risquer de supprimer un fichier important qui serait là au préalable, portant par malchance le même nom. + +Détail du script `alerts_switch` : + +~~~{.bash} +#!/bin/bash + +set -e + +usage() { + echo "alerts_switch action prefix" +} + +disable_alerts () { + disabled_file="$1_disabled" + enabled_file="$1_enabled" + + if [ -e "${enabled_file}" ]; then + mv "${enabled_file}" "${disabled_file}" + else + touch "${disabled_file}" + fi +} + +enable_alerts () { + disabled_file="$1_disabled" + enabled_file="$1_enabled" + + if [ -e "${disabled_file}" ]; then + mv "${disabled_file}" "${enabled_file}" + else + touch "${enabled_file}" + fi +} + +now () { + date --iso-8601=seconds +} + +log_disable () { + echo "$(now) - alerts disabled" >> $1 +} + +log_enable () { + echo "$(now) - alerts enabled" >> $1 +} + +main () { + readonly action=$1 + readonly prefix=$2 + + readonly file_path="/tmp/${prefix}_alerts" + readonly log_file="/var/log/${prefix}_alerts.log" + + case "$action" in + enable) + enable_alerts ${file_path} + log_enable ${log_file} + ;; + disable) + disable_alerts ${file_path} + log_disable ${log_file} + ;; + help) + usage + ;; + *) + >&2 echo "Unknown action '$action'" + exit 1 + ;; + esac +} + +main "$@" +~~~ + +## (Dés)activation des alertes + +L'activation/désactivation des alertes peut se faire manuellement par exécution du script, mais elle peut aussi se faire automatiquement depuis le script d'initialisation d'un service. + +Par exemple, avec Tomcat on peut ajouter les commandes citées plus haut dans les fonctions start/stop, juste après l'appel à `log_daemon_msg` + +## Wrapper pour le check + +Il reste à tenir compte de la présence ou pas du fichier temporaire au niveau des checks Nagios/NRPE. + +Pour un check `/usr/lib/nagios/plugins/check_tcp -p 8080`, on va jouter une commande et un argument juste avant : + +~~~ +$ alerts_wrapper tomcat /usr/lib/nagios/plugins/check_tcp -p 8080 +~~~ + +On peut ainsi invoquer n'importe quel check NRPE en le précédant du wrapper et du prefix voulu. + +Détail du script `alerts_wrapper` : + +~~~{.bash} +#!/bin/bash + +set -x + +check_file="/tmp/$1_alerts_disabled" +shift + +check_stdout=$($@) +check_rc=$? + +if [ -e "${check_file}" ]; then + last_change=$(stat -c %Z "${check_file}") + limit=$(date --date '24 hours ago' +'%s') + + if [ ${last_change} -le ${limit} ]; then + rm "${check_file}" + fi +fi + +if [ -e "${check_file}" ]; then + formatted_last_change=$(date --date "@$(stat -c %Z "${check_file}")" +'%c') + + echo "ALERTS DISABLED (since ${formatted_last_change}) - ${check_stdout}" + if [ ${check_rc} = 0 ]; then + # Nagios OK + exit 0 + else + # Nagios WARNING + exit 1 + fi +else + echo ${check_stdout} + exit ${check_rc} +fi +~~~ + + +Le wrapper cherchera donc la présence d'un fichier `/var/tmp/tomcat_alerts_disabled`. + +S'il est présent et vieux de plus de 24h, il sera détruit pour ne pas risquer d'oubli. +Ensuite le check est exécuté. + +Si le fichier temporaire est présent, le wrapper informe le monitoring que les alertes sont désactivées (depuis quand) et lui donne également le résultat du check réel. L'état du check est au pire "warning" si le check a échoué.