Monitoraggio Server · 7 min read · Oct 09, 2025
Il Carico Bilanciato Perfetto & Cluster Web ad Alta Disponibilità Con 2 Server Che Eseguono Xen Su Ubuntu 8.04 Hardy Heron - Pagina 9
15. Script personalizzati per il monitoraggio (lb1, lb2, web1, web2)
Ho creato alcuni script bash per monitorare l’intero setup (sono un po’ brutti ma funzionano). Se li migliori, sentiti libero di inviarmeli!
15.1 Monitoraggio da lb1.example.com
Prima dobbiamo installare sendmail affinché lb1.example.com possa inviare email :
apt-get install sendmail
Il primo script controllerà se il bilanciatore di carico di backup (lb2.example.com) è ancora disponibile per subentrare :
vi /root/lb2_check
#!/bin/bash
# Controllo bilanciatore di carico di backup
# Copyright (c) 2008 blogama.org
# Questo script è concesso in licenza sotto GNU GPL versione 2.0 o superiore
# ---------------------------------------------------------------------
### Questo script esegue 1 verifica ###
### 1) Controlla se il bilanciatore di carico di backup è fallito e invia notifica via email ###
### Da modificare ###
EMAIL="[email protected]"
###### Non apportare modifiche sotto ######
### Binaries ###
MAIL=$(which mail)
### Per ripristinare all'originale quando il problema è risolto ###
if [ $1 ]; then
if [ $1=="fix" ]; then
rm /root/lb2_problem.txt
> /var/log/ha-log
exit 1;
fi
fi
### Controlla se già notificato ###
cd /root
if [ -f lb2_problem.txt ]; then
exit 1;
fi
### Controlla se Heartbeat è in esecuzione in hot standby ###
tail /var/log/ha-log 2>&1 | grep "Asking other side for ping node count"
if [ "$?" -ne "1" ]; then
echo "Il bilanciatore di carico di backup è fallito" > /root/lb2_problem.txt
$MAIL -s "Problema bilanciatore di carico di backup" $EMAIL < /root/lb2_problem.txt
fiRendiamo questo script eseguibile :
chmod +x /root/lb2_check
Se lb2.example.com fallisce, creerà un file /root/lb2_problem.txt e invierà una notifica via email. Finché il file lb2_problem.txt è presente, non verrà controllato di nuovo. Inoltre, dobbiamo svuotare il file di log una volta che il problema è risolto affinché lo script funzioni correttamente.
Una volta risolto il problema su lb2.example.com, eseguire manualmente :
/root/lb2_check fix
Il prossimo script controllerà se ci sono porte che hanno fallito su web1 o web2 controllando il file di log di ldirectord. C’è già una notifica via email con ldirectord ma invia milioni di notifiche, il mio ne invia solo una fino a quando non risolvi il problema :
vi /root/ports_failed
e fallo apparire così :
#!/bin/bash
# Controllo guasto porte Ldirectord
# Copyright (c) 2008 blogama.org
# Questo script è concesso in licenza sotto GNU GPL versione 2.0 o superiore
# ---------------------------------------------------------------------
### Questo script esegue 1 verifica ###
### 1) Controlla il guasto delle porte sui server bilanciati ###
### Da modificare ###
EMAIL="[email protected]"
###### Non apportare modifiche sotto ######
### Binaries ###
MAIL=$(which mail)
#per ripristinare all'originale quando il problema è risolto
if [ $1 ]; then
if [ $1=="fix" ]; then
rm /root/port_problem.txt
> /var/log/ldirectord.log
fi
fi
###controlla se già notificato###
cd /root
if [ -f port_problem.txt ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
exit 1;
fi
### Controlla se la porta è fallita ###
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 "Problema porte vedere logfile /var/log/port_problem.log" > /root/port_problem.txt
$MAIL -s "Alcune porte sono fallite" $EMAIL < /root/port_problem.txt
fiRendiamolo eseguibile :
chmod +x /root/ports_failed
Questo è lo stesso del primo script, una volta risolto il problema devi eseguire :
/root/ports_failed fix
per far funzionare di nuovo lo script.
Ora aggiungi entrambi gli script al tuo crontab :
crontab -e
* * * * * /root/ports_failed >/dev/null 2>&1
* * * * * /root/lb2_check >/dev/null 2>&115.2 Monitoraggio da lb2.example.com
Il monitoraggio del secondo bilanciatore di carico è importante perché ci dirà se il bilanciatore di carico principale è fallito e, se lo è, tenere d’occhio i guasti delle porte su web1 e web2.
Prima dobbiamo installare sendmail affinché lb2.example.com possa inviare email :
apt-get install sendmail
vi /root/ports_check
E incolla questo script :
#!/bin/bash
# Controllo guasto porte Ldirectord
# Copyright (c) 2008 blogama.org
# Questo script è concesso in licenza sotto GNU GPL versione 2.0 o superiore
# ---------------------------------------------------------------------
### Questo script esegue 2 verifiche ###
### 1) controlla se il bilanciatore di carico principale è fallito e invia notifica via email ###
### 2) Se il bilanciatore di carico principale è fallito, controlla il guasto delle porte sui server bilanciati ###
### Da modificare ###
EMAIL="[email protected]"
###### Non apportare modifiche sotto ######
### Binaries ###
MAIL=$(which mail)
### Data ###
NOW=$(date)
### Per ripristinare all'originale quando il problema è risolto ###
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
#controlla se ldirectord è in esecuzione su lb2.example.com (significa che lb1.example.com è fallito)
#$LDIRECTORD /etc/ha.d/ldirectord.cf status 2>&1 | grep running
cat /var/log/ha-log | grep "takeover complete" > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
###controlla se già notificato###
cd /root
if [ -f port_problem.txt ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
exit 1;
fi
### Controlla se la porta è fallita ###
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 "Problema porte vedere logfile /var/log/port_problem.log" > /root/port_problem.txt
$MAIL -s "Alcune porte sono fallite" $EMAIL < /root/port_problem.txt
fi
### Controlla se già notificato che il bilanciatore di carico principale è fallito ###
cd /root
if [ -f server_problem_notified.txt ]; then
exit 1;
fi
### Notifica che il bilanciatore di carico principale è fallito ###
cd /root
MESSAGE="$NOW : Il bilanciatore di carico principale è fallito"
echo $MESSAGE > lb1_problem.txt
$MAIL -s "Il bilanciatore di carico principale è fallito" $EMAIL < /root/lb1_problem.txt
echo "notificato" > server_problem_notified.txt
fiRendiamolo eseguibile :
chmod +x /root/ports_check
E lo aggiungiamo al nostro crontab :
crontab -e
* * * * * /root/ports_failed >/dev/null 2>&1Quando ricevi una notifica dallo script, per favore esegui successivamente :
/root/ports_check fix
15.3 Monitoraggio da web1 & web2
Il monitoraggio del cluster web è già parzialmente fatto con monit e munin.
La parte che non è ancora coperta è il monitoraggio della replica MySQL.
Si prega di leggere il seguente articolo :
Riparare la replica master-master di MySQL
Il monitoraggio di MySQL è facoltativo, ma su un server di produzione, possono verificarsi problemi con la replica MySQL, quindi consiglio vivamente di utilizzare questi script o qualcosa di simile per controllare la coerenza dei database.
15.4 Monitoraggio da server remoto
Questa parte aggiunge ulteriore sicurezza controllando porte importanti (25,53,80,443) da un server remoto (installare dns-utils per dig):
#!/bin/bash
# Script per controllare porte importanti su server web remoto
# Copyright (c) 2008 blogama.org
# Questo script è concesso in licenza sotto GNU GPL versione 2.0 o superiore
# ---------------------------------------------------------------------
### Questo script esegue una verifica sulle porte 25, 53, 80 e 443 ###
### Dopo 2 controlli falliti invierà una notifica via email ###
### Da modificare ###
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"
###### Non apportare modifiche sotto ######
### Binaries ###
MAIL=$(which mail)
TELNET=$(which telnet)
DIG=$(which dig)
### Controlla se già notificato###
cd /root
if [ -f server_problem.txt ]; then
exit 1;
fi
### Test SMTP ###
(
echo "quit"
) | $TELNET $MAILSERVERIP 25 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "PORTA CONNESSA"
else
if [ -f server_problem_first_time_25.txt ]; then
echo "PORTA 25 NON CONNESSA" >> /root/server_problem.txt
else
echo "NON CONNESSA" > /root/server_problem_first_time_25.txt
fi
fi
### Test HTTP ###
(
echo "quit"
) | $TELNET $WEBSERVERIP 80 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "PORTA CONNESSA"
else
if [ -f server_problem_first_time_80.txt ]; then
echo "PORTA 80 NON CONNESSA" >> /root/server_problem.txt
else
echo "NON CONNESSA" > /root/server_problem_first_time_80.txt
fi
fi
### Test HTTPS###
(
echo "quit"
) | $TELNET $WEBSERVERIP 443 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "PORTA CONNESSA"
else
if [ -f server_problem_first_time_443.txt ]; then
echo "PORTA 443 NON CONNESSA" >> /root/server_problem.txt
else
echo "NON CONNESSA" > /root/server_problem_first_time_443.txt
fi
fi
### Test DNS ###
$DIG $DOMAINTOCHECKDNS @$DNSSERVERIP | grep $DOMAINIP
if [ "$?" -ne "1" ]; then
echo "PORTA CONNESSA"
else
if [ -f server_problem_first_time_53.txt ]; then
echo "PORTA 53 NON CONNESSA" >> /root/server_problem.txt
else
echo "NON CONNESSA" > /root/server_problem_first_time_53.txt
fi
fi
### Invia notifica via email dopo 2 controlli falliti ###
if [ -f server_problem.txt ]; then
$MAIL -s "Problema server" $EMAIL < /root/server_problem.txt
fiEt voilà! Sentiti libero di inviarmi email private a admin [at] marchost.com o di lasciare commenti qui o sulla mia pagina : blogama.org
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.