Aus Linux-Magazin 09/2002

Netzüberwachung mit MRTG

Die Auslastung eines Netzwerks messen und die Ergebnisse grafisch aufbereiten, das ist das Spezialgebiet von MRTG. Der Multi Router Traffic Grapher fragt auch beliebige andere SNMP-Variablen ab, mit eigenen Erweiterungen erfüllt er sogar ausgefallene Wünsche des Administrators.

Grafisch aufbereitet sind auch trockene Statistikdaten, die SNMP-Agenten bereitstellen, auf einen Blick zu erfassen. Der Multi Router Traffic Grapher (MRTG)[1] von Tobias Oetiker ist der Klassiker auf diesem Gebiet. Das unter der GPL stehende Tool überwacht die Auslastung des Netzwerks, fragt Router und Switches ab und erzeugt aus den gewonnenen Daten übersichtliche Grafiken, die es in eine Webseite einbindet. MRTG kann aber noch mehr, etwa Fehlermeldungen von Netzwerkschnittstellen abfragen oder die Auslastung einer Festplatte überwachen.

Als Beispiel dient im Folgenden ein Linux-Router unter SuSE Linux 7.3, der mit zwei Netzwerkkarten und einer Festplatte ausgestattet ist. MRTG soll nicht nur den Netzwerkverkehr überwachen, sondern auch die Fehler auf den Netzwerkkarten und die Kapazität einer Festplatten-Partition.

Viele Linux-Distributionen enthalten MRTG und die zusätzlich benötigten Programme und Bibliotheken bereits. Ist das ausnahmsweise nicht der Fall, ist auch das manuelle Installieren kein Problem. Voraussetzungen sind Perl, ein C-Compiler sowie die GD-Bibliothek von Thomas Boutell. Letztere verlangt ihrerseits die Bibliotheken Libpng und Zlib. Alle Komponenten laufen unter Linux, Unix und sogar Windows.

Auto-Konfiguration

Für jedes überwachte Gerät erhält MRTG je eine Konfigurationsdatei. Sie lässt sich auch automatisch generieren: Das Programm »cfgmaker« aus dem MRTG-Paket schreibt eine Konfiguration, mit der MRTG die Netzwerklast beobachtet. »indexmaker« erzeugt eine HTML-Startseite, die alle überwachten Geräte verzeichnet.

Mit dem standardisierten Konfigurationsfile, das »cfgmaker« erzeugt hat, überwacht MRTG die Netzwerkschnittstellen eines Geräts über SNMP. Ob es sich dabei um einen Server mit einem einzelnen Netz-Interface handelt oder um einen Router oder Switch mit vielen Schnittstellen, ist nicht wichtig. Das zu überwachende Gerät muss seine Daten über SNMP zur Verfügung stellen und MRTG muss das Leserecht für SNMP auf dem Gerät haben.

In den Kommandozeilen-Parametern von »cfgmaker« sind folgende Informationen anzugeben:

  • IP-Adresse oder DNS-Name des zu überwachenden Geräts, im folgenden Beispiel »192.168.33.1«,
  • Community-String: »geheim«,
  • Name der zu erstellenden Konfig- Datei: »/usr/local/mrtg/linux.cfg«,
  • Speicherort für die HTML-Seiten: »/usr/local/mrtg/html«
  • sowie die zusätzlichen Optionen: »growright«.

Im Verzeichnis für die HTML-Seiten legt MRTG auch die Grafiken sowie alle gesammelten Daten ab. Wenn ein Webserver die Seiten ausliefern soll, muss er dieses Verzeichnis lesen dürfen.

In der Grundeinstellung sind die neuesten Werte in der grafischen Darstellung auf der linken Seite enthalten, die Option »growright« legt die neuesten Daten nach rechts. Der Seitenhintergrund soll in einem hellen Grau erscheinen. Als beschreibender Text dient der Name der Schnittstelle, etwa »eth0«, nicht die laufende Nummer, wie es die Default-Einstellung ist:

