Interface-Statistiken in Cacti für Pirelli Router erstellen
In diesem Beitrag geht es darum, Cacti Interface-Statistiken auf einem Pirelli Router über den Umweg via SSH zu erzeugen. Dies wird auf bestimmten, kastrierten Pirelli-Geräten, wie sie von bestimmten Providern ihren Kunden zur Verfügung gestellt werden, auch dringend benötigt, da die Geräte den nötigen SNMP-Support schmerzlich vermissen lassen. Das fehlende SNMP Support lässt sich auf diesen Geräten auch mit Hilfe eines Hacks, der bereits seit mehreren Jahren in einschlägigen Foren kursiert, nicht nachrüsten.
Wer einen solcherart kastrierten Pirelli-Router sein Eigen nennt, dürfte daher an dieser Anleitung interessiert sein.
Zugegebenermassen muss man zwar mit der Kirche ums Dorf, aber es geht.
Der Trick liegt im Command Line Interface, welches per Telnet und SSH erreichbar ist. Hier kann mit dem Befehl “net ifcnt all” für jede Schnittstelle des Routers eine Statistik ausgegeben werden.
Ersetzt man das Schlüsselwort “all” durch die Interface-Bezeichnung, bspw. “wl0”, erhält man die jeweiligen Einzelstatistiken.
Im folgenden Beispiel werden die Statistiken zur WAN-Schnittstelle angezeigt:
[~] # ssh admin@192.0.2.1
OpenRG> net ifcnt eth5.xx
---- Driver statistics: port "LAN Fiber VLAN xx" ----
Device name: eth5.10 - Type: 48, Ethernet
Network = WAN
Port status = Connected
Counters
Rx Packets: 2006090
Tx Packets: 2477100
Rx Bytes: 835058499
Tx Bytes: 2356068887
Rx Pkts Errors: 0
Tx Pkts Problems: 0
Rx Dropped Pkts: 0
Tx Dropped Pkts: 0
Rx Multicast Pkts: NA
Tx Multicast Pkts: NA
Rx Broadcast Pkts: NA
Tx Broadcast Pkts: NA
Collisions: NA
Returned 0
OpenRG>
Wer sich in der Pirelli Console schon umgesehen hat, ist vielleicht angesichts der vielen Schnittstellen etwas überfordert.
Die gute Nachricht: Die meisten davon braucht’s nur für interne Zwecke und sind für die Überwachung kaum relevant. Daher hier eine Auflistung der notwendigen Schnittstellen und deren Funktion:
eth0 Switchport 1 eth1 Switchport 2 eth2 Switchport 3 eth3 Switchport 4 wl0 WLAN Access Point eth5.xx WAN Schnittstelle (Fiber oder xDSL)
Damit diese Daten nun für Cacti nutzbar werden, bedarf es eines Hilfsprogramms, welches folgende Schritte durchführt:
- Login auf den Router
- Abrufen der Interface-Ststistiken
- Ausgabe der bereinigten Informationen
Gerade letzterem kommt eine grosse Bedeutung zu, da die Ausgabe wiederum scriptbasiert verarbeitet werden soll und somit normalisiert werden muss.
Wie dies im Detail aussieht, beschreibt die Cacti-Dokumentation.
Basierend auf einem Beispiel-Script aus dem py-expect Package habe ich eine stark abgewandelte Version erstellt, welche allein dem Auslesen des Pirelli dient und vollständig parametrisierbar ist.
Damit das Script ausführbar wird, sind zum Beispiel unter Debian die Packages python2.5 und python-pexpect erforderlich.
Das ganze sieht beim Ausführen dann wie folgt aus:
[~] # /opt/sbin/cg_ifstats.py -u admin -p password -h 192.0.2.1 -i wl0 RxBytes:4230422745 TxBytes:3249795610
Damit steht bereits der erste Baustein bereit. Nun muss Cacti noch entsprechend eingerichtet werden, damit die Script-Ausgabe zur Erstellung von Statistiken verwendet werden.
Anweisungen dazu finden sich ebenfalls in der Cacti-Dokumentation.
Die nachfolgenden Schritte verdeutlichen dies anhand einiger Screenshoots.
Man kann – und darf 😉 – es sich aber auch ein bisschen einfacher machen und einfach das Data Template mit den Abhängigkeiten direkt importieren.
Das Data Template kann zusammen mit dem Python Script hier heruntergeladen werden.
Wer die erforderlichen Schritte selbst durchführen möchte, erstellt zuerst eine sogenannte Date Input Method nach dem gezeigten Vorbild.
Dabei müssen insbesonders die Input wie auch die Output Fields erfasst werden (auf Schreibweise achten).
Die Data Input Method wird unter der Bezeichnung “Pirelli – IFSTATS” gespeichert.
Anschliessend wird ein neues Data Template mit der Bezeichnung “Pirelli – Traffic” erzeugt.
Unter Data Input Method wird die zuvor erstellte Datenquelle “Pirelli – IFSTATS” verwendet.
Weiterhin benötigt das Data Template die Quelldatensätze, “traffic_in” und “traffic_out”. Diese werden mit den einzelnen Zählern der Data Input Method “Pirelli – IFSTATS” verbunden, also “traffic_in” mit “RxBytes” und “traffic_out” mit “TxBytes”.
Wichtig ist, dass als “Data Source Type” der Typ “COUNTER” verwendet wird.
Unter “Custom Data” wird bei allen Feldern die Checkbox “User Per-Data Source Value” markiert.
Dies ist erforderlich, damit beim folgenden Erzeugen der Graphen die Werte pro Host und Datenquelle einzeln definiert werden können.
Nun fehlt das Graph Template. Hierfür klont man am einfachsten eines der bestehenden Graph Templates, beispielsweise “Interface – Traffic (bits/sec, Total Bandwidth)”.
Das geklonte Graph Template bedarf noch einiger Anpassungen, insbesonders bei den Graph Template Items und Graph Item Inputs.
Als Letztere dienen die bereits zuvor definierten Datenquellen “traffic_in” und “traffic_out”.
Die Datenquell muss auch bei den Graph Template Items noch entsprechend zu “traffic_in” und “traffic_out” angepasst werden.
Damit wäre soweit alles vorbereit, dass nun ein Host-Objekt für den Pirelli erfasst werden kann.
Anschliessend werden dem Host-Objekt neue Graphs hinzugefügt.
Je nach Bedarf werden für einzelne oder alle Schnittstelle (wl0, eth5.10, eth0, usw) die Graphen erzeugt.
Dazu muss man zur besseren Unterscheidung unter Title auch die jeweilige Schnittstellenbezeichnung ergänzt werden.
Ferner sind in den Feldern für Username, Passwort, Hostname und Interface die erforderlichen Daten einzutragen.
Nach Abschluss aller Schritte lassen sich fortan die erzeugten Graphs in Cacti bewundern.
March 1st, 2012 at 2:42 pm
Hey gdelmatto
Ich hab das genau so bei mir aufgebaut. Cacti läuft zwar auf einem Synology aber funktioniert alles.
Im ersten Screenshot ist noch ein Fehler drin. Da fehlen bei host und ifname die ‘ vor/nach der
Gruss
haloze
March 10th, 2013 at 9:04 pm
Hallo
Bei mir funktioniert das irgendwie nicht.
Ich hab ein Pirelli PRGAV4202N mit der Firmware 4.8.3.DWVV_TAU_5.3.5 von der Telekom.AT.
Wenn ich mir am ADSL Modem anmelde als user T****m (mit user admin kann ich mich nicht andemden), und den oben beschriebenen Befehl eingebe, bekomme ich folgende Meldung:
OpenRG> net ifcnt all
Bad command – Try using help -s
anscheinend kennt er das kommando “ifcnt” nicht
OpenRG> help -s ifcnt
No matches for ‘ifcnt’
OpenRG> help net
Command Category net – net mquadrat commands
ifconfig Configure network interface
exit Exit sub menu
exit Exit sub menu
help Show help for commands within this menu
kann das mein Modem wirklich nicht, oder bin ich da in einem falschen Submenü?
Was mach i da falsch?
Danke
Günther
March 27th, 2013 at 3:17 pm
Es gibt verschiedene Firmware-Versionen für die Pirelli-Geräte.
Ob und welche Funktionen drin sind, kann jeder Anbieter für sich selbst entscheiden.
Gewisse Funktionen stehen je nach dem auch nur nach einem Admin-Unlock bereit.
Wie es sich genau bei deinem Gerät verhält, kann ich nicht beurteilen.
Mögliche Ursachen:
– Dein Account ist kein vollwertiger Admin, darum ist der Befehl nicht verfügbar.
– Allenfalls musst du einen Admin-Unlock auf deinem Gerät machen
– Oder dein Gerät unterstützt diese Funktion effektiv nicht (siehe Erklärung oben)
Lg, Gianpaolo