Wer keine ganzen Netzwerke, sondern nur einzelne Server und Dienste überwachen will, dem ist die Installation von Enterprise System-Managment Lösungen wie Nagios, Groundworks oder OpenNMS möglicherweise zu aufwändig oder zu teuer. Hier bietet sich Monit an.

Zur Übersicht und einfachen Verwaltung steht ein Webinterface zur Verfügung. Monit kann nicht, wie z.B. OpenNMS, ganze Netzwerke abscannen und gefundene Host in die Überwachung miteinbeziehen oder über SNMP Informationen auswerten. Um lokale Ressourcen wie CPU Auslastung zu überwachen muss Monit auf der jeweiligen Maschine installiert sein. Services lassen sich hingegen auch remote überwachen.

Monit läuft unter unix(artigen) Betriebsystemen (Linux, FreeBSD, Solaris, OSX). Es kann sowohl die grundsätzliche Erreichbarkeit von Maschinen und Diensten prüfen, als auch Systemzustände wie CPU-, Speicher und Festplattenauslastung. Weiterhin kann das Dateisystem auf Veränderung kontrolliert werden und es können (Log)Files auf das Vorkommen bestimmter Wörter wie z.B. „panic“ oder „exited on signal“ überwacht werden.

Eine Besonderheit von Monit ist, dass es Prozesse neu starten kann. Ist beispielsweise der Webserver auf Port 80 nicht erreichbar, kann er von Monit neu gebootet werden. .

Die Installation und Konfiguration von Monit ist einfach und sehr „sprechend“. Ein lokal laufender Apache ließe sich bspw. folgendermaßen überwachen und gegebenenfalls neu booten:

(1) check process apache with pidfile "/usr/local/apache/logs/httpd.pid"
(2) start = “/etc/init.d/httpd start"
(3) stop = "/etc/init.d/httpd stop"
(4) if failed port 80 and protocol http
(5) and request "/cgi-bin/printenv" then restart
(6) if cpu usage is greater than 60 percent for 2 cycles then alert
(7) if cpu usage > 98% for 5 cycles then restart
(8) if 2 restarts within 3 cycles then timeout
(9) alert foo@bar.baz

1: Definition für Überwachung mit dem Schlüsselwort „check“
2+3: Start und Stop Befehle für den Service
4+5: Bedingung für den Restart
6: Bedingung für einen Alarm wenn Zustand für 2 Zyklen (a 120 sec.) auftritt.
7: Weitere Bedingung für Restart
8: Bedingung Timeout für die Überwachung
9: Mailadresse für Alarm

Ein Beispiel für MySQL

check process mysql with pidfile /var/run/mysqld/mysqld.pid
group database
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if cpu is greater than 85% for 6 cycles then alert
if cpu > 95% for 8 cycles then restart
if totalmem > 230.0 MB for 5 cycles then restart
if children > 30 then restart
if loadavg(5min) greater than 10 for 8 cycles then restart
if 5 restarts within 5 cycles then timeout

Zu beachten ist das man Monit nicht zu scharf für die Restart Aktionen einstellt. Sonst kann es passieren das Monit im Hintergrund versucht einen Dienst neu zu starten, den man händisch kurzfristig gestoppt hat, um ihn z.B. neu zu installieren.Ist eine entfernet Maschine erreichbar?

check host foo.bar with address 192.168.226.227
if failed icmp type echo count 10 with timeout 30 seconds
then alert

Läuft der Webserver auf einer entfernten Maschine

check host rhn.redhat.com with address rhn.redhat.com
if failed port 80 protocol http and request "/help/about.pxt"
then alert with the mail-format {subject: RedHat is down again!}
if failed port 443 type TCPSSL and protocol http
with timeout 15 seconds then alert
alert foo@bar.baz

Entfernte Services könnten auch per ssh-Befehl neu gestartet werden.Lokal kann die Auslastung einer Festplatte folgendermaßen überwacht werden:

check device disk1 with path /dev/hda1
if space usage > 80% then alert
if inode usage > 80% then alert

Oder von Einzelnen Mountpoints:

check device usr with path /usr
if space usage > 80% 5 times within 15 cycles
then alert

Überwachung der CPU Last:

check system foo.bar
if loadavg (1min) > 4 then alert
if loadavg (5min) > 2 then alert
if memory usage > 75%  for 3 cycles then alert
if cpu usage (user) > 70%  for 3 cycles then alert
if cpu usage (system) > 30%   for 5 cycles then alert
if cpu usage (wait) > 20%  for 5 cycles then alert

Weitere Konfigurationsbeispiele finden sich unter http://mmonit.com/wiki/Monit/ConfigurationExamples

Über das Webinterface kann man einen schnellen Überblick laufender Services und ihrer Monit-Konfiguration gewinnen: