Routerüberwachung mit SNMP und MRTG

Stand: 13.04.2005 - Alles am Beispiel des Linksys WRT54G WLAN-Routers mit Sveasoft Alchemy-Firmware ab pre5.3 bzw. DD-WRT #21c

Ein Router kann eine Vielzahl an Parametern preisgeben: Im Webfrontend stehen diese Werte nur teilweise und ziemlich verstreut zur Verfügung (z. B. die externe IP und die CPU-Last). (Bemerkung: Die DD-WRT-Firmware bietet einen umfassenden Statusbildschirm.) Das ist für eine automatisierte Auswertung sehr umständlich. SNMP (das Simple Network Management Protocol) ermöglicht diese Werte gezielt durch die Angabe einer Adresse abzufragen.
SNMP arbeitet nach Client-Server-Architektur: der Router ist der Server und der PC der Client, der Parameter abfragt, die Übertragung im Netz erfolgt mit dem ungerichteten User Datagram Protocol (UDP). Die Vielzahl von Parametern sind in einer Management Informationsdatenbank (MIB) hierarchisch gegliedert abgelegt und können wie Kapitel eines Buches (1, 1.2, 1.2.1.4, ...) und über symbolische Namen (IfInOctets, ifInErrors, ...) adressiert werden. Im folgenden nutze ich den Begriff MIB auch für einen einzelnen Parameter der Gesamtdatenbank. Einige Parameter der MIB sind allgemein verfügbar, andere sind herstellerspezifisch implementiert. Die Einfachheit der Implementation ist eine Stärke von SNMP. Hersteller können neue Parameter einfach durch Hinzufügen in die MIB verfügbar machen. Mit Toolprogrammen wie GetIf oder WS_Ping kann man sich unter Angabe von IP des Routers und der Community alle oder einzelne Werte ausgeben lassen und gezielt nach Werten suchen.
DynDNS-Clients wie DynSite ermitteln mit SNMP die externe IP. Das Programm Multi Router Traffic Grapher (MRTG) erzeugt damit eine Durchsatzgraphik wie dieser hier:

Traffic-Diagramm Tagesansicht
Grün der Durchsatz des eingehenden, blau des ausgehenden Datenverkehrs im 5-minütigen Durchschnitt.

Der Router hat eine Reihe von Schnittstellen, jede mit einer Nummer (1..9) und einer Kurzbezeichnung (ifDescr: lo, teql0, imq0, imq1, eth0, eth1, vlan0, vlan1, br1) und jeweils eigenen Betriebsparametern (ifAdminStatus: aktiv/inaktiv, ifMtu: MTU, ifSpeed: max. Geschwindigkeit, ifInOctets, ifOutOctets: Anzahl empfangener und gesendeter Bytes). Folglich ist die Interfacenummer Bestandteil der MIB - ein Index in die Tabellenfelder. Man kann Interface 1 mit 1.3.1.4.1 und Interface 2 mit 1.2.1.4.2 abfragen. Uns interessiert primär der Durchsatz der aktiven Schnittstellen und davon besonders die Schnittstelle zum Internet.

Beispiele von MIBs, die im Linksys WRT54G-Router mit Alchemy pre5.3-/DD-WRT-Firmware verfügbar sind

MIBInterface    BedeutungInhalt (Beispiel)
1.3.6.1.2.1.1.1.0 RouterbezeichnungLinux WRT54G 2.4.20 #2 Thu Sep 9
sysDescr  10:42:05 EDT 2004 mips
1.3.6.1.2.1.1.3.0 Uptime (Einheit, Umrechnungsfaktor?) 1 Tag 15:12 h    2479608682
sysUptime  
1.3.6.1.2.1.1.6.0 Routerstandort, den man imKaiserslautern
sysLocation Router eingepflegt hat
1.3.6.1.2.1.2.1 Anzahl Schnittstellen9
ifNumber.0  
 