cfgmaker 
--output=/usr/local/mrtg/linux.cfg 
--global "workdir:/usr/local/mrtg/html" 
--global "Language:german" 
--global "options[_]: growright" 
--global "Background[_]: #eeeeee" 
--ifdesc=descr 
geheim@192.168.33.1

Das Ergebnis des Aufrufs ist in der Datei »/usr/local/mrtg/linux.cfg« zu finden. Der Name dieser Datei wird als erster Parameter an MRTG übergeben: »mrtg /usr/local/mrtg/linux.cfg«. Im Verzeichnis »/usr/local/mrtg/html/« entstehen mit diesem Aufruf eine HTML-Seite für jedes Interface, die Logfiles mit den Werten, außerdem die Grafiken. Das Verzeichnis muss allerdings vorher schon existieren. Alte Dateien löscht MRTG automatisch – beim ersten Aufruf führt das zwar zu Fehlermeldungen, die kann man aber ignorieren. Das Ergebnis ist in Abbildung 1 zu sehen.

Ein Cron-Job muss das MRTG-Kommando alle fünf Minuten aufrufen. Der Zeitabstand ist entscheidend, damit MRTG die Durchschnittswerte korrekt berechnet. Wie groß das Intervall ist, lässt sich in der Konfiguration ändern.

Abbildung 1: Der MRTG-Graph zeigt: Die Leitung hat noch genügend Reserven. In der Spitze ist sie nur zu 1,7 Prozent ausgelastet (Wert links unten, »Maximal Herein«).

Abbildung 1: Der MRTG-Graph zeigt: Die Leitung hat noch genügend Reserven. In der Spitze ist sie nur zu 1,7 Prozent ausgelastet (Wert links unten, »Maximal Herein«).

Manuelle Konfiguration

Sind andere SNMP-Variablen als das übertragene Datenvolumen gewünscht, muss man eine Konfigurationsdatei von Hand erstellen. Das Beispiel in Listing 1 fragt die Fehler ab, die auf einem Netzwerk-Interface auftreten. Die globalen Optionen entsprechen denen für den Datentransfer, die weiteren Felder erklärt Tabelle 1. Der Aufruf, wieder Cron-gesteuert, sollte alle fünf Minuten erfolgen.

Listing 1: MRTG zeigt Netzwerkfehler

01 WorkDir: /usr/local/mrtg/html
02 Language: german
03 Background[_]: #eeeeee
04 
05 Target[interfaceerrors_2]:1.3.6.1.2.1.2.2.1.14.2& 1.3.6.1.2.1.2.2.1.20.2:geheim@192.168.33.1
06 Options[interfaceerrors_2]: growright,nopercent
07 Title[interfaceerrors_2]: Fehler auf Interface eth0
08 MaxBytes[interfaceerrors_2]: 10000
09 Ylegend[interfaceerrors_2]: Fehler
10 ShortLegend[interfaceerrors_2]:  
11 Legend1[interfaceerrors_2]: Input Fehler
12 Legend2[interfaceerrors_2]: Output Fehler
13 LegendI[interfaceerrors_2]:  INPUT 
14 LegendO[interfaceerrors_2]:  OUTPUT 
15 PageTop[interfaceerrors_2]: <H1>Input / Output Errors</H1>
16  Fehler auf Interface eth0
17 
18 Target[interfaceerrors_3]:1.3.6.1.2.1.2.2.1.14.3& 1.3.6.1.2.1.2.2.1.20.3:geheim@192.168.33.1
19 Options[interfaceerrors_3]: growright,nopercent
20 #... weitere Einträge für eth1 gekürzt
Tabelle 1: Konfigurations-Optionen

Tabelle 1: Konfigurations-Optionen

Externe Datenquellen

Statt SNMP direkt zu benutzen, lassen sich auch eigene Skripte und Programme in MRTG einbinden, sie sammeln extern Daten und übergeben sie an MRTG. So lassen sich Messdaten grafisch anzeigen, ohne einen SNMP-Agenten einsetzen zu müssen. Oft ist es einfacher, einen vorhandenen SSH-Zugang zu einer Maschine zu nutzen, als dort einen SNMP-Agenten einzurichten. Wie ein Cron-Job SSH-Aufrufe absetzen kann, ohne dass er ein Passwort oder eine Passphrase kennt, wird in dem Artikel über OpenSSH in der “Sysadmin”-Rubrik dieses Hefts näher beschrieben.

