Wer seinen Server langfristig in Sachen Ressourcenauslastung überwachen will, der hat mit Munin eine einfache Möglichkeit, dies zu tun. Im Gegensatz zu Konsolen-Tools wie „top“ oder besser „htop“, die realtime-Auslastungen des Prozessors und dazugehörige Prozesse anzeigen, ist es manchmal wichtig zu sehen, wie sich die Ressourcenauslastung eines Servers über einen längeren Zeitraum entwickelt. Wie entwickelt sich die Speicherplatzauslastung auf dem Server? Ist die CPU-Load und RAM-Auslastung seit dem letzten Update tatsächlich gesunken? Wie ist der Netzwerktraffic? Gibt es Lastspitzen? Ist mein Server ausreichend dimensioniert? Gibt es Slow Queries? Wieviel Datenbank-Queries gibt es überhaupt? Wieviele Zugriffe pro Sekunde hat mein Webserver? Wieviele IPs blockiert Fail2ban auf welchem Filter? Wird der Swap von meinem Rechner genutzt?

… und das alles nicht nur jetzt aktuell, sondern letzte Nacht, vorgestern, letzten Monat – sofern es Munin dort schon gab 😉

Munin kann sogar bei Überschreitung von kritischen Werten E-Mails an festgelegte Adressen zur Benachrichtigung senden. Munin basiert auf einer Master-Node Struktur, der Master sammelt und Verarbeitet die Daten seiner Nodes (Server) und sie lassen sich graphisch im Webbrowser darstellen. Munin stellt standardmäßig alle 5 min einen neuen Messwert für alle Graphen zur Verfügung, kostet also minimal Ressourcen. Die Kommunikation mit allen Node-Servern erfolgt über Port 4949 in den Standardeinstellungen und auf Node-Seite ist die IP des abfragenden Master-Servers white-gelistet.

Auf allen Node-Servern muss also nur Munin-Node installiert werden:

sudo apt install munin-node

Nach der Installation muss in der Datei /etc/munin/munin-node.conf die IP-Adresse des Munin Master Servers eingeben:

allow ^12\.345\.67\.89

Munin bringt zahlreiche Module (Monitore) mit und diese sind unter /usr/share/munin/plugins zu finden. Um diese aktiv zu nutzen, müssen diese unter /etc/munin/plugins/ verlinkt werden. Beispiel für fail2ban:

sudo ln -s /usr/share/munin/plugins/fail2ban /etc/munin/plugins/

Dabei helfen kann:

sudo munin-node-configure --suggest

Hier wird der Status aller verfügbaren Plugins angezeigt und Empfehlungen dazu ausgesprochen. Was kann aktiviert werden und ist es aktuell nicht? Welches Plugin macht ggf. Probleme? Wenn in der Spalte „Used“ „No“ steht, bei „Suggestions“ allerdigns „Yes, so kann dieses Module per symlink (s.o.) einfach aktualisiert werden. Das kann relativ leicht vorkommen, beispielsweise man setzt den Server auf, installiert Munin node und im weiteren Betrieb des Servers kommen weitere Dienste hinzu. Diese werden dann von Munin nicht mehr automatisch erfasst und eingerichtet, die Module müssen dann manuell konfiguriert werden.

Nach jeder Änderung in der munin-node.conf oder an Modulen muss Munin-Node neu gestartet werden:

sudo service munin-node restart

Nun zur Installation des Munin Masters, der die Daten aller Nodes einsammelt und graphisch aufbereitet. Hierzu installieren wir:

sudo apt install munin libwww-perl

Nach der Installation müssen wir dem Munin Master nun beibringen, von welchen Nodes er Daten einsammeln soll. Dazu editieren wir die /etc/munin/munin.conf und fügen unseren Node nach folgendem Format hinzu:

[Servername.Provider]
    address 12.345.67.89
    use_node_name yes

Nach abspeichern der Datei wird der Munin Master alle 5 Minuten bei unserem Beispiel-Node-Server mit der IP 12.345.67.89 nach Daten fragen. Node Server werden übrigens bei diesem Format in der Oberfläche des Munin Masters automatisch nach Providern gruppiert 😉

Wie kann ich mir die Daten nun ansehen? Dazu richten wir einen vhost ein, z.B. munin.domain.tld und sichern ihn mit einem SSL-Zertifikat, z.B. mit Lets Encrypt. Munin selbst bringt schon Apache vhost Konfigurationen mit, die man nur geringfügig anpassen muss. Zahlreiche Anleitungen im Netz waren für mich unter Ubuntu18.04 nicht mehr anwendbar und die Änderungen waren deutlich geringer als überall geschildert. Lediglich die /etc/munin/apache24.conf musste ich ein wenig überarbeiten, um Munin mit einem Passwort zu schützen und sieht bei mir folgendermaßen aus:

Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
AuthType Basic
Require valid-user
AuthName "Authorised access only"
AuthUserFile /etc/munin/.htpasswd
</Directory>

ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
<Location /munin-cgi/munin-cgi-graph>
AuthType Basic
Require valid-user
AuthName "Authorised access only"
AuthUserFile /etc/munin/.htpasswd
<IfModule mod_fcgid.c>
SetHandler fcgid-script
</IfModule>
<IfModule !mod_fcgid.c>
SetHandler cgi-script
</IfModule>
</Location>

Den Passwortschutz kreieren wir mit:

htpasswd /etc/munin/.htpasswd username

Danach wird das Passwort abgefragt.

Nun ist Munin unter https://munin.domain.tld/munin mit dem oben festgelegten Benutzernamen/Passwort verfügbar. In der Standardansicht ist die Ressourcenauslastung der letzten 24h sowie die Wochenansicht verfügbar, ein Klick darauf lieftert noch größere Zeiträume. Jede Ansicht lässt sich öffnen, vergrößert und darin beliebig zoomen mit 3 Klicks (Anfang, Ende, Zoom in).

Damit Munin E-Mails bei Warnungen und kritischen Parametern sendet, aktivieren wir folgende Zeilen in der /etc/munin/munin.conf (direkt über der Munin Node Liste):

contact.me.command mail -s "Munin ${var:host}" meine-email@nulldomain.tld
contact.me.always_send warning critical

Nun sendet Munin bei jedem Übergang von Normal <—> Warnung / Critical und zurück eine E-Mail. Achtung: Je nach gesetzten Limits kann hier eine wahre E-Mail-Flut ausgelöst werden …

Dies ist nur ein kleiner Einstieg in Munin, die Software bietet noch zahlreiche weitere Funktionen, die im Netz gut dokumentiert sind. Frohes Monitoring!

Für die Nutzung auf dem Mobilgerät kann ich die App Munin for Android wärmstens empfehlen: https://play.google.com/store/apps/details?id=com.chteuchteu.munin&hl=de