PHP Network WeatherMap: Unterschied zwischen den Versionen
Lukas (Diskussion | Beiträge) Die Seite wurde neu angelegt: „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 f…“ |
Lukas (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 8: | Zeile 8: | ||
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. | 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: | Für jeden Port erstellen wir ein RRD-Archiv nach folgendem Muster: | ||
Zeile 34: | Zeile 36: | ||
PFAD=/var/lib/rrd | PFAD=/var/lib/rrd | ||
$PFAD/switch1_47.sh | $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. |
Version vom 27. Juni 2018, 15:53 Uhr
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.