Mehrere Systeme mit Munin überwachen

Mit der Software Munin lassen sich mehrere Rechner sowie Server in ihrer Performance überwachen und diese gewonnenen Daten werden aufzgezeichnet. Ein zentraler Server dient hierbei als Master-System und sammelt die Leistungsdaten der Clients. Diese werden für eine Webschnittstelle zwischengespeichert und anschließend dort graphisch dargestellt. Die Speicherung der Messwerte geschieht hierbei mit Hilfe von RRDtool.

Auf diese Weise wird eine Visualisierung der Leistungsdaten erzeugt, die einen Vergleich der aktuellen Daten mit den Daten anderer Rechner und Daten aus der Vergangenheit (im Regelfall maximal für etwa 400 Tage) gestatten. Dabei nimmt die Datengenauigkeit der historischen Werte mit ihrem Alter ab, so dass die verwendete Datenbank eine konstante Größe besitzt. Wegen dieses Mechanismus liegen die Daten des letzten Tages mit einer Auflösung von 5 Minuten vor, die Daten der letzten Woche mit einer Auflösung von 30 Minuten, die Daten des letzten Monats mit einer Auflösung von 2 Stunden und die Daten des letzten Jahres mit einer Auflösung von einem Tag.

Installation und Konfiguration auf dem Server

Zunächst einmal beginnen wir mit dem Master-System, sprich dem Server, der am Ende die Daten in einer Weboberfläche darstellen wird. Für die Installation nutzen wir unter Debian und Ubuntu folgenden Befehl:

apt-get install munin munin-node

Nun müssen wir die Konfigurationsdatei bearbeiten. Hier geben wir unter Anderem an, in welchem Verzeichnis die Ausgabe von Munin abgelegt werden soll. Die einzelnen Server, benenne ich persönlich immer nach ihrem Hostnamen. Dieser wird hier in der Anleitung „master.myserver.example.com“ lauten. Unsere Domain wird hierbei „monitoring.example.com“ sein. Diese Werte müssen für die eigene Nutzung entsprechend angepasst werden. Um die Konfiguration zu bearbeiten geben wir nun folgenden befehl ein:

nano /etc/munin/munin.conf

Diese Konfiguration sollte am Ende in etwa so aussehen (vergesst eure Anpassungen nicht):

dbdir   /var/lib/munin
htmldir /var/www/monitoring.example.com
logdir  /var/log/munin
rundir  /var/run/munin

tmpldir /etc/munin/templates

[master.myserver.example.com]
    address 127.0.0.1
    use_node_name yes

Nun müssen wir noch den Ordner anlegen und die Seite im Apache einrichten (dies erkläre ich hier nicht explizit). Anschließend nur noch dem Munin-Benutzer Rechte auf den Ordner geben und den Dienst neustarten.

chown munin:munin /var/www/monitoring.example.com
service munin-node restart

Nun ein paar Minuten warten und wenn alles geklappt hat, müssten erste Ausgaben ersichtlich sein. Diese könnten zum Beispiel wie folgt aussehen:

Firewall aktivität

Die aktivität der Firewall in einer Wochenstatistik.

Arbeitsspeichernutzung

Arbeitsspeichernutzung in der Tagesansicht.

Passwort-Schutz auf die Monitoring-Webseite

Nun sollten wir den Munin-Webordner, der später vom Webserver angezeigt wird, mittels .htaccess-Datei und .htpasswd-Datei vor unbefugtem Zugriff schützen. Hierfür erstellen wir uns zunächst eine .htaccess-Datei mit folgendem Inhalt (Pfade anpassen!):

nano /var/www/monitoring.example.com/.htaccess
AuthType Basic
AuthName "Munin - Monitoring"
AuthUserFile /var/www/monitoring.example.com/.htpasswd
<limit GET PUT POST>
require valid-user
</limit>

Nun erstellen wir mit folgendem Befehl unsere .htpasswd-Datei:

htpasswd -c /var/www/monitoring.example.com/.htpasswd admin

Abschließend kann nur noch mittels gültigem Login auf die Daten zugegriffen werden. Der Benutzername ist hierbei „admin“ und das Passwort, ist das von uns festgelegte.

Munin bei den Clients installieren und konfigurieren

Nun sind wir bereits soweit, um Munin bei allen Clients, sprich allen Rechnern, die später angezeigt werden sollen, installieren und einrichten zu können. Auch hierfür verwenden wir unter Debian und Ubuntu folgenden Befehl:

apt-get install munin-node

Nun müssen wir die Konfiguration anpassen:

nano /etc/munin/munin-node.conf

Diese könnte z.B. wie folgt aussehen:

#
# Example config-file for munin-node
#

log_level 4
log_file /var/log/munin/munin-node.log
port 4949
pid_file /var/run/munin/munin-node.pid
background 1
setseid 1

# Which port to bind to;
host *
user root
group root
setsid yes

# Regexps for files to ignore

ignore_file ~$
ignore_file \.bak$
ignore_file %$
ignore_file \.dpkg-(tmp|new|old|dist)$
ignore_file \.rpm(save|new)$

# Set this if the client doesn't report the correct hostname when
# telnetting to localhost, port 4949
#
#host_name localhost.localdomain

# A list of addresses that are allowed to connect.  This must be a
# regular expression, due to brain damage in Net::Server, which
# doesn't understand CIDR-style network notation.  You may repeat
# the allow line as many times as you'd like

allow ^127\.0\.0\.1$
allow ^92\.51\.151\.150$

Beachtet hierbei, dass der belegte Port für den Master-Server zugänglich sein muss! Außerdem muss die IP-Adresse des Master-Server unter den „allows“ eingefügt werden (wie oben im Beispiel, dort wurde die IP-Adresse 92.51.151.150 für den Master-Server verwendet). Anschließend nur noch neustarten und schon ist der Client bereit Anfragen vom Master-Server entgegen zu nehmen.

service munin-node restart

Master-Server Konfiguration anpassen

Nun müssen wir erneut die Konfiguration des Master-Servers anpassen. Hier muss der Client, welcher ebenfalls zu überwachen ist eingefügt werden. Dies geschieht in folgender Datei:

nano /etc/munin/munin.conf

Hier fügen wir für unseren Client (im Beispiel client1.myserver.example.com unter der IP-Adresse 198.50.147.1) einen entsprechenden Punkt ein:

dbdir   /var/lib/munin
htmldir /var/www/monitoring.example.com
logdir  /var/log/munin
rundir  /var/run/munin

tmpldir /etc/munin/templates

[master.myserver.example.com]
    address 127.0.0.1
    use_node_name yes

[client1.myserver.example.com]
    address 198.50.147.1
    use_node_name yes

Anschließend noch ein Neustart auf dem Master-Server mit folgenden Befehl:

service munin-node restart

Und in wenigen Sekunden sollte eine Ausgabe erfolgen wie z.B. diese:

Munin Server

Übersicht über einen Munin-Server.