1.3.6.1.2.1.2.2.1.4.6eth1MTU1436
1.3.6.1.2.1.2.2.1.5.6eth1Schnittstellengeschwindigkeit10000000
ifSpeed.6eth1Schnittstellengeschwindigkeit10000000
1.3.6.1.2.1.2.2.1.6.6 eth1Physische Adresse der Schnittstelle (MAC)000c76d41a28
1.3.6.1.2.1.2.2.1.10.6eth1Anzahl empfangener Bytes4043704387
ifInOctets.6eth1  
1.3.6.1.2.1.2.2.1.16 Anzahl gesendeter Bytes 
1.3.6.1.2.1.2.2.1.16.6eth1Anzahl gesendeter Bytes4169527092
ifOutOctets  
1.3.6.1.2.1.2.2.1.11.6eth1Anzahl empfangener Pakete15422692
ifInUcastPktseth1Anzahl empfangener Pakete3134049
1.3.6.1.2.1.2.2.1.20.6eth1Anzahl Pakete, die aufgrund von Fehlern4
ifOutErrors.6eth1nicht geschickt werden konnten 
 
1.3.6.1.4.1.2021.10.1.3.1 CPU-Last-1 (1-min Durchschnitt) [0..1]0.08
1.3.6.1.4.1.2021.10.1.3.2 CPU-Last-5 (5-min Durchschnitt)0.04
1.3.6.1.4.1.2021.10.1.3.3 CPU-Last-15 (15-min Durchschnitt)0.02
1.3.6.1.4.1.2021.10.1.5.1 CPU-Last-1 (1-min Durchschnitt) [0..100]8
1.3.6.1.4.1.2021.10.1.5.2 CPU-Last-5 (5-min Durchschnitt)4
1.3.6.1.4.1.2021.10.1.5.3 CPU-Last-15 (15-min Durchschnitt)2

Traffic-Überwachung mit MRTG

Das MakeCFG-Skript erzeugt eine MRTG.CFG-Konfigurationsdatei, die alle aktiven Schnittstellen auflisten läßt. Wenn man MRTG 30 min bei aktivierter Internetverbindung laufen läßt und dann die einzelnen Diagramme vergleicht, findet man 3 Arten Diagramme: die mit Nullinie, die mit sehr hohen Übertragungsraten (100 Mbit LAN-Verkehr) und eine Schnittstelle mit Übertragungsraten, die der Internetanbindung entsprechen: Schnittstelle 6 "eth1".
Für die Durchsatzzahlen fragt MRTG die Anzahl empfangener und gesendeter Bytes über 2 vordefinierte MIBs ab und muß die SNMP-Community (default: "public") und die IP des Routers wissen. Das sind daher Parameter für das MakeCFG-Skript.

MRTG stellt den ersten Wert (default: empfangene Bytes, ifInOctets) als Fläche, den 2. Wert (default: gesendete Bytes, ifOutOctets) als Linie dar. Mit der Option noi und noo kann man die Ausgabe eines der beiden ermittelten Werte unterdrücken, er wird aber weiterhin in der Log-Datei protokolliert und steht bei einer Änderung der Konfigurationsdatei weiterhin zur Verfügung. Die Größe der Graphik stellt man mit XSize[<Target>]: 600 (20..600) und YSize[<Target>]: 250 (>20) ein.

Bemerkung

Bei den inkrementellen Zählern kommt es früher oder später zu eine Zahlenüberlauf. Leider eher früher als später, wenn man sich überlegt, daß ein Tag 86.400 s hat und man vielleicht jede Sekunde 30.000 Bytes überträgt (dann erhöht sich der Zähler täglich um 2.592.000.000). Im MRTG-Diagramm äußert sich das in einer Nullinie und einer Fehlermeldung, falls man das MRTG-Skript mit PERL.EXE in einer Command-Shell und nicht über WPERL.EXE gestartet hat.
Workaround: Der Router nicht tagelang am Stück betreiben oder den Router ab und an durchbooten (Telnet-Shell öffnen und "reboot" eingeben), dann beginnen diese Zähler wieder bei Null zu zählen.
Wenn das Kind schon in den Brunnen gefallen ist, muß man die fehlerhaften obersten Zeilen aus der Logdatei löschen und eine neue 1. Zeile mit dem Zeitwert der 2. Zeile und 2 sinnvollen Durchsatzwerten an den Anfang stellen. Man könnte auch die Logdatei löschen, verliert dann aber natürlich auch die Statistik der letzten Wochen und Monate.

Wie arbeitet MRTG?

Es ermittelt die empfangenen und gesendeten Bytes zu einem Zeitpunkt und 5 min später wieder um die Übertragungsrate durch Vergleich der beiden Werte zu errechnen.

