Webserver-Monitoring und Performance-Analyse mit Munin

Wer einen öffentlichen und stark frequentierten Linux-Server (Webserver, Gaming-Server usw.) betreibt, der möchte über die Auslastung und Vorgänge stets informiert sein. Das Zauberwort lautet System- bzw. Server-Monitoring. Vor allem beim Troubleshooting, wenn der Server extrem langsam wird oder sogar ausfällt, helfen die zahlreichen Systemtools, welche Linux von Hause aus mitbringt. Beginnend beim altbewährten top über netstat bishin zu df: für jeden Bereich bietet Linux ein passendes Tool, um Informationen über Auslastung und Status der jeweiligen Hardware auszulesen.

Logo: munin webserver monitoring

Die genannten Systemtools liefern einen kurzfristigen Blick auf den aktuellen Status. Wer aber eine Langzeitanalyse der Serverauslastung benötigt, der kommt um ein Monitoring-Tool nicht herum. Hierbei handelt es sich um einen Dienst, der wichtige Informationen wie CPU-Auslastung, Belegung des Arbeitsspeichers oder Festplattenzugriffe mitprotokolliert und grafisch aufbereitet.

Genau diese Aufgaben übernimmt das Monitoring-Tool munin, welches nicht nur einfach zu installieren ist, sondern viele detaillierte Systeminformationen liefert. Im Falle eines Troubleshootings/Fehlersuche oder bei der regelmäßigen Routineüberprüfung ist munin ein nützlicher Helfer. Wir zeigen in diesem Artikel, welche Möglichkeiten das Monitoring-Tool für die Überwachung eines typischen Apache-Webservers bietet und welche Leistungsdaten besonders überwacht werden sollten.

Zusätzliche Informationen
PC-Erfahrung.de berichtete bereits ausführlich in diesem Artikel, wie man die Systemauslastung auf einem Linux-Server analysiert. Außerdem lohnt sich ein Blick in den Artikel Nagios, der sich mit dem Thema Remote-Überwachung von Servern beschäftigt.

Installation von munin

Die Installation von munin ist vergleichsweise leicht. Auf der munin-Webseite findet man eine Installationsanleitung für alle gängigen Linux-Betriebssysteme wie Debian oder Ubuntu. Wichtig zu wissen ist, dass man bei munin zwischen dem Node (~Client) und dem Master (~Server) unterscheidet. Dieses Server-Client-Prinzip basiert auf der Tatsache, dass in größeren Netzwerken ein einzelner Server die Clients überwacht oder besser gesagt die Monitoring-Auswertungen einsammelt und grafisch aufbereitet. Auf dem Client läuft lediglich der munin-Node-Dienst. In der Regel überwacht man nur einen Server, so dass sowohl Node als auch Master auf ein und demselben Client installiert werden.

In diesem Beispiel erfolgte die Installation auf einem Linux Gentoo System, dessen Installation in diesem Wiki sehr gut beschrieben wird. Beginnen wir mit der einfachen Installation von Munin und der anschließenden Aktivierung der Plugins:

# Useflag cgi bedeutet, dass sowohl node als auch master installiert werden
(root): USE="minimal cgi" emerge munin

# Vorhandene Plugins identfizieren und einrichten
# Wichtig ist, dass man dies als User munin durchführt
(root): sudo -u munin munin-node-configure --shell

# munin monitoring aktivieren und zum Autostart hinzufügen
(root): /etc/init.d/munin-node start root
(root): rc-update add munin-node default

An dieser Stelle beginnt munin bereits den Webserver zu überwachen und Informationen zu sammeln. Im nächsten Schritt wird der Apache-Webserver konfiguriert, da munin über ein Webfrontend verwaltet wird.

# Useflag cgi bedeutet, dass sowohl node als auch master installiert werden
(root): vi /etc/conf.d/apache2

# Folgende Zeile mit -D MUNIN_HTML_CGI erweitern
APACHE2_OPTS="-D DEFAULT_VHOST -D LANGUAGE -D PHP5 -D EVASIVE -D MUNIN_HTML_CGI"

# VHOST-Eintrag setzen
(root): vi /etc/apache2/vhosts.d/00_default_vhost.conf

