MRTG Monitoring

Windows hat schon sehr lange Performance Counter, um den Status und die Belastung eines Systems zu müssen und auch zu analysieren. Nur fehlte lange Zeit eine entsprechende Auswertesoftware um die Daten auch langfristig zu visualisieren. Zwar gibt es seit Windows 2000 endlich auch den Dienst "Performance Monitor", um unabhängig von einer Anmeldung die gewünschten Daten in eine Datei zu schreiben, aber diese Funktion wird kaum eingesetzt.

Windows Administratoren sollten vielleicht einen Blick auf das kommerzielle Produkt PRTG werfen, was deutlich einfacher (per GUI) zu verwalten ist, viele Sensoren enthält und bis zu 10 Tests "kostenfrei" ist.

Aber schon seit vielen Jahren ist SNMP der de facto-Standard für das Auslesen von Systemparametern von TCP/IP Endgeräten. Dazu zählen Router, Switches aber natürlich auch Server. In diesem Umfeld hat sich MRTG entwickelt.

Schritt für Schritt Installation

Wenn sie einfach nur MRTG schnell installieren wollen, dann ist diese Schritt für Schritt Anleitung das richtige für Sie.

810 kb
mrtginstall.PDF

30-seitige Installationsanleitung von MRTG auf Windows 200x mit Perl und 14all.pl

Die folgenden Abhandlungen beschreiben etwas mehr die Hintergründe, die Funktionsweise und wie sie MRTG erweitern können.

Was ist MRTG ?

MRTG ist eine kostenfreie Software (Perl), um numerische Werte grafisch zu visualisieren. Normalerweise liest MRTG über das Protokoll SNMP von Netzwerkgeräte die übertragenen Bytes pro Netzwerkkarte aus und erstellt daraus nette Bilder. Diese können über einen Webserver veröffentlicht werden. Mit sehr wenig Aufwand kann damit z.B.: die Auslastung einer WAN-Verbindung angezeigt werden:

Hier ist klar zu sehen, dass von Montag auf Dienstag ein etwas größerer Download die 64kBit Leitung sichtlich belastet hat. Wer oder Was über Welches Protokoll übertragen wurde ist allerdings nicht ersichtlich.  (Siehe Produkte: NTOP)

Funktionsweise von MRTG

Die Funktion ist schnell erklärt. Sie müssen MRTG regelmäßig (z.B. alle 5 Min) starten oder gleich als Daemon laufen lassen. MRTG liest eine Konfigurationsdatei ein und holt sich von dort die Informationen, welche Systeme (SNMP-Adressen) er abfragen und auswerten soll. Die Daten werden in eine Datenbank geschrieben und anhand der Konfigurationsdatei wird eine HTML-Datei mit den entsprechenden Bildern abgespeichert. Diese Verzeichnis müssen Sie nur noch in ihrem Webserver freigeben und schon können Sie über jeden Browser die Daten abfragen. Eine Anmeldung und Verschlüsselung ist nur eine Einstellung im Webserver. Die Seiten selbst sind 100% statisch.

Wer viele Daten sammelt muss sich bald fragen lassen, wann die Datenbank überläuft oder die Festplatte voll ist. Der besondere Kniff von MRTG ist, dass die Daten nach einiger Zeit immer konsolidiert werden. ältere Daten werden dabei zusammengefasst. Durch diesen Kniff wird die Datenbank niemals größer. Allerdings auf Kosten der Genauigkeit älterer Daten.

Wenn Sie MRTG als Daemon laufen lassen wollten, dann müssen Sie in der Konfigurationsdatei folgende Zeilen ergänzen:

RunAsDaemon: yes
Interval: 5

Als Daemon können Sie natürlich pro Daemon nur eine Konfigurationsdatei angeben. Mehrere Konfigurationsdateien bedeuten entsprechende mehrere Daemons. Oder sie fassen alle Konfigurationsdateien zu einer Datei zusammen.

Wenn MRTG als Daemon läuft, sollten Sie natürlich die Funktion überwachen. Über den Parameter "--logging=dateiname" können Sie MRTG anweisen, seine Tätigkeit in diese Protokolldatei zu schreiben, die sie mit TAIL MOM2005 (Überwacht so z.B.: aucc IISLogs) oder anderen Tools überwachen können. für Windows Umgebungen besonders interessant ist natürlich die Funktion über "--logging=eventlog" die Meldungen in das Windows Eventlog zu schreiben und entsprechend mit MOM2005 oder anderen Produkten zu überwachen.

MRTG und WMI

MRTG kann aber nicht nur SNMP-Anfragen absetzen, sondern auch andere Programme (z.B. PING etc.) starten und die Bildschirmausgabe dieser Programme auswerten. So können Sie mit MRTG auch fremde Testroutinen einbinden, z.B. per VBScript eine Abfrage eines Performance Counters oder anderer Datenquellen, die vielleicht nicht SNMP-tauglich sind. Wie wäre es z.B. mit einem temperaturabhängigem Widerstand am Joystick-Anschluss ihres PCs um die Raumtemperatur zu müssen ?