Zeitpunkt       empfangene Bytes     Übertragungsratein    gesendete Bytes    Übertragungsrateout    
t0500.000 400.000 
t1 (5 min später)12.500.00040.000 Bytes/s9.400.00030.000 Bytes/s
t2 (10 min später)23.000.00035.000 Bytes/s19.900.00035.000 Bytes/s
MRTG berechnet also den Durchsatz Bytes pro Sekunden als Bytes(tn) - Bytes(tn-1) / 300 s.
Diese Berechnung spiegelt sich im Format der Logdatei, die MRTG nutzt und fortschreibt:
1. Zeile: Zeit (Sekunden seit "The EPOCH" 01.01.1970 0:00 Uhr), aktuelle Anzahl Bytes-in, aktuelle Anzahl Bytes-out
2. Zeile: Zeit (wie in Zeile 1), aktueller Durchsatz Bytes-in, Durchschnittl. Durchsatz Bytes ...
3. Zeile: Zeit (Sekunden, aber 300 s weniger als in Zeile 2) ...

Diagramm zur Anzeige der CPU-Last des WRT54G-Routers

Die CPU-Last ist im Gegensatz zur Anzahl empfangener Bytes, die immer größer wird, ein absoluter Wert im Bereich [0.00..1.00] bei MIB 1.3.6.1.4.1.2021.10.1.3.1..3 bzw. [0..100] bei MIB 1.3.6.1.4.1.2021.10.1.5.1..3. Dies teilt man MRTG über die Option gauge oder absolute in der MRTG.CFG-Konfigurationsdatei mit.
Will man andere Werte als die Standarddurchsatzzahlen protokollieren, muß man deren MIB, Community und IP-Adresse des Ziels angeben. Etwa so:
Target[router]: MIB1&MIB2:public@192.168.1.1:, also:
Target[router]: 1.3.6.1.4.1.2021.10.1.5.1&1.3.6.1.4.1.2021.10.1.5.2:public@192.168.1.1: * 100
für die CPU-Last-1 und die CPU-Last-5 (5-minütiger Durchschnitt) in Prozent.

Zeitpunkt    CPU-Last-1    Prozent im Diagramm    CPU-Last-15    Prozent im Diagramm
t03030 %1414 %
t1 (5 min später)2525 %99 %
Beispiel:
CPU-Last-Diagramm Tagesansicht

Mit der Option ShortLegend stellt man die Standardeinheit Bytes pro Sekunde um auf %. Die zugehörige Logdatei speichert beispielsweise folgende Werte:
tn 1098740488 500 300
tn-1 1098740488 2 1 2 1
tn-2 1098740188 2 0 2 0
...
t0 1029974400 0 0 0 0

Wenn jemand Beispiele von der Router-Überwachung mit dem RRDTool hat, wäre ich sehr dankbar für die Zusendung von Beispielkonfigurationsdateien und Screenshots des Ergebnisses.

Routerüberwachung mit SamurizeScreenshot: Samurize AlchemyStats

Samurize ist ein kostenloses Desktop-Überwachungsprogramm mit vielen gleichfalls kostenlosen Zusatzmoduln, die Uhrzeit, Plattenplatz, CPU-Last, Posteingang und auch SNMP-Informationen anzeigen. Rechts ein Screenshot vom AlchemyStats-Modul, welches Firmwareversion, Router-Uptime, Durchsatz, externe IP, Gateway-IP, WLAN-Kanal und Übertragungsrate angibt. In der Konfiguration gibt man das Router-Paßwort, dessen IP und das SNMP-Public Community-Kennwort (default: public) an. Diese Anzeige ist völlig frei konfigurierbar: man kann weitere Anzeigen, wie z. B. unten die Uhrzeit, leicht dazu klicken.

Links

Zu meiner Homepage
Zu der Seite mit der Beschreibung meiner WLAN-Anbindung
Zur Traffic Analyse des Internetzugangs
Zur CPU-Last Analyse des WRT54G-Routers
Traffic-Statistik des DE-CIX, die mit RRDTool von Tobias Oetiker erstellt wurde.
MRTG Implementation Manual (engl.) (als .PDF-Datei 1.1 MB)
Eine Seite mit einigen Erläuterungen zu SNMP von David Guerrero (engl.)