Server Monitoring · 6 min read · Oct 09, 2025
Der perfekte Lastenausgeglichene & Hochverfügbarkeits-Webcluster mit 2 Servern, die Xen auf Ubuntu 8.04 Hardy Heron ausführen - Seite 9
15. Benutzerdefinierte Skripte zur Überwachung (lb1, lb2, web1, web2)
Ich habe ein paar Bash-Skripte erstellt, um die gesamte Einrichtung zu überwachen (sie sind ein bisschen hässlich, aber sie funktionieren). Wenn du sie besser machst, kannst du sie mir gerne per E-Mail zuschicken!
15.1 Überwachung von lb1.example.com
Zuerst müssen wir sendmail installieren, damit lb1.example.com E-Mails senden kann:
apt-get install sendmail
Das erste Skript überprüft, ob der Backup-Lastenausgleich (lb2.example.com) noch verfügbar ist, um die Übernahme zu übernehmen:
vi /root/lb2_check
#!/bin/bash
# Überprüfung des Backup-Lastenausgleichs
# Copyright (c) 2008 blogama.org
# Dieses Skript ist lizenziert unter GNU GPL Version 2.0 oder höher
# ---------------------------------------------------------------------
### Dieses Skript führt 1 Überprüfung durch ###
### 1) Überprüfen, ob der Backup-Lastenausgleich ausgefallen ist und E-Mail-Benachrichtigung senden ###
### Zu ändern ###
EMAIL="[email protected]"
###### Keine Änderungen unterhalb vornehmen ######
### Binärdateien ###
MAIL=$(which mail)
### Um auf die Originalversion zurückzusetzen, wenn das Problem behoben ist ###
if [ $1 ]; then
if [ $1=="fix" ]; then
rm /root/lb2_problem.txt
> /var/log/ha-log
exit 1;
fi
fi
### Überprüfen, ob bereits benachrichtigt wurde ###
cd /root
if [ -f lb2_problem.txt ]; then
exit 1;
fi
### Überprüfen, ob Heartbeat im heißen Standby läuft ###
tail /var/log/ha-log 2>&1 | grep "Asking other side for ping node count"
if [ "$?" -ne "1" ]; then
echo "Backup-Lastenausgleich ausgefallen" > /root/lb2_problem.txt
$MAIL -s "Problem mit dem Backup-Lastenausgleich" $EMAIL < /root/lb2_problem.txt
fiWir machen dieses Skript ausführbar:
chmod +x /root/lb2_check
Wenn lb2.example.com ausfällt, wird eine Datei /root/lb2_problem.txt erstellt und eine E-Mail-Benachrichtigung gesendet. Solange die Datei lb2_problem.txt vorhanden ist, wird nicht erneut überprüft. Außerdem müssen wir die Protokolldatei leeren, sobald das Problem behoben ist, damit das Skript ordnungsgemäß funktioniert.
Sobald das Problem auf lb2.example.com behoben ist, führe bitte manuell aus:
/root/lb2_check fix
Das nächste Skript überprüft, ob auf web1 oder web2 irgendwelche Ports ausgefallen sind, indem es die ldirectord-Protokolldatei überprüft. Es gibt bereits eine E-Mail-Benachrichtigung mit ldirectord, aber sie sendet Millionen von Benachrichtigungen, meine sendet nur eine, bis du das Problem behoben hast:
vi /root/ports_failed
und lasse es so aussehen:
#!/bin/bash
# Überprüfung des Portausfalls von Ldirectord
# Copyright (c) 2008 blogama.org
# Dieses Skript ist lizenziert unter GNU GPL Version 2.0 oder höher
# ---------------------------------------------------------------------
### Dieses Skript führt 1 Überprüfung durch ###
### 1) Überprüfen auf Portausfälle bei den lastenausgeglichenen Servern ###
### Zu ändern ###
EMAIL="[email protected]"
###### Keine Änderungen unterhalb vornehmen ######
### Binärdateien ###
MAIL=$(which mail)
# Um auf die Originalversion zurückzusetzen, wenn das Problem behoben ist
if [ $1 ]; then
if [ $1=="fix" ]; then
rm /root/port_problem.txt
> /var/log/ldirectord.log
fi
fi
### Überprüfen, ob bereits benachrichtigt wurde ###
cd /root
if [ -f port_problem.txt ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
exit 1;
fi
### Überprüfen, ob der Port ausgefallen ist ###
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 "Ports-Problem siehe Protokolldatei /var/log/port_problem.log" > /root/port_problem.txt
$MAIL -s "Einige Ports sind ausgefallen" $EMAIL < /root/port_problem.txt
fiWir machen es ausführbar:
chmod +x /root/ports_failed
Das ist dasselbe wie das erste Skript, sobald das Problem behoben ist, musst du ausführen:
/root/ports_failed fix
um das Skript wieder auszuführen.
Jetzt füge beide Skripte zu deinem Crontab hinzu:
crontab -e
* * * * * /root/ports_failed >/dev/null 2>&1
* * * * * /root/lb2_check >/dev/null 2>&115.2 Überwachung von lb2.example.com
Die Überwachung des zweiten Lastenausgleichs ist wichtig, da sie uns mitteilt, ob der Master-Lastenausgleich ausgefallen ist, und wenn ja, die Ports auf web1 und web2 im Auge behalten muss.
Zuerst müssen wir sendmail installieren, damit lb2.example.com E-Mails senden kann:
apt-get install sendmail
vi /root/ports_check
Und füge dieses Skript ein:
#!/bin/bash
# Überprüfung des Portausfalls von Ldirectord
# Copyright (c) 2008 blogama.org
# Dieses Skript ist lizenziert unter GNU GPL Version 2.0 oder höher
# ---------------------------------------------------------------------
### Dieses Skript führt 2 Überprüfungen durch ###
### 1) Überprüfen, ob der Master-Lastenausgleich ausgefallen ist und E-Mail-Benachrichtigung senden ###
### 2) Wenn der Master-Lastenausgleich ausgefallen ist, überprüfen auf Portausfälle bei den lastenausgeglichenen Servern ###
### Zu ändern ###
EMAIL="[email protected]"
###### Keine Änderungen unterhalb vornehmen ######
### Binärdateien ###
MAIL=$(which mail)
### Datum ###
NOW=$(date)
### Um auf die Originalversion zurückzusetzen, wenn das Problem behoben ist ###
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
# Überprüfen, ob ldirectord auf lb2.example.com läuft (bedeutet, dass lb1.example.com ausgefallen ist)
#$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
### Überprüfen, ob bereits benachrichtigt wurde ###
cd /root
if [ -f port_problem.txt ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
exit 1;
fi
### Überprüfen, ob der Port ausgefallen ist ###
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 "Ports-Problem siehe Protokolldatei /var/log/port_problem.log" > /root/port_problem.txt
$MAIL -s "Einige Ports sind ausgefallen" $EMAIL < /root/port_problem.txt
fi
### Überprüfen, ob bereits benachrichtigt wurde, dass der Master-Lastenausgleich ausgefallen ist ###
cd /root
if [ -f server_problem_notified.txt ]; then
exit 1;
fi
### Benachrichtigen, dass der Master-Lastenausgleich ausgefallen ist ###
cd /root
MESSAGE="$NOW : Master-Lastenausgleich ausgefallen"
echo $MESSAGE > lb1_problem.txt
$MAIL -s "Master-Lastenausgleich ausgefallen" $EMAIL < /root/lb1_problem.txt
echo "benachrichtigt" > server_problem_notified.txt
fiWir machen es ausführbar:
chmod +x /root/ports_check
Und fügen es zu unserem Crontab hinzu:
crontab -e
* * * * * /root/ports_failed >/dev/null 2>&1Wenn du eine Benachrichtigung vom Skript erhältst, führe bitte danach aus:
/root/ports_check fix
15.3 Überwachung von web1 & web2
Die Überwachung des Webclusters ist bereits teilweise mit monit und munin durchgeführt.
Der Teil, der noch nicht abgedeckt ist, ist die Überwachung der MySQL-Replikation.
Bitte lies den folgenden Artikel:
MySQL-Master-Master-Replikation reparieren
Die MySQL-Überwachung ist optional, aber auf einem Produktionsserver können Probleme mit der MySQL-Replikation auftreten, daher empfehle ich dringend, diese Skripte oder etwas Ähnliches zu verwenden, um die Konsistenz der Datenbanken zu überprüfen.
15.4 Überwachung von einem Remote-Server
Dieser Teil fügt zusätzliche Sicherheit hinzu, indem er wichtige Ports (25,53,80,443) von einem Remote-Server aus überprüft (installiere dns-utils für dig):
#!/bin/bash
# Skript zur Überprüfung wichtiger Ports auf dem Remote-Webserver
# Copyright (c) 2008 blogama.org
# Dieses Skript ist lizenziert unter GNU GPL Version 2.0 oder höher
# ---------------------------------------------------------------------
### Dieses Skript führt eine Überprüfung auf den Ports 25, 53, 80 und 443 durch ###
### Nach 2 fehlgeschlagenen Überprüfungen wird eine E-Mail-Benachrichtigung gesendet ###
### Zu ändern ###
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"
###### Keine Änderungen unterhalb vornehmen ######
### Binärdateien ###
MAIL=$(which mail)
TELNET=$(which telnet)
DIG=$(which dig)
### Überprüfen, ob bereits benachrichtigt wurde###
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 "PORT VERBUNDEN"
else
if [ -f server_problem_first_time_25.txt ]; then
echo "PORT 25 NICHT VERBUNDEN" >> /root/server_problem.txt
else
echo "NICHT VERBUNDEN" > /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 "PORT VERBUNDEN"
else
if [ -f server_problem_first_time_80.txt ]; then
echo "PORT 80 NICHT VERBUNDEN" >> /root/server_problem.txt
else
echo "NICHT VERBUNDEN" > /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 "PORT VERBUNDEN"
else
if [ -f server_problem_first_time_443.txt ]; then
echo "PORT 81 NICHT VERBUNDEN" >> /root/server_problem.txt
else
echo "NICHT VERBUNDEN" > /root/server_problem_first_time_443.txt
fi
fi
### Test DNS ###
$DIG $DOMAINTOCHECKDNS @$DNSSERVERIP | grep $DOMAINIP
if [ "$?" -ne "1" ]; then
echo "PORT VERBUNDEN"
else
if [ -f server_problem_first_time_53.txt ]; then
echo "PORT 53 NICHT VERBUNDEN" >> /root/server_problem.txt
else
echo "NICHT VERBUNDEN" > /root/server_problem_first_time_53.txt
fi
fi
### E-Mail-Benachrichtigung nach 2 fehlgeschlagenen Überprüfungen senden ###
if [ -f server_problem.txt ]; then
$MAIL -s "Serverproblem" $EMAIL < /root/server_problem.txt
fiEt voilà! Fühle dich frei, mir private E-Mails an admin [at] marchost.com zu senden oder Kommentare hier oder auf meiner Seite zu hinterlassen: blogama.org
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.