# Web anlegen
<VirtualHost 212.xxx.yyy.zzz:80>
ServerName webmonitoring.domain.de
DocumentRoot /var/www/localhost/htdocs/munin/

<Directory "/var/www/localhost/htdocs/munin/">
Options -Indexes FollowSymLinks
AllowOverride ALL
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

# Webserver neu startet
(root): /etc/init.d/apache2 restart

Anschließend ruft man munin über die entsprechende URL (in diesem Beispiel webmonitoring.domain.de) auf. Hierbei ist aber etwas Geduld angesagt, bis die ersten Daten von munin gesammelt und bereitgestellt werden.

Was munin überwachen kann

Das Monitoring-Tool munin eignet sich hervorragend für die Überwachung eines öffentlichen Servers wie es beispielsweise ein Webserver ist, da nahezu alle wichtigen und tiefgreifenden Informationen aus einem System gesammelt werden. Dazu gehören nicht nur einfache Informationen wie Prozessorauslastung, die Linux Load oder Festplattenbelegung, sondern auch ausführliche Informationen zu TCP-Verbindungen (netstat), Festplatten-Geschwindigkeit oder die detaillierte Auswertung der Arbeitsspeichernutzung.

Da munin die Daten über Wochen, Monate und Jahre hinaus sammelt, bietet es einen schnellen Überblick über den Serverstatus und eine gute Vergleichsmöglichkeit mit alten Server-Zuständen. Denn oftmals ist man sich nicht sicher, ob ein bestimmter Wert nun wirklich als kritisch eingestuft werden oder dieser doch im normalen Bereich liegt. Beispiel: ist der Webserver plötzlich träge und man stößt auf die netstat-Ausgabe mit 100 aktiven Verbindungen, muss der Administrator jahrelange Erfahrung haben, um dies als kritisch oder nicht einzustufen. Da hilft die Historie von munin, um den aktuellen Wert mit vergangenen Werten zu vergleichen. Sehr praktisch!

Bevor wir nun ins Detail gehen, sollen die wichtigsten Informationsquellen von munin vorgestellt werden.

system (Allgemein) disk (Festplatte) network (Netzwerk)
 
  • Available entropy
    (Verfügbare Zufallszahlen aus /dev/urandom. Bsp. genutzt für SSL-Verbindungen)
  • cpu usage
    (Prozessor-Auslastung)
  • File table usage
    (Anzahl der geöffneten Dateien)
  • Individual interrupts
    (Wie verwaltet de Kernel die Interrupts und wer nutzt diese)
  • Inode table usage
    (Anzahl geöffneter/vorhandener Dateien)
  • Load average
    (Linux Load = Auslastung)
  • Logged in users
    (Anzahl eingeloggter Benutzer)
  • Memory usage
    (Speicherverbrauch)
 
 
  • average latency
    (Durchschnitt der Latenzzeiten)
  • disk I/O
    (input/output Operationen der Festplatte)
  • disk latency
    (Latenzzeit)
  • disk throughput
    (Lese-/Schreibvorgänge)
  • disk usage
    (Festplattenbelegung)
 
 
  • firewall throughput
    (Verarbeitete und verworfene Pakete der Firewall)
  • netstat
    (Übersicht TCP-Verbindungen)
  • interface errors
    (Fehlerhafte Pakete)
  • interface traffic
    (Datendurchsatz der Netzwerkkarte)
 
processes (Prozesse & Threads) postfix (Mailserver)
 
  • fork rate
    (Rate neu erzeugter Prozesse)
  • number of threads
    (Gesamtanzahl aller Prozesse auf einem System)
  • processes
    (Anzahl Prozesse inkl. Status/Typ)
  • processes priority
    (Prioritäten der Prozesse wie low, high oder locked)
  • vmstat
    (Nutzung der Prozessor-Zeit/cpu time. U.a. die Wartezeit auf die Festplatten I/O time)
 
  • mailqueue
    (Anzahl Mails in Warteschlange)
 

system (allgemein)

