Surveillance serveur · 7 min read · Oct 09, 2025
Le Cluster Web Parfait Équilibré et Haute Disponibilité Avec 2 Serveurs Fonctionnant Sous Xen Sur Ubuntu 8.04 Hardy Heron - Page 9
15. Scripts personnalisés pour la surveillance (lb1, lb2, web1, web2)
J’ai créé quelques scripts bash pour surveiller l’ensemble de la configuration (ils sont un peu laids mais ils fonctionnent). Si vous les améliorez, n’hésitez pas à me les envoyer par mail !
15.1 Surveillance depuis lb1.example.com
Tout d’abord, nous devons installer sendmail afin que lb1.example.com puisse envoyer des mails :
apt-get install sendmail
Le premier script vérifiera si le répartiteur de charge de secours (lb2.example.com) est toujours disponible pour prendre le relais :
vi /root/lb2_check
#!/bin/bash
# Vérification du répartiteur de charge de secours
# Copyright (c) 2008 blogama.org
# Ce script est sous licence GNU GPL version 2.0 ou supérieure
# ---------------------------------------------------------------------
### Ce script effectue 1 vérification ###
### 1) Vérifie si le répartiteur de charge de secours a échoué et envoie une notification par mail ###
### À modifier ###
EMAIL="[email protected]"
###### Ne pas modifier en dessous ######
### Binaires ###
MAIL=$(which mail)
### Pour restaurer à l'original lorsque le problème est résolu ###
if [ $1 ]; then
if [ $1=="fix" ]; then
rm /root/lb2_problem.txt
> /var/log/ha-log
exit 1;
fi
fi
### Vérifier si déjà notifié ###
cd /root
if [ -f lb2_problem.txt ]; then
exit 1;
fi
### Vérifier si Heartbeat fonctionne en attente chaude ###
tail /var/log/ha-log 2>&1 | grep "Demande à l'autre côté de compter les nœuds ping"
if [ "$?" -ne "1" ]; then
echo "Le répartiteur de charge de secours a échoué" > /root/lb2_problem.txt
$MAIL -s "Problème de répartiteur de charge de secours" $EMAIL < /root/lb2_problem.txt
fiNous rendons ce script exécutable :
chmod +x /root/lb2_check
Si lb2.example.com échoue, alors il créera un fichier /root/lb2_problem.txt et enverra une notification par mail. Tant que le fichier lb2_problem.txt est présent, il ne vérifiera plus. De plus, nous devons vider le fichier journal une fois le problème résolu pour que le script fonctionne correctement.
Une fois le problème résolu sur lb2.example.com, veuillez exécuter manuellement :
/root/lb2_check fix
Le script suivant vérifiera si des ports ont échoué sur web1 ou web2 en vérifiant le fichier journal de ldirectord. Il y a déjà une notification par mail avec ldirectord mais elle envoie des millions de notifications, la mienne n’en envoie qu’une jusqu’à ce que vous résolviez le problème :
vi /root/ports_failed
et faites-le ressembler à ceci :
#!/bin/bash
# Vérification des échecs de ports Ldirectord
# Copyright (c) 2008 blogama.org
# Ce script est sous licence GNU GPL version 2.0 ou supérieure
# ---------------------------------------------------------------------
### Ce script effectue 1 vérification ###
### 1) Vérifie les échecs de ports sur les serveurs équilibrés ###
### À modifier ###
EMAIL="[email protected]"
###### Ne pas modifier en dessous ######
### Binaires ###
MAIL=$(which mail)
#pour restaurer à l'original lorsque le problème est résolu
if [ $1 ]; then
if [ $1=="fix" ]; then
rm /root/port_problem.txt
> /var/log/ldirectord.log
fi
fi
### vérifier si déjà notifié ###
cd /root
if [ -f port_problem.txt ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
exit 1;
fi
### Vérifier si un port a échoué ###
cat /var/log/ldirectord.log 2>&1 | grep Deleted
if [ "$?" -ne "1" ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
cat "Problème de ports voir le fichier journal /var/log/port_problem.log" > /root/port_problem.txt
$MAIL -s "Certains ports ont échoué" $EMAIL < /root/port_problem.txt
fiNous le rendons exécutable :
chmod +x /root/ports_failed
C’est la même chose que le premier script, une fois le problème résolu, vous devez exécuter :
/root/ports_failed fix
afin de faire fonctionner à nouveau le script.
Maintenant, ajoutez les deux scripts à votre crontab :
crontab -e
* * * * * /root/ports_failed >/dev/null 2>&1
* * * * * /root/lb2_check >/dev/null 2>&115.2 Surveillance depuis lb2.example.com
La surveillance du deuxième répartiteur de charge est importante car elle nous indiquera si le répartiteur de charge principal a échoué et, si c’est le cas, gardez un œil sur les échecs de ports sur web1 et web2.
Tout d’abord, nous devons installer sendmail afin que lb2.example.com puisse envoyer des mails :
apt-get install sendmail
vi /root/ports_check
Et collez ce script :
#!/bin/bash
# Vérification des échecs de ports Ldirectord
# Copyright (c) 2008 blogama.org
# Ce script est sous licence GNU GPL version 2.0 ou supérieure
# ---------------------------------------------------------------------
### Ce script effectue 2 vérifications ###
### 1) Vérifie si le répartiteur de charge principal a échoué et envoie une notification par mail ###
### 2) Si le répartiteur de charge principal a échoué, vérifie les échecs de ports sur les serveurs équilibrés ###
### À modifier ###
EMAIL="[email protected]"
###### Ne pas modifier en dessous ######
### Binaires ###
MAIL=$(which mail)
### Date ###
NOW=$(date)
### Pour restaurer à l'original lorsque le problème est résolu ###
if [ $1 ]; then
cd /root/
if [ $1=="fix" ]; then
if [ -f lb1_problem.txt ]; then
rm /root/lb1_problem.txt
fi
if [ -f port_problem.txt ]; then
rm /root/port_problem.txt
fi
if [ -f /root/server_problem_notified.txt ]; then
rm /root/server_problem_notified.txt
fi
> /var/log/ldirectord.log
> /var/log/ha-log
exit 1;
fi
fi
# vérifier si ldirectord fonctionne sur lb2.example.com (signifie que lb1.example.com a échoué)
#$LDIRECTORD /etc/ha.d/ldirectord.cf status 2>&1 | grep running
cat /var/log/ha-log | grep "prise de contrôle complète" > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
### vérifier si déjà notifié ###
cd /root
if [ -f port_problem.txt ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
exit 1;
fi
### Vérifier si un port a échoué ###
cat /var/log/ldirectord.log 2>&1 | grep Deleted
if [ "$?" -ne "1" ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
echo "Problème de ports voir le fichier journal /var/log/port_problem.log" > /root/port_problem.txt
$MAIL -s "Certains ports ont échoué" $EMAIL < /root/port_problem.txt
fi
### Vérifier si déjà notifié que le répartiteur de charge principal a échoué ###
cd /root
if [ -f server_problem_notified.txt ]; then
exit 1;
fi
### Notifier que le répartiteur de charge principal a échoué ###
cd /root
MESSAGE="$NOW : Le répartiteur de charge principal a échoué"
echo $MESSAGE > lb1_problem.txt
$MAIL -s "Le répartiteur de charge principal a échoué" $EMAIL < /root/lb1_problem.txt
echo "notifié" > server_problem_notified.txt
fiNous le rendons exécutable :
chmod +x /root/ports_check
Et nous l’ajoutons à notre crontab :
crontab -e
* * * * * /root/ports_failed >/dev/null 2>&1Lorsque vous recevez une notification du script, veuillez exécuter ensuite :
/root/ports_check fix
15.3 Surveillance depuis web1 & web2
La surveillance du cluster web est déjà partiellement effectuée avec monit et munin.
La partie qui n’est pas encore couverte est la surveillance de la réplication MySQL.
Veuillez lire l’article suivant :
Réparer la réplication master-master MySQL
La surveillance de MySQL est optionnelle mais sur un serveur de production, des problèmes peuvent survenir avec la réplication MySQL, donc je recommande vraiment d’utiliser ces scripts ou quelque chose de similaire pour vérifier la cohérence des bases de données.
15.4 Surveillance depuis un serveur distant
Cette partie ajoute une sécurité supplémentaire en vérifiant les ports importants (25,53,80,443) depuis un serveur distant (installer dns-utils pour dig) :
#!/bin/bash
# Script pour vérifier les ports importants sur un serveur web distant
# Copyright (c) 2008 blogama.org
# Ce script est sous licence GNU GPL version 2.0 ou supérieure
# ---------------------------------------------------------------------
### Ce script effectue une vérification sur les ports 25, 53, 80 et 443 ###
### Après 2 vérifications échouées, il enverra une notification par mail ###
### À modifier ###
WEBSERVERIP="192.168.1.106"
MAILSERVERIP="192.168.1.106"
EMAIL="[email protected]"
DNSSERVERIP="192.168.1.106"
DOMAINTOCHECKDNS="example.com"
DOMAINIP="192.168.1.106"
###### Ne pas modifier en dessous ######
### Binaires ###
MAIL=$(which mail)
TELNET=$(which telnet)
DIG=$(which dig)
### Vérifier si déjà notifié###
cd /root
if [ -f server_problem.txt ]; then
exit 1;
fi
### Tester SMTP ###
(
echo "quit"
) | $TELNET $MAILSERVERIP 25 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "PORT CONNECTÉ"
else
if [ -f server_problem_first_time_25.txt ]; then
echo "PORT 25 NON CONNECTÉ" >> /root/server_problem.txt
else
echo "NON CONNECTÉ" > /root/server_problem_first_time_25.txt
fi
fi
### Tester HTTP ###
(
echo "quit"
) | $TELNET $WEBSERVERIP 80 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "PORT CONNECTÉ"
else
if [ -f server_problem_first_time_80.txt ]; then
echo "PORT 80 NON CONNECTÉ" >> /root/server_problem.txt
else
echo "NON CONNECTÉ" > /root/server_problem_first_time_80.txt
fi
fi
### Tester HTTPS###
(
echo "quit"
) | $TELNET $WEBSERVERIP 443 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "PORT CONNECTÉ"
else
if [ -f server_problem_first_time_443.txt ]; then
echo "PORT 81 NON CONNECTÉ" >> /root/server_problem.txt
else
echo "NON CONNECTÉ" > /root/server_problem_first_time_443.txt
fi
fi
### Tester DNS ###
$DIG $DOMAINTOCHECKDNS @$DNSSERVERIP | grep $DOMAINIP
if [ "$?" -ne "1" ]; then
echo "PORT CONNECTÉ"
else
if [ -f server_problem_first_time_53.txt ]; then
echo "PORT 53 NON CONNECTÉ" >> /root/server_problem.txt
else
echo "NON CONNECTÉ" > /root/server_problem_first_time_53.txt
fi
fi
### Envoyer une notification par mail après 2 vérifications échouées ###
if [ -f server_problem.txt ]; then
$MAIL -s "Problème de serveur" $EMAIL < /root/server_problem.txt
fiEt voilà ! N’hésitez pas à m’envoyer des emails privés à admin [at] marchost.com ou à poster des commentaires ici ou sur ma page : blogama.org
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.