Es ist nicht nur wichtig den Server an sich zu überwachen, also die Hardware, sondern auch die Dienste die darauf laufen. Es kann - unter welchen Umständen auch immer - passieren, dass sich ein Dienst aufhängt oder abstürzt oder oder oder. Jedenfalls ist es dann hilfreich, wenn man jemanden hat, der den Ausfall zum einen bemerkt und zum anderen den Dienst wieder startet.

Wir verwenden dafür "monit", Monit kann nicht nur Services überwachen, sondern auch Dateien, Ressourcenverbrauch etc. Die Einsatzmöglichkeiten sind sehr vielfältig. Nähere Infos findest du auf der Webseite von monit.

  1. Als erstes installieren wir monit aus den Ports. Wie das geht sollte mittlerweile bekannt sein:

    # cd /usr/ports/sysutils/monit/ && make install clean

  2. Die Konfiguration wird über die Datei '/usr/local/etc/monitrc' vorgenommen. Hierin definieren wir also alle Dienste die überwacht werden sollen, und was passieren soll wenn der Dienst nicht mehr reagiert. Anstatt die Beispieldatei zu kopieren (diese enthält sehr viele Beispiele und sehr viele Kommentare), solltest du eine neue Datei anlegen, die nur die Einstellungen enthält die du brauchst. Achte darauf, dass die Berechtigungen auf "700" geändert werden.

  3. Folgende Einstellungen solltest du vornehmen:
    • set daemon 120: Setze das Prüfintervall auf 120 Sekunden
    • set logfile syslog facility log_daemon: Hier legen wir fest, dass per syslog geloggt wird
    • set mailserver 10.0.0.1: Mailserver für den Versand der Statusmeldungen (10.0.0.1 ist die Mailserver-Jail)
    • set mail-format { from: hostmaster@<domain.de>
      subject: $SERVICE $EVENT at $DATE
      message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
      }:
       hostmaster@<domain.de> ist die Mailadresse, an die im Fehlerfalle eine E-Mail geschickt wird. Das kann auch ein externer Mailserver sein.

  4. Nachdem wir die grundsätzliche Konfiguration nun abgeschlossen haben, müssen wir natürlich noch die einzelnen Services eintragen, die überwacht werden sollen. Ein Beispiel für lighttpd sähe wie folgt aus:

    check process lighttpd with pidfile /var/run/lighttpd.pid
    group lighttpd
    start program = "/usr/local/etc/rc.d/lighttpd start"
    stop program = "/usr/local/etc/rc.d/lighttpd stop"
    if failed host 10.0.0.2 port 80
    protocol http then restart
    if 5 restarts within 5 cycles then timeout


    Wie du sehen kannst, lässt sich die Syntax von monit sehr gut lesen. Im Einzelnen heisst diese Konfiguration, dass
    • der Prozess "lighttpd" überwacht werden soll, der das pid-File "/var/run/lighttpd.pid" anlegt,
    • der Prozess von der Gruppe "lighttpd" gestartet werden darf,
    • das Startskript für diesen Prozess unter "/usr/local/etc/rc.d/lighttpd start" liegt,
    • das Stopskript unter "/usr/local/etc/rc.d/lighttpd stop" liegt.

    Zudem wird festgelegt, dass der Host "10.0.0.2" auf dem Port 80 überwacht werden soll, wobei der Dienst neugestartet werden soll, falls er nicht erreichbar ist. Allerdings, sollten innerhalb von 5 Überwachungszyklen (set daemon 120) 5 Neustarts erforderlich sein, dann beende den Prozess und starte ihn nicht mehr.

  5. Auf diese Weise kannst du ganz verschiedene Dienste konfigurieren. Viele Beispiele findest du auch im Netz. Schliesslich müssen wir - wie alle anderen Dienste auch - in der '/etc/rc.conf' aktivieren. Das machen wir mit folgender Zeile:

    monit_enable="YES"

  6. Anschliessend können wir monit starten.

    # /usr/local/etc/rc.d/monit start

Hinweis: Diese Konfigurationen bzw. Vorgehensweise funktioniert natürlich nur ausserhalb von unseren Jails. Um nicht in jeder Jail monit zu konfigurieren, was natürlich möglich wäre, muss man ein paar Anpassungen vornehmen, die ich allerdings auf einer Unterseite dieser Anleitung beschreiben möchte.