Einer der wohl wichtigsten Fragen ist, ob der Prozessor eines Servers ausreichend dimensioniert ist. In folgendem Beispiel dominiert der gelbe Bereich, der für den Leerlauf der CPU steht. Die konstante Last (blau) entsteht durch die Zugriffe auf die Webseiten, befindet sich in einem gesunden Bereich. Interessant ist, dass munin nicht nur einfach die Prozessorauslastung auswertet, sondern genau in die verschiedenen Bereich (system, user, nice, idle, iowait usw.) aufteilt. Diese Informationen findet man übrigens in dem Befehl top wieder, welcher hier genaustens beschrieben wurde.

Prozessor-Auslastung

Für den "allgemeinen" Zustand der Serverauslastung ist die Linux Load hervorragend zur Analyse geeignet, da sie nicht nur die Prozessorauslastung, sondern die gesamte Auslastung betrachtet. Beispiel: eine hohe Festplattenaktivität sorgt zwar nicht für eine hohe Prozessorauslastung, kann aber trotzdem das System lahmlegen. Die Linux Load beschreibt, wie viele Prozesse gleichzeitig auf ihre Abarbeitung warten. Der Wert sollte die Anzahl der vorhandenen Prozessorkerne (bsp. bei einem Dual-Core-Prozessor den Wert 2) nicht überschreiten. Weitere Informationen findet man in unserem Artikel Linux - Systemauslastung analysieren.

Linux Load

Ebenfalls wichtig ist die Nutzung des Arbeitsspeichers. Ist dieser zu gering bemessen, wirkt sich das negativ auf die Leistung des Servers aus, was heutzutage "jedes Kind weiß". Auch hier wertet munin detailliert aus, wie viel freier Arbeitsspeicher zur Verfügung steht und wie sich der genutzte Speicher auf die Bereiche cache, swap und used aufteilen. Folgendes Beispiel zeigt, dass die 4 GB Arbeitsspeicher nahezu perfekt ausgenutzt werden: 2 GB werden aktiv durch Anwendungen (bsp. MySQL, Apache) genutzt, was durch den grünen Bereich deutlich wird. Der blaue Bereich entspricht dem Cache. Nur ein geringer Teil des Arbeitsspeichers steht zur freien Verfügung und solange dieses Bild keinen starken Schwankungen unterliegt bzw. das Systen anfängt zu "swappen", wird der Arbeitsspeicher optimal genutzt.

Nutzung des Arbeitsspeichers

Unter Linux lautet das Motto "alles ist eine Datei". Um dies zu verwirklichen, hantiert jedes Linux-Dateisystem mit so genannten Inodes, eine eindeutige ID einer Datei, Verzeichnisses, symbolischen Links usw. Die Anzahl der Inodes ist beschränkt, so dass theoretisch eine Festplatte vorzeitig vollgelaufen ist, obwohl noch Speicherplatz zur Verfügung steht. Wer also viele kleine Dateien speichert, sollte die Inodes im Auge behalten, die man übrigens mit dem Befehl df -i auslesen kann.

Folgende Grafik soll dabei helfen, einen Überblick der geöffneten Dateien zu bekommen. Kommt es hier zu starken Schwankungen, sollte man dem Grund schnell herausfinden und vor allem ausschließen, dass der Server kompromittiert, umgangssprachlich "gehackt" wurde.

Auslesen der Inodes-Tabelle - Geöffnete Dateien

Wie viele User haben sich auf meinem Webserver eingeloggt? Eine Frage, dessen Antwort all diejenigen interessiert, die unbefugte Zugriffe und Logins vermuten.

Monitoring der Logins auf einem Linux-Server

disk (Festplatte)

Festplatten mutieren schnell zum Flaschenhals und Leistungsbremse in einem Webserver, so dass dessen Performance im Blick gehalten werden sollte. Die folgende Grafik disk throughput zeigt den Datendurchsatz einer Festplatte, in diesem Fall der RAID-1-Partition /dev/md2. Starke Schwankungen weisen auf eine hohe Festplattenaktivität hin, die untersucht werden sollten. Der kurzzeitige Ausschlag ist die Datensicherung, die täglich in der späten Nacht durchgeführt wird.

Datendurchsatz der Festplatte

