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 15:06] – [Script check-site-error.sh] 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 ==== | ||
| Ligne 23: | Ligne 31: | ||
| * 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 66: | Ligne 79: | ||
| # Mot de passe | # Mot de passe | ||
| - | PASS="password" | + | PASS="P@ssw0rd" |
| # Dépôt local | # Dépôt local | ||
| Ligne 275: | Ligne 288: | ||
| # Boucle d' | # Boucle d' | ||
| - | for SERVER in $(cat $SERVER_ERROR) | + | for SERVER in $(cat $SERVER_ERROR |
| + | 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 | do | ||
| # Ajout du serveur | # Ajout du serveur | ||
| Ligne 296: | Ligne 330: | ||
| # Boucle d' | # Boucle d' | ||
| - | for SITE in $(cat $SITE_ERROR) | + | for SITE in $(cat $SITE_ERROR |
| do | do | ||
| # Ajout du site | # Ajout du site | ||
| Ligne 317: | Ligne 351: | ||
| # Boucle d' | # Boucle d' | ||
| - | for SERVEUR | + | for SERVER |
| do | do | ||
| # Ajout du serveur | # Ajout du serveur | ||
| echo "< | 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 | done | ||
| Ligne 338: | Ligne 393: | ||
| # Boucle d' | # Boucle d' | ||
| - | for SITE in $(cat $SITE_NEW) | + | for SITE in $(cat $SITE_NEW |
| do | do | ||
| # Ajout du site | # Ajout du site | ||
| Ligne 359: | Ligne 414: | ||
| # Boucle d' | # Boucle d' | ||
| - | for SITE in $(cat $SITE_GOOD) | + | for SITE in $(cat $SITE_GOOD |
| do | do | ||
| # Ajout du site | # Ajout du site | ||
| Ligne 386: | Ligne 441: | ||
| # Mode verbeux pour debogage | # Mode verbeux pour debogage | ||
| VERBOSE=" | VERBOSE=" | ||
| + | |||
| + | # Chemin du script | ||
| + | EXEC_PATH=/ | ||
| # Fichier log | # Fichier log | ||
| - | LOG_FILE=/ | + | LOG_FILE=$EXEC_PATH/ |
| # Fichier de rapport HTML | # Fichier de rapport HTML | ||
| - | REPORT=/ | + | REPORT=$EXEC_PATH/ |
| # Adresse mail du restinataire du rapport | # Adresse mail du restinataire du rapport | ||
| Ligne 406: | Ligne 464: | ||
| # Mot de passe drive | # Mot de passe drive | ||
| - | DRIVE_PASS=" | + | DRIVE_PASS=" |
| - | # Dépôt local | + | # Dépôt |
| - | LOCAL="/ | + | LOCAL=$EXEC_PATH/repository |
| - | # User Nagios SiteA & SiteB & SiteC | + | # User Nagios SiteA & SiteB |
| USER=" | USER=" | ||
| Ligne 418: | Ligne 476: | ||
| # Mot de passe Nagios SiteA | # Mot de passe Nagios SiteA | ||
| - | PASS_A=" | + | PASS_A=" |
| # Filtre de recherche SiteA | # Filtre de recherche SiteA | ||
| Ligne 427: | Ligne 485: | ||
| # Mot de passe Nagios SiteB | # Mot de passe Nagios SiteB | ||
| - | PASS_B=" | + | PASS_B=" |
| # Filtre de recherche SiteB | # Filtre de recherche SiteB | ||
| PATTERN_B=" | PATTERN_B=" | ||
| - | # URL Nagios SiteC | + | # Filtre de recherche |
| - | NAGIOS_C=" | + | PATTERN_FINAL=" |
| - | + | ||
| - | # Mot de passe Nagios SiteC | + | |
| - | PASS_C=" | + | |
| - | + | ||
| - | # Filtre de recherche | + | |
| - | PATTERN_C=" | + | |
| # Fichier de réponse pour les serveurs en erreur | # Fichier de réponse pour les serveurs en erreur | ||
| - | SERVER_ERROR=/ | + | SERVER_ERROR=$EXEC_PATH/ |
| # Fichier de réponse pour les sites en erreur | # Fichier de réponse pour les sites en erreur | ||
| - | SITE_ERROR=/ | + | SITE_ERROR=$EXEC_PATH/ |
| # Fichier de réponse pour les sites supervisés | # Fichier de réponse pour les sites supervisés | ||
| - | SITE_GOOD=/ | + | SITE_GOOD=$EXEC_PATH/ |
| # Fichier de réponse pour les sites nouvellement supervisés | # Fichier de réponse pour les sites nouvellement supervisés | ||
| - | SITE_NEW=/ | + | SITE_NEW=$EXEC_PATH/ |
| # Fichier de réponse pour les serveurs ayant des sites non activés | # Fichier de réponse pour les serveurs ayant des sites non activés | ||
| - | SITE_DISABLE=/ | + | SITE_DISABLE=$EXEC_PATH/ |
| # Fichier de définitions de services Nagios | # Fichier de définitions de services Nagios | ||
| SERVICE=/ | SERVICE=/ | ||
| + | |||
| + | # Liste des serveurs à ignorer | ||
| + | SERVER_IGNORE=$EXEC_PATH/ | ||
| + | |||
| + | # Liste des sites à ignorer | ||
| + | SITE_IGNORE=$EXEC_PATH/ | ||
| ##### Préparation ##### | ##### Préparation ##### | ||
| Ligne 515: | Ligne 573: | ||
| # Log | # Log | ||
| - | add-log -f $LOG_FILE -l " | + | add-log -f $LOG_FILE -l " |
| ##### Boucle de traitement des serveurs ##### | ##### Boucle de traitement des serveurs ##### | ||
| Ligne 527: | Ligne 585: | ||
| # Log | # Log | ||
| add-log -f $LOG_FILE -l " | 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 | # Récupération des fichiers du dépôt externe | ||
| Ligne 595: | Ligne 665: | ||
| # Log | # Log | ||
| add-log -f $LOG_FILE -l " | 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' | # Vérification du l' | ||
| - | IS_CHECKED=$(curl -s -k -u $USER: | + | IS_CHECKED=$(grep -i "$PATTERN_FINAL |
| if [[ $IS_CHECKED -eq 0 ]] | if [[ $IS_CHECKED -eq 0 ]] | ||
| then | then | ||
| Ligne 612: | Ligne 694: | ||
| add-log -f $LOG_FILE -l " | add-log -f $LOG_FILE -l " | ||
| - | # | + | # |
| - | echo | + | CODE=$(echo $HTTP | awk '{print $4}') |
| - | echo " | + | case "$CODE" in |
| - | echo " | + | 400) |
| - | echo " | + | # Log |
| - | echo | + | add-log |
| - | echo " | + | |
| - | echo " | + | |
| - | echo " | + | |
| - | # Vérification de la configuration Nagios | + | # Ajout à la liste des sites à ignorer |
| - | PREFLIGHT=$(/ | + | echo |
| - | if [[ $PREFLIGHT -eq 1 ]] | + | |
| - | then | + | |
| - | # Log | + | |
| - | add-log -f $LOG_FILE -l " | + | |
| - | # Ajout du site dans le fichier des sites valides | + | # Fin de l' |
| - | echo $SITE >> $SITE_GOOD | + | ;; |
| - | echo $SITE >> $SITE_NEW | + | 404) |
| - | else | + | # Log |
| - | # Log | + | add-log -f $LOG_FILE -l "WARN" -m " |
| - | add-log -f $LOG_FILE -l "CRIT" -m " | + | |
| - | # Désactivation du fichier de service | + | # Ajout à la liste des sites à ignorer |
| - | mv | + | echo |
| - | # Nouveau test | + | # Fin de l'option |
| - | PREFLIGHT=$(/ | + | ;; |
| - | if [[ $PREFLIGHT -eq 1 ]] | + | 401) |
| - | then | + | |
| # Log | # Log | ||
| - | add-log -f $LOG_FILE -l "WARN" -m "[ NAGIOS ] Fichier de définition de services désactivé." | + | add-log -f $LOG_FILE -l " |
| - | add-log -f $LOG_FILE -l " | + | |
| - | add-log -f $LOG_FILE -l "CRIT" -m "[ $SERVER ] [ $SITE ] Echec de l' | + | # Ajout à la liste des sites à ignorer |
| - | send-report -f $REPORT -a $MAIL -m "[ WARN ] Arrêt suite à l' | + | echo |
| - | add-log -f $LOG_FILE -l " | + | |
| - | exit 1 | + | # Fin de l' |
| - | else | + | ;; |
| + | 403) | ||
| # Log | # Log | ||
| - | add-log -f $LOG_FILE -l " | + | add-log -f $LOG_FILE -l " |
| - | add-log -f $LOG_FILE -l " | + | |
| - | add-log -f $LOG_FILE -l " | + | # Ajout à la liste des sites à ignorer |
| - | send-report -f $REPORT -a $MAIL -m "[ CRIT ] Arrêt suite à l' | + | echo $SITE >> $SITE_IGNORE |
| - | add-log -f $LOG_FILE -l " | + | |
| - | exit 2 | + | # Fin de l' |
| - | fi | + | ;; |
| - | fi | + | *) |
| + | # 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' | # Fin de l' | ||
| Ligne 720: | Ligne 851: | ||
| # Préparation à la suppression | # Préparation à la suppression | ||
| - | DESCRIPTION_LINE=$(grep -n " | + | DESCRIPTION_LINE=$(grep -n " |
| if [ "$( echo $DESCRIPTION_LINE | grep -v [^0-9])" | if [ "$( echo $DESCRIPTION_LINE | grep -v [^0-9])" | ||
| then | then | ||
| Ligne 916: | Ligne 1047: | ||
| ===== Conclusion ===== | ===== Conclusion ===== | ||
| - | A partir de maintenant, chaque fois qu'un serveur Apache sera sous surveillance, | + | A partir de maintenant, chaque fois qu'un serveur Apache sera sous surveillance, |
| - | --- // | ||
| ~~DISCUSSION~~ | ~~DISCUSSION~~ | ||