Monit: Der Wachhund für deinen Server

Man kann seinen favorisierten Terminalemulator anwerfen, Screen starten und darin dann nützliche Applikationen für die Konsole ausführen, die jedes Detail des eigenen Rechners auf Schritt und Tritt überwachen. Die Methode verliert jedoch ihren Reiz, sobald man schlafen muss oder mehr als nur eine Handvoll Daten im Blick behalten möchte.
Um meinen Server zu überwachen benutze ich zur Zeit Munin und Monit, die sich gegenseitig sehr gut ergänzen. Ersterer überwacht alle wichtigen Aspekte des Systems wie Systemlast, Speicherverbrauch, Festplattenbelegung, Traffic, ja sogar die Anzahl der Spieler und kann all das mit Hilfe von Graphen anschaulich visualisieren, wodurch sich Trends frühzeitig erkennen lassen. Monit hingegen ist ideal dafür geeignet um Prozesse zu überwachen, diese gegebenenfalls neuzustarten und beim Erreichen kritischer Schwellwerte Alarm per E-Mail-Benachrichtigung auszulösen.
In diesem Beitrag beschreibe ich in Kürze, was Monit auf meinem Spieleserver mit Debian für Aufgaben hat und wie man ihn unkompliziert einrichtet.

Installation

aptitude install monit

Damit Monit bei jedem Neustart automatisch gestartet wird, muss folgende Variable in /etc/default/monit gesetzt sein.

startup=1

Konfiguration

Die zentrale Konfigurationsdatei von Monit liegt in /etc/monit/monitrc und ist genauso wie das Handbuch, man monit, ausgezeichnet dokumentiert. Die offizielle Dokumentation ist ausführlich und mit vielen Beispielen gespickt.

set daemon 120
Überprüft die Dienste alle 120 Sekunden.
set logfile syslog facility log_daemon
Alle Nachrichten werden nach syslog vom Benutzer Munin geloggt. Hier könnte auch der volle Pfad zu einer separaten Logdatei stehen.
set idfile /var/.monit.id
Der Ort, wo die einzigartige ID der Monitinstanz gespeichert wird
set statefile /var/.monit.state
Diese Datei speichert den aktuellen Zustand der überwachten Prozesse, welcher durch die persistente Speicherung auch nach einem Neustart von Monit wiedererkannt wird.
set mailserver localhost
Hier wird ggf. ein Backupserver und externer Mailserver eingetragen. Ich habe mir einen eigenen aufgesetzt.
set alert root@localhost
Die E-Mail-Adresse, welche in einem Problemfall alarmiert werden soll.

Allgemeine Systemressourcen

Hier werden Systemlast, Speicherauslastung und CPU-Beanspruchung überprüft. Die Syntax ist sehr übersichtlich und selbsterklärend. Wenn ein Wert einen Schwellwert überschreitet soll alarmiert werden.

check system localhost
if loadavg (1min) > 2 then alert
if loadavg (5min) > 1 then alert
if memory usage > 75% then alert
if cpu usage (user) > 70% then alert
if cpu usage (system) > 45% then alert
if cpu usage (wait) > 45% then alert

Prozesse überwachen

Die meisten Einträge sehen bei mir wie der untere aus. Der OpenArena-Server wird automatisch neugestartet, wenn der Verfügbarkeitstest auf Port 27960 mit dem UDP-Protokoll fehlschlägt. Der Konfigurationsblock lässt sich leicht auf Dienste wie SSH, Lighttpd oder Exim übertragen. Sollte der Prozess fünf Mal innerhalb von fünf Zyklen neugestartet worden sein, soll Monit die Versuche einstellen.

check process openarena-server with pidfile /var/run/openarena-server.pid
start program = "/etc/init.d/oa_ded start"
stop program = "/etc/init.d/oa_ded stop"
if failed host 134.0.24.218 port 27960 type udp then restart
if 5 restarts within 5 cycles then timeout
alert root@localhost but not on { instance pid }

Möchte man nur über bestimmte Warnmeldungen per Mail informiert werden, hilft die Konstruktion alert but not on weiter.

Apache Webserver