Ebenfalls wichtig sind die Input-/Output-Operation auf dem Festplatten. Hier spiegeln sich die stetigen Zugriffe der Webseiten-Besucher wieder.

I/O-Werte der Festplatte

Eine nützliche Information stellt die disk utilization dar, die munin freundlicherweise als Prozent-Angabe aufbereitet. Hieran lässt sich sehr schnell erkennen, ob die Festplatten-Geschwindigkeit ausreichend ist oder die Festplatten überlastet sind. Auch hier findet sich die nächtliche Datensicherung in Form der zwei deutlichen Ausschläge nach oben wieder.

Festplatten-Geschwindigkeit bzw. -Auslastung in Prozent

Die Kontrolle der Festplatten-Belegung bzw. disk usage ist sehr wichtig, um dass Volllaufen der Festplatten zu verhindern.

Festplatten-Speicherplatz prüfen

network (Netzwerk)

Der Netzwerk-Verkehr ist ein weiteres wichtiges Standbein des Server-Monitorings, welches viele Erkenntnisse über das Befinden und die Leistung eines (Web-)Servers mit sich bringen kann. Auch an dieser Stelle bereitet munin viele nützliche Informationen zum Netzwerk-Traffic, der Netzwerkkarten oder einer installierten Firewall auf. Folgende Grafik bezieht sich auf Fehler im Netzwerktraffic. Zwar sind in diesem Beispiel die errors vergleichsweise gering, dafür aber die "dropped packets", sprich die verworfenen Datenpakete, vergleichsweise hoch. Dies lässt sich möglichweise auf eine Fehlkonfiguration der Anwendung bzw. der Netzwerkkarte oder eines Defektes innerhalb des Netzwerkes (Netzwerkkarte, LAN-Kabel, Switch) zurückführen.

 

Netzwerkkarte: fehlerhafte und verworfene Pakete

Wie hoch ist der durchschnittliche Netzwerktraffic bzw. der Datenverkehr auf der Netzwerkkarte? Gibt es starke Schwankungen? Diese Fragen beantwortet munin im Bereich eth0 traffic. Auch hier findet sich die nächtliche Datensicherung wieder.

Netzwerk-Traffic und Datenverkehr der Netzwerkkarte eth0

Ein sehr wichtiger Punkt ist die Auswertung von netstat, welche Informationen über sämtliche TCP-Verbindungen gibt. Wieviele aktive und passive Verbindungen sind auf dem Server? Gibt es starke Schwankungen, die auf etwaige (Hacker-)Angriffe hindeuten?

netstat zeigt die TCP-Verbindungen

processes (Prozesse & Threads)

Kommen wir zu den Prozessen und Threads eines Systems. Natürlich ist es nicht Aufgabe eines Administrators, jeden einzelnen Linux-Prozess bzw. -Thread zu kennen, aber Tendenzen über die Anzahl von aktiven Prozessen sollten im Auge behalten werden. Ein typischer Verlauf des Graphen "processes" auf einem Webserver sieht wie folgt aus: der Großteil der Prozesse schlafen (sleeping) und nur sehr wenige Prozesse sind aktiv. Das zeigt das typische Verhalten eines Apache-Webservers, der weiterhin die Prozesse für weitere Seitenaufrufe aufrecht erhält, bevor er diese endgültig schließt.

Anzahl der Prozesse eines Linux Webservers

Ähnlich wie Prozesse bietet munin auch eine Übersicht über die Anzahl der aktiven Threads:

Anzahl aktiver Threads

Fazit zum Monitoring-Tool munin

Munin ist sehr umfangreich. Die hier vorgestellten Auswertungen sind nur ein kleiner Einblick in die Fähigkeiten von munin und noch lange nicht das Ende der Fahnenstange. Sie sollen lediglich einen Einstieg in das Thema Analyse des Server-Monitorings bieten und zeigen, bei welchen Leistungsschrauben der Administrator bei Leistungs- und Laufzeitproblemen des Webservers drehen kann. Beim Troubleshooting kann man sichsehr gut an den hier genannten Beispielgrafiken orientieren.

Für weitere Informationen zum Monitoring empfehlen sich folgende Artikel: