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
fi

Wir 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
fi

Wir 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>&1

15.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
fi

Wir 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>&1

Wenn 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
fi

Et 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

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.