Dämon-Überwachung mit monit


1. Einleitung

monit (http://www.tildeslash.com/monit/) ist ein Programm zur Überwachung von Dämonen/Programmen. Verstirbt ein überwachtes Programm, so kann es von monit (optional) auch neu gestartet werden. Auf jeden Fall aber wird an eine oder mehrere Adressen ein Mail geschickt, das entsprechende Informationen beinhaltet. monit funktioniert für alle Programme, für die eine PID Datei vorhanden ist (normalerweise unter /var/run/).

2. Installation

Die Dateien zu monit sind verfügbar unter ftp://zid-luxinst.uibk.ac.at/mirror/monit/. Es sollte das dort installierte RPM Paket verwendet werden (angepasst an Red Hat Linux). Dieses funktioniert ab Red Hat Linux Version 7.0.

Sollte dessen Verwendung nicht möglich sein, ist es am besten, aus dem Source RPM (monit*.src.rpm) die Binärdateien neu zu erstellen:

rpmbuild --rebuild monit-*.src.rpm

3. Konfiguration

In den folgenden Beispielen wird als Port für den in monit integrierten HTTP Server 21543 verwendet. Dies ist gegebenenfalls in den Beispielen anzupassen. Der HTTP Server - auch wenn in der Beispielkonfiguration nur für localhost zugänglich - sollte durch Firewalling zusätzlich geschützt werden.

(Dies ist nur notwendig, wenn nicht ohnehin schon das von uns vorgeschlagene Regelwerk eingesetzt wird, das standardmäßig alle Verbindungen verbietet.)

ipchains:

-A input -s 0/0 -d 0/0 21543 -p tcp -y -j REJECT

iptables:

-A INPUT -p tcp -m tcp --dport 21543 --syn -j REJECT

Von monit soll auch der NTP Daemon überwacht werden. Dieser legt jedoch standardmäßig keine PID Datei an. Um dies zu erreichen, fügt man in der Datei /etc/sysconfig/ntpd der Variable OPTIONS Folgendes hinzu:

-p /var/run/ntpd.pid

Nun kann man die monit Konfigurationsdatei /etc/monitrc erstellen. Es folgt ein kurzes kommentiertes Beispiel:

Beispiel 1. monit Beispielconfiguration

# SMTP Server festlegen
set mailserver smtp.uibk.ac.at
# logging nach syslog
set logfile syslog
# monit HTTP server auf Port 21543 starten
# Zugriff nur von localhost erlauben
set httpd port 21543 and use address localhost
        allow localhost

# at daemon mit PID Datei /var/run/atd.pid ueberwachen
check atd with pidfile /var/run/atd.pid
        # alerts an 2 Administratoren senden
        alert user1@uibk.ac.at
        alert user2@uibk.ac.at
        # Methoden zum Starten und Stoppen von atd
        start program = "/etc/init.d/atd start"
        stop program = "/etc/init.d/atd stop"
        # alert generieren, wenn sich das Binary waehrend des Laufes aendert
        checksum /usr/sbin/atd
        # wenn innerhalb von 3 Ueberpruefungszyklen 2 Neustarts erfolgen,
        # dann timeout (keinen Neustart mehr versuchen)
        timeout (2, 3)
        # wenn CPU- oder Memory-Usage > 5%, dann alert generieren
        if cpuusage is greater than 5.0 for 2 cycles then alert
        if memusage is greater than 5.0 for 2 cycles then alert
        # automatisch neu starten wenn verstorben
        autostart yes


check apache with pidfile /var/run/httpd.pid
        alert user1@uibk.ac.at
        start program = "/etc/init.d/httpd start"
        stop program = "/etc/init.d/httpd stop"
        checksum /usr/sbin/httpd
        # Ueberpruefung auch durch Verbindung auf Port 80 (TCP)
        # bei HTTP kann auch wirklich ein protokollspezifischer
        # Befehl abgesetzt werden (GET /index.html)
        # port 80 type tcp protocol http
        #        and use request "/index.html"
        timeout (2, 3)
        if cpuusage is greater than 20.0 for 2 cycles then alert
        if memusage is greater than 20.0 for 2 cycles then alert
        # kein automatischer Neustart
        autostart no

Die Konfigurationsdatei kann im laufenden Betrieb geändert werden, monit übernimmt die Änderungen automatisch.

Ist alles wie gewünscht konfiguriert, können Sie nun die Konfiguration testen:

/sbin/service monit status

Die Ausgabe sollte wie folgt aussehen - monit ist nicht gestartet, für alle anderen Programme wird zurückgegeben, dass sie laufen:

Checking for monit: monit is stopped
monit daemon uptime:
Cannot connect to the monit server to get extended process data.
Process 'apache' is running with pid [624] Uptime: 42d 21h 44m
Process 'atd' is running with pid [715] Uptime: 42d 21h 44m

Damit können Sie monit nun aktivieren und starten:

/sbin/chkconfig monit on
/sbin/service monit start

4. Verwendung

Aus Sicherheitsgründen wird der integrierte HTTP Server nur für localhost zugänglich gemacht, womit der Zugriff über eine nette Web Interface deaktiviert wird.

Treten irgendwelche Probleme oder Fehler auf, wird ein Mail verschickt.

Will man den Status aktiv überprüfen, so verwendet man:

/sbin/service monit status

Es ist zu beachten, dass monit die Dienste immer wieder neu startet, wenn autostart auf yes gesetzt ist. Damit kann es zu ganz netten Effekten kommen, wenn man einen Dienst zu Wartungszwecken anhält ...

Als Alternative kann man autostart kurzfristig auf „no“ setzten. Einfacher ist es, das Programm über monit zu beenden (ersetzen Sie [progname] dabei durch den in der monit Konfiguration angegebenen Namen des Dienstes):

monit stop [progname]

Anmerkung

Wird [progname] weggelassen, werden ALLE von monit überwachten Dienste angehalten!

Nach getaner Arbeit startet man nun das Programm wieder:

monit start [progname]