Auch bei Microsoft gibt es als Sampleanwendung eine WMI-Abfrage mit MRTG. Microsoft demonstriert hier, wie MRTG seinerseits ein VBScript aufruft und diese per WMI entsprechende Performancecounter ausliest und an MRTG über Stdout zurück übergibt:

Beachten Sie aber, dass bei dieser Lösung das Skript alle 5 Minuten per AT gestartet werden muss und die vielen Skripte und Generierung von Bildern entsprechend lange dauert und das System belastet. Werden entfernte Performance Counter ausgelesen, muss das Skript die erforderlichen Rechte haben.

MRTG und RRDTOOL = besser skalieren

Was auf den ersten Blick so einfach klingt ist aber nicht ganz ohne Risiko. Wenn Sie viele Werte ermitteln, dann belastet MRTG das System, da alle 5 Minuten Textdateien als Datenbank gelesen und geschrieben werden und sehr viele GIF/PNG-Bilder erzeugt werden. Und das obwohl diese vielleicht diesmal niemand benötigt. Damit gibt es zwei Ansätze, die Arbeitsweise von MRTG zu verbessern:

  • Effektivere Datenbank
    Dies löst MRTG dadurch, indem auf die eingebaute Datenbank verzichtet wird und das Programm RRDTOOL eingebettet wird. RRDTOOL schreibt binäre Daten und ist kompiliert. MRTG unterstützt RRDTOOL von Hause aus. Dies muss nur aktiviert werden und die bestehenden Daten werden sogar übernommen.
  • Bilder nur bei Bedarf erzeugen
    Die zweite Option bedeutet, dass die Bilder erst beim Abruf erzeugt werden. Hierzu muss jedoch ein Webserver eingesetzt werden, der auf dem Server das entsprechende Programm zum erzeugen der Bilder startet. Auch hierzu ist RRDTOOL der beste Weg.

Sie sollten also schon sehr früh die Datenbank "RRDTOOL" verwenden, um die gesammelten Daten schneller zu verarbeiten und ebenfalls auf RRDTOOL setzen, damit ihr Webserver die Bilder einfach bei Bedarf ermittelt.

Für die Ausgabe von solchen Daten haben viele andere Personen eigene Entwicklungen zu MRTG beigesteuert. 14all.pl ist nur exemplarisch hier zu nennen. Am besten Sie surfen etwas auf der MRTG-Seite oder im Download unter "Contrib". Etwas knifflig kann mit dem IIS6 natürlich die Freischaltung von PERL als CGI-Skript Anwendung sein kann.

Durch die Trennung der Funktion "Daten Sammeln und speichern" und der Funktion "Daten aufbereiten" wird natürlich auch die Laufzeit des Sammelprozesses stark verkürzt. MRTG in Verbindung mit RRDTOOL könnte natürlich auch direkt wieder Bilder erzeugen und damit die Einbindung als CGI-Skript ersparen. Aber das würde wieder mehr Belastung bedeuten. Es ist daher aus Performanceaspekten besser, die Bilder erst denn zu erzeugen, wenn diese auch benötigt werden.

Windows mit SNMP

Einem Exchange Administrator kann es natürlich nicht ausreichen, nur die Netzwerkauslastung zu sehen. So stellt sich die Frage ob mit dem gleichen Programm nicht auch interessante Windows und Exchange Parameter überwacht werden könnten. Einige sind ja auf Exchange überwachen und kontrollieren beschrieben.

Und tatsächlich ist es möglich, die vielen Windows und Exchange Performance Counter auch per SNMP abzufragen. Siehe dazu auch Exchange und SNMP. Damit kann MRTG dann z.B. die Warteschlangen von Exchange auch grafisch aufbereiten.

Interessant sind aber auch andere Parameter, die für MRTG interessant sein können, z.B.: die Anzahl der aktiven Benutzer oder die CPU-Auslastung.

RRDTOOL direkt

Aber die offene Arbeitsweise RRDTOOL erlaubt aber noch ganz andere Dinge. RRDTOOL ist ein universelles Programm, welches je nach übergebenen Parametern entweder die Daten in eine Datenbank schreibt, oder anhand der Datenbank entsprechende Grafiken erzeugt. Es steht nirgends geschrieben, dass MRTG das einzige Programm sein darf, welches die Datenbank und Grafikeigenschaften von RRDTOOL verwenden darf. Und damit fällt auch die Beschränkung auf SNMP und MRTG. Sie können komplett eigene Programme schreiben, die Daten z.B. per WMI oder andere Quellen auslesen und mittels RRDTOOL einfach in eine Datenbank schreiben.

Ein Beispielcode in VBScript zur Protokollierung von CPU, Festplatten und Speicher finden Sie hier:

2kb perf2rrd.zip
VBScript. Bitte auspacken und im Quellcode den Servername und den Pfad zu rrdtool.exe anpassen.

Die Auswertung kann dann wieder über bestehende Programme, CGI-Skripte etc. erfolgen, die einfach RRDTOOL aufrufen, um aus den Daten ein Bild zu machen. RRDTool.

Weitere Links