Das Beispiel stammt direkt aus der monitrc und verdeutlicht noch einmal wie logisch die Konfiguration aufgebaut ist. Monit ist z.B in der Lage pro Prozess die CPU-Auslastung zu überwachen und bei 60% zu alarmieren und dann bei 80% den Webserver neuzustarten und bestehende Verbindungen somit zu trennen. Des Weiteren lässt sich das auch auf den Speicherverbrauch und Kindprozesse anwenden.

check process apache with pidfile /usr/local/apache/logs/httpd.pid
start program = "/etc/init.d/httpd start" with timeout 60 seconds
stop program = "/etc/init.d/httpd stop"
if cpu > 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if totalmem > 200.0 MB for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop

Dateitests

Besonders nützlich sind auch Dateitests. Zum einen ist es ein Sicherheitswerkzeug. Geänderte Dateiberechtigungen an wichtigen Systemdateien können sofort erkannt werden, ein veralteter Zeitstempel könnte auf ein Problem mit einem Dienst hindeuten. Außerdem kann die Dateigröße überwacht und z.B. ein Skript ausgeführt werden, welches die Datei an einen anderen Ort verschiebt.

check file openarenalog with path /home/openarena/.openarena/baseoa/games.log
if failed permission 700 then alert
if failed uid openarena then alert
if failed gid openarena then alert
if timestamp > 15 minutes then alert
if size > 100 MB then exec "/usr/local/bin/meinskript.sh" as uid openarena and gid openarena

Monit im Browser anschauen

set httpd port 2812 and
allow admin:monit

Monit bringt einen eigenen Webserver mit, der auf Port 2812 die überwachten Prozesse übersichtlich darstellt. Dabei ist es möglich diese Dienste im Webinterface neuzustarten oder Monit anzuweisen die Überwachung kurzfristig auszusetzen. Den Port muss man mit der Firewall nicht freigeben. Man kann z.B einen SSH-Tunnel zum Betrachten nutzen und dann mit http://localhost:2812 im eigenen Browser als Benutzer admin mit dem Passwort monit sich das Ganze ansehen. Z.B.
ssh -p 44443 -L 2812:deinserver:2812 user@deinserver

Fazit

Monit ist leicht zu installieren und ebenso leicht zu konfigurieren. Ist das einmal erledigt verrichtet er unaufdringlich im Hintergrund seine Arbeit und schlägt sofort an, wenn ein Grenzwert überschritten wurde. Ich vermisste an der Version in Debian Squeeze nur die Möglichkeit die Überwachung auch mal für einen kurzen Zeitraum zu unterbinden, wenn z.B ein Backup gemacht wird und deswegen einige Werte kurzzeitig überschritten werden. Die Funktion ist in Wheezy aber vorhanden und findet sich unter "Service Poll Time".

7 Replies to “Monit: Der Wachhund für deinen Server”

  1. Monit ist schon ein super Werkzeug.
    Auch sehr schön ist die Möglichkeit, andere Rechner im Netzwerk anpingen zu lassen um zu sehen ob sie online sind. Oder auch ob ein bestimmter Port/Service seinen Dienst tut.
    So habe ich auf Arbeit immer einen schnellen Überblick welche Geräte den an sind ohne gleich Cacti bemühen zu müssen (was übrigens echt klasse ist!).

  2. Cacti hatte ich auch eine Weile im Blick, ich wollte mir aber keinen MySQL Server für mein Miniprojekt installieren. Die gesparten MB stecke ich dann lieber in ein paar Spiele. 🙂

  3. Klar, dass wäre Überdimensioniert.
    Cacti macht auch erst Sinn wenn mehrere Server hat und andere Netzwerkgeräte.
    Du weißt nicht zufällig ob es mit Monit möglich ist, den Speicherverbrauch bei einem RAID zu überwachen? Bei normalen Partitionen ist das ja kein Problem…

  4. Danke für die Anleitung!
    Ich hab monit nun zum Monitoring des ssh-Dämons auf meinem Raspberry Pi im Einsatz. Läuft einwandfrei 😉 In der Firma monitoren wir ~100 Rechner/Server/Geräte mit ~2000 Services mit Nagios, aber für einzelne Dienste ist monit genial!
    Grüße, Martin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.