Ein Skript kann auch Messwerte aus mehreren Quellen verknüpfen oder die Messdaten anderweitig aufbereiten. In dem folgenden Beispiel soll ein Perl-Skript (siehe Listing 2) ermitteln, wie viel Platz auf der ersten Partition der Festplatte belegt ist. Hierfür muss es zwei SNMP-Variablen miteinander verknüpfen:

  • Die Blockgröße ist in »hrStorageAllocationUnits« abgelegt,
  • die Anzahl belegter Blöcke ist in »hrStorageUsed« zu finden.

Wie die OIDs zustande kommen, erklärt der SNMP-Grundlagen-Artikel zu Beginn dieser Titelstrecke. Mit dem Perl-Modul »NET::SNMP« fragt das Skript die beiden Werte ab und berechnet daraus den belegten Platz in MByte. Als Parameter erwartet es den Namen des Hosts und den Community-String.

Um das Perl-Skript aufzurufen, muss der »Target«-Eintrag in der MRTG-Konfiguration (siehe Listing 3) den Namen des Skripts und seine Parameter in Backticks »`« einschließen. Der erste Parameter ist die Rechneradresse »192.168.33.1«, an zweiter Stelle steht der Community-String »public«.

Listing 2: Externes Skript

01 #!/usr/bin/perl -w
02 # MRTG-Skript, ermittelt die belegte Festplatten-Kapazität
03 
04 use Net::SNMP;
05 
06 # Object-IDs der SNMP-Variablen
07 my $uptimeOID = '.1.3.6.1.2.1.1.3.0';
08 my $nameOID = '.1.3.6.1.2.1.1.5.0';
09 # hrStorageAllocationUnits
10 my $unitsOID = '.1.3.6.1.2.1.25.2.3.1.4.1';
11 # hrStorageUsed
12 my $usedOID = '.1.3.6.1.2.1.25.2.3.1.6.1';
13 
14 # Werte abfragen
15 ($session, $error) = Net::SNMP->session(
16     Hostname => $ARGV[0],
17     Community => $ARGV[1]);
18 die "Session-Fehler: $error" unless ($session);
19 # Uptime und Name
20 $result = $session->get_request($uptimeOID);
21 $uptime = $result->{$uptimeOID};
22 $result = $session->get_request($nameOID);
23 $name   = $result->{$nameOID};
24 # Blockgröße und Anzahl genutzter Blöcke
25 $result = $session->get_request($unitsOID);
26 $units  = $result->{$unitsOID};
27 $result = $session->get_request($usedOID);
28 $used   = $result->{$usedOID};
29 # Belegten Platz in MByte umrechnen
30 $usedMB = int (($units * $used) / (1024 * 1024));
31 
32 # Werte an MRTG übermitteln
33 print "$usedMBn";
34 print "0n"; # zweiter Wert wird nicht angezeigt
35 print "$uptimen";
36 print "$namen";

Listing 3: Konfiguration für externes Skript

01 WorkDir: /usr/local/mrtg/html
02 Language: german
03 Background[_]: #eeeeee
04 
05 Target[Festplatte]: `/usr/local/mrtg/perl/ mrtg-get-linux.pl 192.168.33.1 public`
06 Options[Festplatte]: growright,noo,gauge
07 Title[Festplatte]: Auslastung Festplatte
08 MaxBytes[Festplatte]: 3138
09 Ylegend[Festplatte]: MB
10 ShortLegend[Festplatte]:  
11 Legend1[Festplatte]: Belegung Festplatte in MB
12 Legend2[Festplatte]: nicht gebraucht
13 LegendI[Festplatte]:  MB 
14 LegendO[Festplatte]:  nicht gebraucht 
15 PageTop[Festplatte]: <H1>Belegung Festplatte</H1>
16  Festplatte "/"

Keine Differenzen

Die Option »gauge« weist MRTG an, den exakten ermittelten Wert abzuspeichern und nicht die Differenz zum letzten Wert. Bei Messungen des Datentransfers wäre die Differenz erforderlich, da die SNMP-Agenten alle übertragenen Pakete summieren, der Wert erhöht sich also ständig. Bei der Festplattenbelegung ist der absolute Wert richtig. Der Eintrag »noo« (no Output) verhindert, dass MRTG den zweiten Wert ausgibt, »noi« würde die Anzeige des ersten Werts unterbinden. Das Skript muss aber beide Werte übergeben. MRTG erwartet von ihm vier Zeilen Ausgabe:

  • Erster Wert,
  • zweiter Wert,
  • System-Uptime sowie
  • Name des Systems.

Den Inhalt der Zeilen drei und vier bindet MRTG am Anfang der HTML-Seiten ein, noch vor den Statistiken. Das Ergebnis ist in Abbildung 2 zu sehen.

Wer viele Statistiken mit MRTG erstellt, wird sich über den »indexmaker« freuen. Dieses Programm aus dem MRTG-Paket erzeugt eine Übersichtsseite über die MRTG-Graphen. Es erwartet als Parameter mindestens eine MRTG-Konfigurationsdatei, in der Regel sind es mehrere.

Abbildung 2: Kleine Hinweise können Wunder bewirken: Zunächst ist die Partition mit 2829 MByte belegt. Nachdem der User seine Festplatte aufgeräumt hat, sinkt der Wert auf 908 MByte.

Abbildung 2: Kleine Hinweise können Wunder bewirken: Zunächst ist die Partition mit 2829 MByte belegt. Nachdem der User seine Festplatte aufgeräumt hat, sinkt der Wert auf 908 MByte.

Übersicht dank Indexmaker

Das folgende Beispiel bestimmt die Ausgabedatei und legt fest, dass die Übersicht eine Spalte breit ist. Zusätzlich gibt es den Seitentitel vor. Jede Grafik soll mit dem Titel überschrieben werden, der in den Konfigurationsdateien unter »Title« vorgegeben wurde, im Beispiel »Auslastung Festplatte«.

/usr/bin/indexmaker 
--output=/usr/local/mrtg/html/index.html 
--columns=1 
--title "Status Linux Router" 
--section title 
/usr/local/mrtg/linux.cfg 
/usr/local/mrtg/linux-errors.cfg 
/usr/local/mrtg/linux-festplatte.cfg

Das Ergebnis ist eine HTML-Seite mit den fünf Tagesgrafiken (Datentransfer IN, Datentransfer OUT, Fehler IN, Fehler OUT, Festplatte). Der sechste Wert ist ausgeblendet, daher ignoriert ihn auch der Indexmaker. Jede Grafik ist ein Link: Ein Klick – und der Browser zeigt die Seite mit den detaillierten Grafiken und Angaben.

Ausblick

MRTG ist ein flexibles und mächtiges Tool zur Überwachung des Netzes und der Rechner. Das Format der abgespeicherten Werte erlaubt allerdings keine Weiterverarbeitung, da MRTG nur die gemittelten Werte protokolliert, um daraus die Grafiken mit der Wochen-, Monats- und Jahresansicht zu erzeugen. So kann man die künftige Auslastung der Komponenten zwar durch genaues Hinsehen schätzen, aber keine echte Prognose berechnen.

Für solche Anwendungen kann das RRD-Tool[2] die bessere Wahl sein: Die Round Robin Database stammt vom selben Autor wie MRTG. (fjl)

Infos

[1] Tobias Oetiker, MRTG-Homepage: [http://www.mrtg.org].

[2] RRD-Tool: [http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/]

[3] MIB Central: [http://www.mibcentral.com/]

[4] SNMP for the Public: [http://www.wtcs.org/snmp4tpc/]

[5] Listings: [ftp://ftp.linux-magazin.de/pub/magazin/2002/09/MRTG/]

Der Autor

Wilhelm Boeddinghaus arbeitet als freier Berater im Themenumfeld Netzwerke und Netzwerksicherheit mit Schwerpunkt Linux und Cisco.

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben