Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| nagios_webcheck [2020/02/12 14:23] – nekan | nagios_webcheck [2021/03/05 19:06] (Version actuelle) – nekan | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ~~CLOSETOC~~ | + | ====== Surveillance automatique des sites web ====== |
| - | ====== Surveillance automatique des sites webs ====== | + | <label type=" |
| Pour un projet j'ai dû mettre une supervision sur les sites web de mon entreprise. Lorsqu' | Pour un projet j'ai dû mettre une supervision sur les sites web de mon entreprise. Lorsqu' | ||
| Ligne 8: | Ligne 8: | ||
| * Les nouveaux serveurs Apache sont alors détecté et une alerte nous indique d'y ajouter les scripts nécessaires au besoin | * Les nouveaux serveurs Apache sont alors détecté et une alerte nous indique d'y ajouter les scripts nécessaires au besoin | ||
| + | <callout type=" | ||
| + | Les paquets '' | ||
| + | |||
| + | <callout type=" | ||
| + | * Ajout de la gestion des sites et serveurs à ignorer | ||
| + | * Suppression des doublons dans les vérifications Nagios | ||
| + | * Correction de quelques fautes d' | ||
| + | </ | ||
| ===== Principe ===== | ===== Principe ===== | ||
| Ligne 14: | Ligne 22: | ||
| * Un cron exécute le script d' | * Un cron exécute le script d' | ||
| * Le script d' | * Le script d' | ||
| - | * Le premier contient la date d' | + | * Le premier contient la date d' |
| * Le second contient la liste des sites actifs. | * Le second contient la liste des sites actifs. | ||
| - | * Une fois les fichiers créés, le script les upload | + | * Une fois les fichiers créés, le script les dépose |
| ==== Sur le serveur Nagios ==== | ==== Sur le serveur Nagios ==== | ||
| - | * Un cron exécute le script général à 10h00. | + | * Un cron exécute le script général à 9h30. |
| * Le script général crée une liste de tous les serveurs qui ont une surveillance sur le service Apache. | * Le script général crée une liste de tous les serveurs qui ont une surveillance sur le service Apache. | ||
| * Pour chaque serveur de cette liste, il récupère les fichiers de réponse qui se trouve sur le dépôt externe. | * Pour chaque serveur de cette liste, il récupère les fichiers de réponse qui se trouve sur le dépôt externe. | ||
| + | * Si le serveur est dans la liste des serveurs à ignorer, il passe au serveur suivant. | ||
| * Si les fichiers sont manquant, le serveur en question est ajouté à la liste des serveurs en erreur et le script passe au serveur suivant. Cette erreur est due soit à une erreur de réseau soit à l' | * Si les fichiers sont manquant, le serveur en question est ajouté à la liste des serveurs en erreur et le script passe au serveur suivant. Cette erreur est due soit à une erreur de réseau soit à l' | ||
| * Si la date est obsolète, idem. Là, c'est soit un problème réseau, soit une erreur de cron. | * Si la date est obsolète, idem. Là, c'est soit un problème réseau, soit une erreur de cron. | ||
| * Si des différences sont notés, le serveur est ajouté à la liste des serveurs ayant des sites inactifs puis continue le traitement. | * Si des différences sont notés, le serveur est ajouté à la liste des serveurs ayant des sites inactifs puis continue le traitement. | ||
| * Le script gère alors les sites déclarés pour chaque serveurs : | * Le script gère alors les sites déclarés pour chaque serveurs : | ||
| - | * Pour chaque | + | * Si le site est dans la liste des sites à ignorer, il passe au suivant. |
| + | * Il vérifie | ||
| + | * Il teste la connexion au site. | ||
| + | * Si c'est bon, il ajoute la supervision. | ||
| + | * Si c'est en erreur (code 404 par exemple), il ajoute le site dans la liste des sites à ignorer. | ||
| * Si l' | * Si l' | ||
| * Si l' | * Si l' | ||
| Ligne 40: | Ligne 53: | ||
| ===== Sur le serveur Apache ===== | ===== Sur le serveur Apache ===== | ||
| - | Le script d' | + | Le script d' |
| ==== Script d' | ==== Script d' | ||
| - | <sxh bash> | + | <sxh bash># |
| + | |||
| + | ########################################################################################### | ||
| + | # | ||
| + | # Script de vérifications de l' | ||
| + | # | ||
| + | # Par Nicolas THOREZ | ||
| + | # | ||
| + | ########################################################################################### | ||
| + | |||
| + | ##### Déclarations des variables ##### | ||
| + | |||
| + | # nom du serveur | ||
| + | HOSTNAME=$(hostname) | ||
| + | |||
| + | # Dépôt externe | ||
| + | DRIVE=" | ||
| + | |||
| + | # User dépôt externe | ||
| + | USER=" | ||
| + | |||
| + | # Mot de passe | ||
| + | PASS=" | ||
| + | |||
| + | # Dépôt local | ||
| + | LOCAL="/ | ||
| + | |||
| + | # Date de la vérification | ||
| + | DATE=$(date ' | ||
| + | |||
| + | ##### Traitement ##### | ||
| + | |||
| + | # Vérification du dépôt local | ||
| + | if [ ! -d $LOCAL ] | ||
| + | then | ||
| + | # Création du dépôt | ||
| + | mkdir -p $LOCAL | ||
| + | fi | ||
| + | |||
| + | # Vérification de l' | ||
| + | if [ ! -e $LOCAL/ | ||
| + | then | ||
| + | touch $LOCAL/ | ||
| + | fi | ||
| + | |||
| + | # Vérification de l' | ||
| + | if [ ! -e $LOCAL/ | ||
| + | then | ||
| + | touch $LOCAL/ | ||
| + | fi | ||
| + | |||
| + | # Vérification de la différence entre les sites disponibles et les sites actifs (sauf les default et maintenance) | ||
| + | DIFF=$(diff / | ||
| + | |||
| + | # Ajout des sites à checker | ||
| + | grep -Ri ' | ||
| + | |||
| + | # Mise à jour des données | ||
| + | echo " | ||
| + | echo " | ||
| + | |||
| + | # Mise à jour du dépôt externe | ||
| + | curl -X PUT -u $USER:$PASS --cookie " | ||
| + | curl -X PUT -u $USER:$PASS --cookie " | ||
| </ | </ | ||
| + | ==== Cron ==== | ||
| + | |||
| + | <sxh bash> | ||
| + | |||
| + | 0 5 * * 1-5 root / | ||
| + | |||
| + | ===== Sur le serveur Nagios ===== | ||
| + | |||
| + | Le script général est placé dans ''/ | ||
| + | |||
| + | ==== Script général ==== | ||
| + | |||
| + | <sxh bash># | ||
| + | |||
| + | #################################################################################################### | ||
| + | # | ||
| + | # Script de vérification de tous les sites webs | ||
| + | # | ||
| + | # Par Nicolas THOREZ | ||
| + | # | ||
| + | #################################################################################################### | ||
| + | |||
| + | ##### Déclaration des fonctions ##### | ||
| + | |||
| + | # Fonction d' | ||
| + | add-log() | ||
| + | { | ||
| + | # Variables pour la coloration syntaxique du mode verbeux | ||
| + | GOOD=" | ||
| + | CRIT=" | ||
| + | WARN=" | ||
| + | INFO=" | ||
| + | UNKN=" | ||
| + | OFF=" | ||
| + | |||
| + | # Variable date et heure | ||
| + | DATE=$(date ' | ||
| + | |||
| + | # Gestion des arguments pour la fonction | ||
| + | while [[ $# -gt 0 ]] | ||
| + | do | ||
| + | LOG_PARAM=" | ||
| + | case $LOG_PARAM in | ||
| + | # fichier de logs | ||
| + | -f|--file) | ||
| + | LOG=" | ||
| + | shift | ||
| + | shift | ||
| + | ;; | ||
| + | # Niveau de log | ||
| + | -l|--level) | ||
| + | LEVEL=" | ||
| + | shift | ||
| + | shift | ||
| + | ;; | ||
| + | # Message | ||
| + | -m|--message) | ||
| + | MESSAGE=" | ||
| + | shift | ||
| + | shift | ||
| + | ;; | ||
| + | # Autres | ||
| + | *) | ||
| + | echo -e "$DATE $CRIT[CRIT]$OFF Erreur d' | ||
| + | esac | ||
| + | done | ||
| + | |||
| + | # Enregistrement dans le fichier log | ||
| + | if [ -f $LOG ] | ||
| + | then | ||
| + | echo "$DATE [$LEVEL] $MESSAGE" | ||
| + | else | ||
| + | touch $LOG | ||
| + | echo "$DATE [$LEVEL] $MESSAGE" | ||
| + | fi | ||
| + | |||
| + | # Affichage console en cas de mode verbeux | ||
| + | if [ " | ||
| + | then | ||
| + | case $LEVEL in | ||
| + | " | ||
| + | echo -e "$DATE $GOOD[$LEVEL]$OFF $MESSAGE" | ||
| + | ;; | ||
| + | " | ||
| + | echo -e "$DATE $WARN[$LEVEL]$OFF $MESSAGE" | ||
| + | ;; | ||
| + | " | ||
| + | echo -e "$DATE $CRIT[$LEVEL]$OFF $MESSAGE" | ||
| + | ;; | ||
| + | " | ||
| + | echo -e "$DATE $INFO[$LEVEL]$OFF $MESSAGE" | ||
| + | ;; | ||
| + | " | ||
| + | echo -e "$DATE $UNKN[$LEVEL]$OFF $MESSAGE" | ||
| + | ;; | ||
| + | esac | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # Fonction de création et d' | ||
| + | send-report() | ||
| + | { | ||
| + | # Gestion des arguments pour la fonction | ||
| + | while [[ $# -gt 0 ]] | ||
| + | do | ||
| + | LOG_PARAM=" | ||
| + | case $LOG_PARAM in | ||
| + | # Fichier HTML | ||
| + | -f|--file) | ||
| + | HTML=" | ||
| + | shift | ||
| + | shift | ||
| + | ;; | ||
| + | # Raison du rapport | ||
| + | -m|--message) | ||
| + | MESSAGE=" | ||
| + | shift | ||
| + | shift | ||
| + | ;; | ||
| + | # Destinataire | ||
| + | -a|--address-mail) | ||
| + | MAIL=" | ||
| + | shift | ||
| + | shift | ||
| + | ;; | ||
| + | # Autres | ||
| + | *) | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | esac | ||
| + | done | ||
| + | |||
| + | # Headers | ||
| + | HEADERS=' | ||
| + | < | ||
| + | <html lang=" | ||
| + | < | ||
| + | <meta charset=" | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | |||
| + | # Date du rapport | ||
| + | HTMLDATE=$(date ' | ||
| + | |||
| + | # Début du rapport | ||
| + | echo $HEADERS > $HTML | ||
| + | echo $HTMLDATE >> $HTML | ||
| + | echo "</ | ||
| + | |||
| + | # Ajout de la raison du rapport | ||
| + | echo "< | ||
| + | |||
| + | # Bloc des serveurs en erreur | ||
| + | TEST=$(cat $SERVER_ERROR | wc -l) | ||
| + | if [ " | ||
| + | then | ||
| + | # Création d'un titre | ||
| + | echo "< | ||
| + | |||
| + | # Création d'une liste | ||
| + | echo "< | ||
| + | |||
| + | # Boucle d' | ||
| + | for SERVER in $(cat $SERVER_ERROR | uniq | sort) | ||
| + | do | ||
| + | # Ajout du serveur | ||
| + | echo "< | ||
| + | done | ||
| + | |||
| + | # Fermeture de la liste | ||
| + | echo "</ | ||
| + | fi | ||
| + | |||
| + | # Bloc des serveurs à ignorer | ||
| + | TEST=$(cat $SERVER_IGNORE | wc -l) | ||
| + | if [ " | ||
| + | then | ||
| + | # Création d'un titre | ||
| + | echo "< | ||
| + | |||
| + | # Création d'une liste | ||
| + | echo "< | ||
| + | |||
| + | # Boucle d' | ||
| + | for SERVER in $(cat $SERVER_IGNORE | uniq | sort) | ||
| + | do | ||
| + | # Ajout du serveur | ||
| + | echo "< | ||
| + | done | ||
| + | |||
| + | # Fermeture de la liste | ||
| + | echo "</ | ||
| + | fi | ||
| + | |||
| + | # Bloc des sites en erreur | ||
| + | TEST=$(cat $SITE_ERROR | wc -l) | ||
| + | if [ " | ||
| + | then | ||
| + | # Création d'un titre | ||
| + | echo "< | ||
| + | |||
| + | # Création d'une liste | ||
| + | echo "< | ||
| + | |||
| + | # Boucle d' | ||
| + | for SITE in $(cat $SITE_ERROR | uniq | sort) | ||
| + | do | ||
| + | # Ajout du site | ||
| + | echo "< | ||
| + | done | ||
| + | |||
| + | # Fermeture de la liste | ||
| + | echo "</ | ||
| + | fi | ||
| + | |||
| + | # Bloc des serveurs ayant des sites non activés | ||
| + | TEST=$(cat $SITE_DISABLE | wc -l) | ||
| + | if [ " | ||
| + | then | ||
| + | # Création d'un titre | ||
| + | echo "< | ||
| + | |||
| + | # Création d'une liste | ||
| + | echo "< | ||
| + | |||
| + | # Boucle d' | ||
| + | for SERVER in $(cat $SITE_DISABLE | uniq | sort) | ||
| + | do | ||
| + | # Ajout du serveur | ||
| + | echo "< | ||
| + | done | ||
| + | |||
| + | # Fermeture de la liste | ||
| + | echo "</ | ||
| + | fi | ||
| + | |||
| + | # Bloc des sites ignorés | ||
| + | TEST=$(cat $SITE_IGNORE | wc -l) | ||
| + | if [ " | ||
| + | then | ||
| + | # Création d'un titre | ||
| + | echo "< | ||
| + | |||
| + | # Création d'une liste | ||
| + | echo "< | ||
| + | |||
| + | # Boucle d' | ||
| + | for SITE in $(cat $SITE_IGNORE | uniq | sort) | ||
| + | do | ||
| + | # Ajout du site | ||
| + | echo "< | ||
| + | done | ||
| + | |||
| + | # Fermeture de la liste | ||
| + | echo "</ | ||
| + | fi | ||
| + | |||
| + | # Bloc des sites nouvellement ajoutés | ||
| + | TEST=$(cat $SITE_NEW | wc -l) | ||
| + | if [ " | ||
| + | then | ||
| + | # Création d'un titre | ||
| + | echo "< | ||
| + | |||
| + | # Création d'une liste | ||
| + | echo "< | ||
| + | |||
| + | # Boucle d' | ||
| + | for SITE in $(cat $SITE_NEW | uniq | sort) | ||
| + | do | ||
| + | # Ajout du site | ||
| + | echo "< | ||
| + | done | ||
| + | |||
| + | # Fermeture de la liste | ||
| + | echo "</ | ||
| + | fi | ||
| + | |||
| + | # Bloc des sites supervisés | ||
| + | TEST=$(cat $SITE_GOOD | wc -l) | ||
| + | if [ " | ||
| + | then | ||
| + | # Création d'un titre | ||
| + | echo "< | ||
| + | |||
| + | # Création d'une liste | ||
| + | echo "< | ||
| + | |||
| + | # Boucle d' | ||
| + | for SITE in $(cat $SITE_GOOD | uniq | sort) | ||
| + | do | ||
| + | # Ajout du site | ||
| + | echo "< | ||
| + | done | ||
| + | |||
| + | # Fermeture de la liste | ||
| + | echo "</ | ||
| + | fi | ||
| + | |||
| + | # Fin du document | ||
| + | echo "</ | ||
| + | |||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Envoi du mail | ||
| + | cat $HTML | mail -a " | ||
| + | |||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | } | ||
| + | |||
| + | ##### Déclaration des variables ##### | ||
| + | |||
| + | # Mode verbeux pour debogage | ||
| + | VERBOSE=" | ||
| + | |||
| + | # Chemin du script | ||
| + | EXEC_PATH=/ | ||
| + | |||
| + | # Fichier log | ||
| + | LOG_FILE=$EXEC_PATH/ | ||
| + | |||
| + | # Fichier de rapport HTML | ||
| + | REPORT=$EXEC_PATH/ | ||
| + | |||
| + | # Adresse mail du restinataire du rapport | ||
| + | MAIL=" | ||
| + | |||
| + | # Date d' | ||
| + | EXEC_DATE=$(date ' | ||
| + | |||
| + | # Dépôt externe | ||
| + | DRIVE=" | ||
| + | |||
| + | # Login drive | ||
| + | DRIVE_USER=" | ||
| + | |||
| + | # Mot de passe drive | ||
| + | DRIVE_PASS=" | ||
| + | |||
| + | # Dépôt git local | ||
| + | LOCAL=$EXEC_PATH/ | ||
| + | |||
| + | # User Nagios SiteA & SiteB | ||
| + | USER=" | ||
| + | |||
| + | # URL Nagios SiteA | ||
| + | NAGIOS_A=" | ||
| + | |||
| + | # Mot de passe Nagios SiteA | ||
| + | PASS_A=" | ||
| + | |||
| + | # Filtre de recherche SiteA | ||
| + | PATTERN_A=" | ||
| + | |||
| + | # URL Nagios SiteB | ||
| + | NAGIOS_B=" | ||
| + | |||
| + | # Mot de passe Nagios SiteB | ||
| + | PASS_B=" | ||
| + | |||
| + | # Filtre de recherche SiteB | ||
| + | PATTERN_B=" | ||
| + | |||
| + | # Filtre de recherche Nagios final | ||
| + | PATTERN_FINAL=" | ||
| + | |||
| + | # Fichier de réponse pour les serveurs en erreur | ||
| + | SERVER_ERROR=$EXEC_PATH/ | ||
| + | |||
| + | # Fichier de réponse pour les sites en erreur | ||
| + | SITE_ERROR=$EXEC_PATH/ | ||
| + | |||
| + | # Fichier de réponse pour les sites supervisés | ||
| + | SITE_GOOD=$EXEC_PATH/ | ||
| + | |||
| + | # Fichier de réponse pour les sites nouvellement supervisés | ||
| + | SITE_NEW=$EXEC_PATH/ | ||
| + | |||
| + | # Fichier de réponse pour les serveurs ayant des sites non activés | ||
| + | SITE_DISABLE=$EXEC_PATH/ | ||
| + | |||
| + | # Fichier de définitions de services Nagios | ||
| + | SERVICE=/ | ||
| + | |||
| + | # Liste des serveurs à ignorer | ||
| + | SERVER_IGNORE=$EXEC_PATH/ | ||
| + | |||
| + | # Liste des sites à ignorer | ||
| + | SITE_IGNORE=$EXEC_PATH/ | ||
| + | |||
| + | ##### Préparation ##### | ||
| + | |||
| + | # Purge de l' | ||
| + | rm -f $LOG_FILE | ||
| + | |||
| + | # Début du traitement | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Vérification de l' | ||
| + | PREFLIGHT=$(/ | ||
| + | if [[ $PREFLIGHT -eq 1 ]] | ||
| + | then | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | else | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | send-report -f $REPORT -a $MAIL -m " | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | exit 2 | ||
| + | fi | ||
| + | |||
| + | # Vérification du dépôt local | ||
| + | if [ -d $LOCAL ] | ||
| + | then | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Nettoyage du dépôt | ||
| + | cd $LOCAL | ||
| + | rm -rf ./* | ||
| + | |||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | else | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Création du dépôt | ||
| + | mkdir -p $LOCAL | ||
| + | |||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | fi | ||
| + | |||
| + | # Nettoyage du fichier d' | ||
| + | rm -f $SERVER_ERROR $SITE_ERROR $SITE_NEW $SITE_GOOD $REPORT $SITE_DISABLE | ||
| + | touch $SERVER_ERROR $SITE_ERROR $SITE_NEW $SITE_GOOD $REPORT $SITE_DISABLE | ||
| + | |||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Création de la liste des serveurs web | ||
| + | APACHE_A=$(curl -s -k -u $USER: | ||
| + | APACHE_B=$(curl -s -k -u $USER: | ||
| + | APACHE=$(echo $APACHE_A $APACHE_B) | ||
| + | |||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | ##### Boucle de traitement des serveurs ##### | ||
| + | |||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Boucle | ||
| + | for SERVER in $(echo $APACHE) | ||
| + | do | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Vérification de la présence du site dans la liste des sites à ignorer | ||
| + | TEST_IGNORE=$(cat $SERVER_IGNORE | grep -i $SERVER | wc -l) | ||
| + | if [[ $TEST_IGNORE -eq 0 ]] | ||
| + | then | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | else | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | continue | ||
| + | fi | ||
| + | |||
| + | # Récupération des fichiers du dépôt externe | ||
| + | cd $LOCAL | ||
| + | wget --user=$DRIVE_USER --password=$DRIVE_PASS https:// | ||
| + | wget --user=$DRIVE_USER --password=$DRIVE_PASS https:// | ||
| + | |||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Vérification de la présence de la liste d' | ||
| + | if [ ! -e $LOCAL/ | ||
| + | then | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout du serveur à la liste des serveurs en erreurs | ||
| + | echo $SERVER >> $SERVER_ERROR | ||
| + | |||
| + | # Passage au serveur suivant | ||
| + | continue | ||
| + | else | ||
| + | # Vérification de la date du fichier d' | ||
| + | STATE_DATE=$(cat $LOCAL/ | ||
| + | if [ " | ||
| + | then | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout du serveur à la liste des serveurs en erreurs | ||
| + | echo $SERVER >> $SERVER_ERROR | ||
| + | |||
| + | # Passage au serveur suivant | ||
| + | continue | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | # Vérification de la présence de la liste des sites dans le dépôt local | ||
| + | if [ ! -e $LOCAL/ | ||
| + | then | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout du serveur à la liste des serveurs en erreurs | ||
| + | echo $SERVER >> $SERVER_ERROR | ||
| + | |||
| + | # Passage au serveur suivant | ||
| + | continue | ||
| + | fi | ||
| + | |||
| + | # Vérification des différences enable-available | ||
| + | DIFF=$(cat $LOCAL/ | ||
| + | if [ " | ||
| + | then | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout du serveur à la liste des serveurs en erreurs | ||
| + | echo $SERVER >> $SITE_DISABLE | ||
| + | fi | ||
| + | |||
| + | # A ce stade, les fichiers du dépôt sont présent et à jour. On attaque donc la boucle de vérification des sites. | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | ##### Boucle de traitement des sites ##### | ||
| + | for SITE in $(cat $LOCAL/ | ||
| + | do | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Vérification de la présence du site dans la liste des sites à ignorer | ||
| + | TEST_IGNORE=$(cat $SITE_IGNORE | grep -i $SITE | wc -l) | ||
| + | if [[ $TEST_IGNORE -eq 0 ]] | ||
| + | then | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | else | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | continue | ||
| + | fi | ||
| + | |||
| + | # Vérification du l' | ||
| + | IS_CHECKED=$(grep -i " | ||
| + | if [[ $IS_CHECKED -eq 0 ]] | ||
| + | then | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Test connectivité du site | ||
| + | HTTP=$(/ | ||
| + | |||
| + | # Traitement selon le résultat du test | ||
| + | case " | ||
| + | 0|1) | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Vérification du code de retour | ||
| + | CODE=$(echo $HTTP | awk ' | ||
| + | case " | ||
| + | 400) | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout à la liste des sites à ignorer | ||
| + | echo $SITE >> $SITE_IGNORE | ||
| + | |||
| + | # Fin de l' | ||
| + | ;; | ||
| + | 404) | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout à la liste des sites à ignorer | ||
| + | echo $SITE >> $SITE_IGNORE | ||
| + | |||
| + | # Fin de l' | ||
| + | ;; | ||
| + | 401) | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout à la liste des sites à ignorer | ||
| + | echo $SITE >> $SITE_IGNORE | ||
| + | |||
| + | # Fin de l' | ||
| + | ;; | ||
| + | 403) | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout à la liste des sites à ignorer | ||
| + | echo $SITE >> $SITE_IGNORE | ||
| + | |||
| + | # Fin de l' | ||
| + | ;; | ||
| + | *) | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout du check au fichier de configuration de Nagios | ||
| + | echo "" | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | |||
| + | # Vérification de la configuration Nagios | ||
| + | PREFLIGHT=$(/ | ||
| + | if [[ $PREFLIGHT -eq 1 ]] | ||
| + | then | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout du site dans le fichier des sites valides | ||
| + | echo $SITE >> $SITE_GOOD | ||
| + | echo $SITE >> $SITE_NEW | ||
| + | else | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Désactivation du fichier de service | ||
| + | mv $SERVICE $SERVICE.lock | ||
| + | |||
| + | # Nouveau test | ||
| + | PREFLIGHT=$(/ | ||
| + | if [[ $PREFLIGHT -eq 1 ]] | ||
| + | then | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | send-report -f $REPORT -a $MAIL -m "[ WARN ] Arrêt suite à l' | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | exit 1 | ||
| + | else | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | send-report -f $REPORT -a $MAIL -m "[ CRIT ] Arrêt suite à l' | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | exit 2 | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | # Fin de l' | ||
| + | ;; | ||
| + | |||
| + | # Fin du choix | ||
| + | esac | ||
| + | |||
| + | # Fin de l' | ||
| + | ;; | ||
| + | 2) | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout du site dans le fichier d' | ||
| + | echo $SITE >> $SITE_ERROR | ||
| + | |||
| + | # Fin de l' | ||
| + | ;; | ||
| + | *) | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout du site dans le fichier d' | ||
| + | echo $SITE >> $SITE_ERROR | ||
| + | |||
| + | # Fin de l' | ||
| + | ;; | ||
| + | esac | ||
| + | else | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Ajout du site dans le fichier des sites valides | ||
| + | echo $SITE >> $SITE_GOOD | ||
| + | fi | ||
| + | |||
| + | # Fin du traitement pour le site | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | done | ||
| + | |||
| + | # Fin du traitement pour le serveur | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | done | ||
| + | |||
| + | # Fin de la boucle des serveur | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | ##### Suppression des services Nagios obsolètes ##### | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Création de la liste des sites supervisés selon Nagios | ||
| + | NAGIOS_VISION=$(grep -i " | ||
| + | |||
| + | # Variable contenant les sites supervisés selon le script | ||
| + | SCRIPT_VISION=$(cat $SITE_GOOD) | ||
| + | |||
| + | # Liste des sites ne devant plus être supervisés | ||
| + | OUTDATED=$(echo " | ||
| + | |||
| + | # Boucle de suppression | ||
| + | for SITE in $(echo $OUTDATED) | ||
| + | do | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Préparation à la suppression | ||
| + | DESCRIPTION_LINE=$(grep -n " | ||
| + | if [ "$( echo $DESCRIPTION_LINE | grep -v [^0-9])" | ||
| + | then | ||
| + | # Balise de début et de fin | ||
| + | START=$(($DESCRIPTION_LINE - 4)) | ||
| + | STOP=$(($DESCRIPTION_LINE + 3)) | ||
| + | |||
| + | # Suppression du service | ||
| + | sed -i " | ||
| + | |||
| + | # Vérification de la configuration de nagios | ||
| + | PREFLIGHT=$(/ | ||
| + | if [[ $PREFLIGHT -eq 1 ]] | ||
| + | then | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | else | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Désactivation du fichier de service | ||
| + | mv $SERVICE $SERVICE.lock | ||
| + | |||
| + | # Nouveau test | ||
| + | PREFLIGHT=$(/ | ||
| + | if [[ $PREFLIGHT -eq 1 ]] | ||
| + | then | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | send-report -f $REPORT -a $MAIL -m "[ WARN ] Arrêt suite à une erreur lors de la suppression d'un site sur Nagios. Nagios actif." | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | exit 1 | ||
| + | else | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | send-report -f $REPORT -a $MAIL -m "[ CRIT ] Arrêt suite à une erreur lors de la suppression d'un site sur Nagios. Nagios inactf." | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | exit 2 | ||
| + | fi | ||
| + | fi | ||
| + | else | ||
| + | # Log | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | fi | ||
| + | done | ||
| + | |||
| + | # Fin de suppression des services | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | |||
| + | # Redémarrage de Nagios | ||
| + | service nagios restart | ||
| + | |||
| + | # Vérification | ||
| + | if [ " | ||
| + | then | ||
| + | # Log et sortie | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | send-report -f $REPORT -a $MAIL -m "[ GOOD ] Arrêt normal du script." | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | exit 0 | ||
| + | else | ||
| + | # Log et sortie | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | send-report -f $REPORT -a $MAIL -m "[ CRIT ] Echec du redémarrage de Nagios à la fin du traitement." | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | exit 2 | ||
| + | fi | ||
| + | |||
| + | # Si à ce stade, on est toujours pas sortie, on indique une erreur inconnue | ||
| + | send-report -f $REPORT -a $MAIL -m "[ UNKNOWN ] Sortie du script sur une erreur inconnue." | ||
| + | add-log -f $LOG_FILE -l " | ||
| + | exit 3</ | ||
| + | |||
| + | ==== Cron ==== | ||
| + | |||
| + | <sxh bash> | ||
| + | |||
| + | 30 9 * * 1-5 root / | ||
| + | |||
| + | ==== Nagios ==== | ||
| + | |||
| + | Tous les services sont définie dans un fichier unique définie par la variable '' | ||
| + | |||
| + | La commande Nagios '' | ||
| + | < | ||
| + | command_name | ||
| + | command_line | ||
| + | }</ | ||
| + | |||
| + | Le programme '' | ||
| + | |||
| + | ===== Pour aller plus loin ===== | ||
| + | |||
| + | J'ai rajouté des services Nagios afin de vérifier si des erreurs étaient signalées dans les fichiers de réponse pour les serveurs en erreur (server-error.list) et pour les sites en erreur (site-error.list). Celà permet d' | ||
| + | |||
| + | ==== Définitions des services ==== | ||
| + | |||
| + | < | ||
| + | use | ||
| + | host_name | ||
| + | service_description | ||
| + | check_command | ||
| + | contact_groups | ||
| + | } | ||
| + | |||
| + | define service{ | ||
| + | use | ||
| + | host_name | ||
| + | service_description | ||
| + | check_command | ||
| + | contact_groups | ||
| + | }</ | ||
| + | |||
| + | ==== Définitions des commandes ==== | ||
| + | |||
| + | < | ||
| + | command_name | ||
| + | command_line | ||
| + | } | ||
| + | |||
| + | define command { | ||
| + | command_name | ||
| + | command_line | ||
| + | }</ | ||
| + | |||
| + | ==== Script check-server-error.sh ==== | ||
| + | |||
| + | <sxh bash># | ||
| + | |||
| + | # Fichier de réponse des sites en erreur | ||
| + | FILE=/ | ||
| + | |||
| + | # Vérification de la présence du fichier de réponse | ||
| + | if [ ! -e $FILE ] | ||
| + | then | ||
| + | # Erreur inconnue | ||
| + | echo " | ||
| + | exit 3 | ||
| + | else | ||
| + | # Vérification du nombre le ligne | ||
| + | COUNT=$(cat $FILE | wc -l) | ||
| + | if [ " | ||
| + | then | ||
| + | # Tout va bien | ||
| + | echo "GOOD - Aucun serveur en erreur" | ||
| + | exit 0 | ||
| + | else | ||
| + | # Erreur | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | # Si on est toujours pas sortie alors erreur inconnue | ||
| + | echo " | ||
| + | exit 3</ | ||
| + | |||
| + | ==== Script check-site-error.sh ==== | ||
| + | |||
| + | <sxh bash># | ||
| + | |||
| + | # Fichier de réponse des sites en erreur | ||
| + | FILE=/ | ||
| + | |||
| + | # Vérification de la présence du fichier de réponse | ||
| + | if [ ! -e $FILE ] | ||
| + | then | ||
| + | # Erreur inconnue | ||
| + | echo " | ||
| + | exit 3 | ||
| + | else | ||
| + | # Vérification du nombre le ligne | ||
| + | COUNT=$(cat $FILE | wc -l) | ||
| + | if [ " | ||
| + | then | ||
| + | # Tout va bien | ||
| + | echo "GOOD - Aucun site en erreur" | ||
| + | exit 0 | ||
| + | else | ||
| + | # Erreur | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | # Si on est toujours pas sortie alors erreur inconnue | ||
| + | echo " | ||
| + | exit 3</ | ||
| + | |||
| + | ===== Conclusion ===== | ||
| + | A partir de maintenant, chaque fois qu'un serveur Apache sera sous surveillance, | ||
| - | --- // | ||
| ~~DISCUSSION~~ | ~~DISCUSSION~~ | ||