Es gibt Dienste wie Nagios oder Cacti, die es einem Admin ermöglichen von extern sämtliche Dienste und Zustände eines Servers zu überwachen.
Heute möchte ich ein Tool vorstellen, dass nicht nur überwacht, sondern aktiv in das Geschehen eingreift.
Monit bietet verschiedene Kernfunktionen an: Überwachung von Ports, von Diensten, von Prozessen. Sowie Aktives Restarten dieser Dienste nach vorgegebenen Kriterien und Benachrichtigung via E-Mail.
Wer mehr wissen will besucht am Besten die offizielle Webseite.
Ich empfehle dringend das Tool selbst zu kompilieren, da die in Debian bereit gestellte Version buggy ist.
Installation von benötigen Libs und Paketen:
apt-get install gcc make libc6-dev flex libssl-dev openssl byacc btyacc bison
Installation von Monit:
cd /usr/src
wget http://www.tildeslash.com/monit/dist/monit-4.10.1.tar.gz
tar xvfz monit-4.10.1.tar.gz
cd monit-4.10.1
./configure
make
make install
mkdir -p /var/lib/monit/monit.state
Nun fehlt nur noch eine Konfigurationsdatei um Monit zu sagen, was es tun soll.
Als Randbemerkung sei angemerkt dass die E-Mail Benachrichtigung nur funktioniert, wenn ein Mailserver plus das Paket mailx installiert ist.
Erstellen der Konfiguration:
nano /etc/monit/monitrc
# dort können alle auf der Webseiten von monit gennanten Funktionen eingetragen werden
# Als kleines Beispiel dient folgende Konfiguration:
## E-Mail Formatierung
set mail-format {
from: monit@meinem-server.de
subject: $SERVICE $EVENT at $DATE
message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
}
## Einstellen der E-Mail Adresse für Alarme. Die "but not on { changed }" Section bedeutet
## dass bei einem Neustart des Dienstes (Verändertes Pid-File) keine E-Mail versendet wird
set alert alarm-postfach@meine-domain.de but not on { changed }
## Überwachung des MySQL Daemons
check process mysql with pidfile /var/run/mysqld/mysqld.pid
group mysql
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host 127.0.0.1 port 3306 protocol mysql then restart
if 5 restarts within 5 cycles then timeout
Anschließend kann Monit gestartet werden (Hier wird alle 180Sekunden geprüft):
/usr/local/bin/monit -d 180 -c /etc/monit/monitrc -s /var/lib/monit/monit.state
Wer möchte kann dies natürlich auch in einem init-Script erledigen.
Dies ist natürlich nur eine minimal Überwachung, es finden sich jedoch unter http://www.tildeslash.com/monit/doc/examples.php sehr gute Beispiele, die es einem ermöglichen nahezu alles zu überwachen.