PHP Network WeatherMap

Aus LT42-Wiki
Zur Navigation springenZur Suche springen

Schon längere Zeit möchte ich den Netzwerkstatus in der Schule auf einen Blick sehen können. Wichtig war mir, herauszufinden, welche Netzwerkströme wohin fließen, wo also Bandbreitenengpässe schlummern. Die RWTH Aachen hat eine PHPWeatherMap im Einsatz. Das Tool ist absolut klasse. Aus RRDTool-Dateien werden Informationen gesammelt und dann übersichtlich in einer Karte dargestellt. Eine grundlegende Einrichtung ist nicht so richtig dokumentiert, daher folgt hier ein Versuch, eine grundlegende Netzwerkstatusübersicht mit Hilfe von SNMP zu erreichen.

Zuerst installieren wir einige Programme:

sudo apt-get update
sudo apt-get install rrdtool apache2 php7.0 php-pear php-gd snmpd libapache2-mod-php7.0

Dann sollte man sich erstmal einen Plan über die zu überwachende Netzwerkinfrastruktur machen. Dabei ist wichtig, über welche Ports die Switches miteinander verbunden sind. Hier geben wir der Einfachheit halber den Traffic in beide Richtungen immer von einem Port wieder.

Beispiel: Switch1 ist an Port 47 mit Port 48 an Switch2 verbunden. Switch2 wiederum an Port 47 mit Switch 3 an Port 48. Wir überwachen dann nur die Ports 47.

RRD

Für jeden Port erstellen wir ein RRD-Archiv nach folgendem Muster:

rrdtool create /var/lib/rrd/switch1_47.rrd \
--step 300 \
DS:traffic_in:COUNTER:600:0:U \
DS:traffic_out:COUNTER:600:0:U \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:6:700 \
RRA:AVERAGE:0.5:24:775 \
RRA:AVERAGE:0.5:288:797 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:6:700 \
RRA:MAX:0.5:24:775 \
RRA:MAX:0.5:288:797

Für jeden Port kommt dann ein Shell-Skript dazu, dass alle fünf Minuten den aktuellen Traffic abfragt:

rrdupdate /var/lib/rrd/switch1_47.rrd N:\
`/usr/bin/snmpget -v 1 -c public -Oqv 172.16.10.1 .1.3.6.1.2.1.2.2.1.10.47`:\
`/usr/bin/snmpget -v 1 -c public -Oqv 172.16.10.1 .1.3.6.1.2.1.2.2.1.16.47`

Voraussetzung ist, dass SNMPv1 auf dem Switch aktiviert ist. Über die OID .1.3.6.1.2.1.2.2.1.10. (Eingang)/.1.3.6.1.2.1.2.2.1.16. (Ausgang) erhält man die aktuelle Trafficauslastung in MBit/s auf dem jeweiligen Port. Wichtig für RRD ist es, dass die Abfrage regelmäßig erfolgt, um ordentliche Durchschnitte zu errechnen.

Wir erstellen noch eine Datei /var/lib/rrd/rrd.sh mit dem Aufruf der einzelnen Skripte für die Ports:

PFAD=/var/lib/rrd
$PFAD/switch1_47.sh
$PFAD/switch2_47.sh

Das Skript legt dann in einem 5-Minuten-Turnus die RRD-Files an. Cool ist, dass man dadurch mit den Daten auch andere Dinge wie Langzeitanalysen oder -statistiken erstellen kann.

PHP Network WeatherMap

Wir laden das Skript von https://network-weathermap.com/#download herunter und legen es in ein Verzeichnis /var/www/html/weathermap unter

example.com/weathermap/check.php

werden dann Informationen über fehlende Pakete angezeigt. Wenn da was fehlt, sollte es nachinstalliert werden, sonst kommt es zu Problemen.

Nach dem die Abhängigkeiten installiert sind, kann unter

example.com/weathermap/editor.php

eine neue Karte erzeugt werden. Alternativ kann die Karte auch über eine Konfigurationsdatei konfiguriert werden. Zuerst erstellt man zwei Nodes (die Geräte), die dann über Links (letztlich die Kabelverbindungen) miteinander verbunden werden. Als Target gibt man dann

/var/lib/rrd/switch1_47.rrd:traffic_in:traffic_out

an. So liest die Weathermap dann alle fünf Minuten die aktuellen Daten aus der Datei.

Crontab

Damit alles funktioniert, müssen noch zwei Crontabs erzeugt werden:

*/5 * * * * /var/lib/rrd/rrd.sh > /dev/null 2>&1
*/5 * * * * /usr/bin/php /var/www/html/weathermap/weathermap --config /var/www/html/weathermap/configs/schule.conf --output /var/www/html/weathermap.png > /dev/null 2>&1

Ersterer fragt die aktuellen Trafficzahlen der Switches alle fünf Minuten ab. Zweiterer erzeugt eine Weathermap aus /var/www/html/weathermap/configs/schule.conf als weathermap.png, die dann eingebunden werden kann.

Problem

Die Map scheint einen Bug zu haben. Ruft man das Skript außerhalb des Verzeichnisses (zum Beispiel über Crontab) auf, erscheint folgender Fehler: PHP Warning: opendir(/var/www/html/weathermap//var/www/html/weathermap/lib/lib/datasources): failed to open dir: No such file or directory in /var/www/html/weathermap/lib/Weathermap.class.php on line 699 WARNING: Couldn't open data Plugin directory (/var/www/html/weathermap/lib/lib/datasources). Things will probably go wrong. [WMWARN06]

Ich habe das mit einem (unsauberen) Fix gelöst:

ln -s /var/www/html/weathermap/lib /var/www/html/weathermap/lib/lib

Damit ist dem Fehler Einhalt geboten und die Map wird sauber erzeugt.

Ab nun wird alle fünf Minuten eine Karte generiert und unter example.com/weathermap.png zur Verfügung gestellt.