Monit ist ein mächtiges Tool um lokale Serverdienste oder auch entferne Systeme zuverlässig zu überwachen. So lassen sich zum Beispiel Apache, Postfix oder SpamAssassin bei zu hoher Last automatisch neu starten. Monit kommt bereits mit einer Vielzahl fertiger Konfigurationsdateien für die gängigsten Dienste. Dieser Beitrag gibt einen kurzen Überblick  über die Installation und den Einsatz mit Apache, Postfix und SpamAssassin.

Das Watchdog Modul von Plesk basiert ebenfalls auf Monit, jedoch lässt dieses nur ganz einfache Konfigurationen zu. Wer die Überwachung wichtiger Systemdienste smarter gestalten will, kann Monit parallel zu Plesk Watchdog installieren.

Monit installieren

Die Installation von Monit gestaltet sich unter Linux mit dem entsprechenden Paketmanager gewohnt einfach:

Die Konfiguration für Monit befindet sich in /etc/monit und hat die folgende Struktur:

  • monitrc: Die Konfigurationsdatei von Monit.
  • conf-available: Ordner mit Beispielkonfigurationen verschiedener Systemdienste.
  • conf-enabled: Dieser Ordner enthält die momentan aktivierten Dienst-Konfigurationen.
  • config.d: Wie conf-enabled. In unseren Beispielen werden wir diesen Ordner verwenden.
  • templates: Dieser Ordner enthält häufig benutzte „Code-Schnipsel“

Monit konfigurieren

Über monitrc werden alle Dateien, die sich in den Ordnern conf-enabled und config.d befinden automatisch nachgeladen. Da wir nur den Ordner config.d benutzen möchten, kommentieren wir das Nachladen des 2. Ordners am Ende von monitrc durch Voranstellen einer Raute aus:

Damit wir alle wesentlichen Änderungen der Hauptkonfiguration an einer Stelle haben, legen wir folgende Datei an:
/etc/monit/conf.d/main

Der Inhalt von „main“ überschreibt alle gleichen Inhalte von monitrc. Somit ersparen wir uns langes Suchen in der relativ langen Hauptkonfiguration.

Die o.g. Konfiguration hat folgende Funktion:

  • Monit überprüft alle konfigurierten Systemdienste alle 120 Sekunden.
  • Es wird eine Log-Datei erzeugt.
  • Alarm-Meldungen werden an eine bestimmte Emailadresse gesendet.
  • Es wird ein externer Mailserver mit entsprechenden Zugangsdaten verwendet. Das macht Sinn, da wir ja evtl. Ausfälle unseres eigenen Mailservers kontrollieren möchten.
  • Der Inhalt der Alarmmeldungen wird festgelegt.
  • Der interne HTTP-Server von Monit wird initialisiert. Dazu später mehr.

Apache Webserver mit Monit überwachen und automatisch neu starten

Als Nächstes erzeugen wird die Konfiguration zum Überwachen des Apache Webservers:
/etc/monit/conf.d/apache2

Monit überwacht den Systemdienst Apache anhand seines Namens und Prozess ID. Wenn folgende Bedingungen erfüllt sind, wird Apache neu gestartet:

  • Es wurden mehr als 250 Child-Prozesse erzeugt.
  • Der HTTP-Dienst für die URL http://domain.com/index.php benötigt länger als 25 Sekunden um eine Seite auszuliefern.
  • Die Anzahl der Prozesse in der System Run Queue beträgt 5 Minuten lang mehr als 10, gemessen innerhalb von 8 Zyklen (8 x 120 Sekunden)

Das Aktivieren der letzten Zeile bewirkt, dass Monit die Überwachung nach 5 Neustarts von Apache beendet.

Postfix Mailserver mit Monit überwachen und automatisch neu starten

Das Script zum Überwachen des Postfix Maildienstes ist ähnlich aufgebaut:
/etc/monit/conf.d/postfix

Neben dem laufenden Prozess prüft Monit hier zusätzlich die Erreichbarkeit von Postfix per SMTP-Protokoll.

Spam Assassin mit Monit überwachen und automatisch neu starten

Als letztes Beispiel folgt analog die Überwachung von Spam Assassin:
/etc/monit/conf.d/spamassassin

Weitere Beispiele für viele andere Systemdienste sind im Ordner /etc/monit/conf-available zu finden. Es lohnt auf alle Fälle, sich tiefer in die mächtige Skriptsprache von Monit anhand des Manuals einzulesen:

Konfiguration von Monit überprüfen und starten

Mit dem folgenden Befehl überprüfen wir die Syntax unserer Konfigdateien:

Danach starten wir Monit mit

und kontrollieren mit

ob der Monit Daemon läuft.

Monit startet nicht ?

Wenn als Status diese Meldung erscheint, ist etwas schief gelaufen:
Status not available — the monit daemon is not running

In den meisten Fällen muss das Init-Script von Monit etwas modifiziert werden. Sollte das Problem dadurch nicht gelöst worden sein, findet man weitere Hinweise in der Log-Datei:
/var/log/monit.log

Das folgende Init-Script ersetzt das Original Init Script von Monit unter:
/etc/init.d/monit

SSH-Tunneling: Monit per Browser sicher überwachen

Zum Abschluss noch ein Tipp, wie man Monit bequem und sicher über den Webbrowser überwachen kann.

Eingangs hatten wir den Webbrowser von Monit in /etc/monit/conf.d/main so konfiguriert, dass er nur auf Verbindungen auf localhost reagiert. Über einen SSH-Tunnel können wir nun den lokalen Port 2812 auf dem Server an unseren Client-Rechner z.B. an Port 8000 weiterleiten. Das geschieht über einen verschlüsselten Tunnel, ohne einen Port in der Firewall des Servers oder dem Client-Rechner zu öffnen.

Hierzu geben wir am Client-Rechner folgenden Befehl ein:

Nach Eingabe des root Passworts lassen wir den Befehl so im Terminal stehen und geben im Browser die folgende URL ein um auf den Monit Webserver zuzugreifen:

In der Anmeldung geben wir dann als User admin und als Passwort monit ein. Als Belohnung erhalten wir ein schönes, übersichtliches Web-Interface :-)