Vom Webinterface ins Monitoring: Ein eigener Prometheus-Exporter für den Sodola-Switch
In meinem Netzwerk arbeitet ein Sodola SL-8T2XS-WEB. Seine Weboberfläche zeigt Temperaturen, Portzustände und Paketstatistiken an. Diese Informationen wollte ich in mein bestehendes Monitoring übernehmen: automatisch erfassen, langfristig speichern und auf einem Grafana-Dashboard darstellen.
Daraus entstand ein eigener Docker-Exporter – und schließlich ein Downloadpaket, mit dem sich die Lösung auch in anderen Installationen nutzen lässt.
Das Ziel und die Voraussetzungen
Die wichtigsten Fragen waren schnell formuliert: Wie warm wird der Switch? Welche Ports sind verbunden? Mit welcher Geschwindigkeit laufen die Verbindungen? Und treten Übertragungsfehler auf?
Prometheus und Grafana waren bereits vorhanden. Als Plattform für zusätzliche Exporter stand eine Monitoring-VM mit Docker zur Verfügung. Der Switch sollte deshalb keine zusätzliche Software benötigen. Die Datenerfassung sollte von außen erfolgen.
Unsere bestätigte Gerätebasis war ein Sodola SL-8T2XS-WEB mit Firmware 1.0.0.6 und Hardwarestand A0. Für die Abfragen benötigten wir Netzwerkzugriff auf seine Managementoberfläche und gültige Zugangsdaten.
Die Überlegung: Woher bekommen wir die Daten?
Der erste Ansatz war, die vorhandene Weboberfläche genauer anzusehen. Wenn der Browser Temperatur und Portstatistiken anzeigen kann, muss er diese Informationen vom Switch erhalten.
Entscheidend war also nicht das sichtbare HTML, sondern die Kommunikation dahinter: Welche Anfragen stellt der Browser, und was antwortet der Switch?
Der Browser als Werkzeug
Über die Netzwerkansicht der Browser-Entwicklertools haben wir die Anfragen beim Aufrufen der Status- und Portstatistikseiten untersucht.
Dabei fanden wir zwei nützliche Endpunkte:
/status.json
/port_statistics.json
status.json lieferte unter anderem die Temperatur sowie Modell-, Firmware- und Hardwareinformationen.
port_statistics.json enthielt für alle zehn Ports den Verwaltungszustand, den Linkstatus sowie Zähler für gesendete und empfangene Pakete und Fehler.
Damit hatten wir strukturierte JSON-Daten als Grundlage. Ein aufwendiges Auslesen der sichtbaren Tabellen war nicht erforderlich.
Die erste Hürde: Anmeldung und Sitzung
Ein direkter Aufruf mit curl lieferte zunächst keine JSON-Daten. Stattdessen antwortete der Switch mit einer HTML-Anweisung zur Weiterleitung auf die Loginseite.
Bemerkenswert dabei: Der HTTP-Status war trotzdem 200 OK. Ein erfolgreicher HTTP-Aufruf bedeutete also noch nicht, dass wir verwertbare Messwerte erhalten hatten.
Anschließend untersuchten wir den JavaScript-Code der Loginseite. Die Anmeldung erfolgt über /authorize; Benutzername und Passwort werden dabei jeweils als MD5-Hash übertragen. Nach der Anmeldung verwendet der Browser Sitzungscookies.
Diese Abfolge bildeten wir im Exporter nach:
- Die beiden JSON-Endpunkte abfragen.
- Eine erforderliche Anmeldung erkennen.
- Anmelden und Cookies speichern.
- Die Daten erneut abrufen.
- Die Sitzung für weitere Abfragen wiederverwenden.
MD5 ist dabei Bestandteil des Geräteprotokolls und verschlüsselt die Verbindung nicht. Der Managementzugriff gehört deshalb in ein vertrauenswürdiges Netzwerk.
Vom JSON zum eigenen Exporter
Der Exporter wurde in Python umgesetzt und stellt die Messwerte unter /metrics im Prometheus-Format bereit.
Die Gerätetemperatur und Portzustände werden als Gauges ausgegeben. Die kumulierten Paket- und Fehlerzähler werden als Counter veröffentlicht. Prometheus kann daraus mit rate() beispielsweise empfangene Pakete pro Sekunde berechnen.
Eine wichtige Grenze haben wir bewusst berücksichtigt: Die untersuchte API liefert Paket-, aber keine Bytezähler. Daraus lässt sich kein verlässlicher Datenverkehr in Mbit/s berechnen. Die ausgehandelte Portgeschwindigkeit wird separat dargestellt und beschreibt die Verbindung, nicht deren aktuelle Auslastung.
Auch Fehlerfälle wurden berücksichtigt. Schlägt die Geräteabfrage fehl, meldet der Exporter sodola_up 0 und gibt für diese Abfrage keine alten Gerätedaten aus.
Betrieb als Docker-Container
Für den dauerhaften Betrieb haben wir den Exporter mit Docker Compose verpackt. Er läuft auf der Monitoring-VM und benötigt keine Installation auf dem Switch.
Prometheus ruft den Exporter regelmäßig ab. Jeder /metrics-Aufruf löst die Abfrage der beiden JSON-Endpunkte aus. Das Scrape-Intervall bestimmt damit auch, wie häufig der Switch angesprochen wird.
Benutzername und Passwort werden über lokale Dateien als Compose-Secrets eingebunden. Für das spätere Downloadpaket ergänzten wir die Einrichtung um eine Abfrage der Switch-IP. Damit werden beim Setup IP-Adresse, Benutzername und Passwort eingegeben, statt eine persönliche Geräteadresse im Paket fest einzutragen.
Die Darstellung in Grafana
Nachdem die Metriken in Prometheus ankamen, entstand ein eigenes Grafana-Dashboard.
Die Temperatur wurde sowohl als aktueller Gauge-Wert als auch im zeitlichen Verlauf dargestellt. Dazu kamen Portzustände, Linkgeschwindigkeiten sowie Graphen für Paket- und Fehlerraten.
So lassen sich aktuelle Zustände und Veränderungen erkennen: ein wärmer werdender Switch, ein ausgefallener Link oder zunehmende Empfangsfehler an einem bestimmten Port.
Für die Anzeige auf einem Kiosk-Monitor wurden die wichtigsten Informationen anschließend in einer kompakten Infrastrukturübersicht zusammengeführt.
Das Ergebnis
Aus einer vorhandenen Weboberfläche wurde eine automatisierte Monitoring-Anbindung: Der Browser half uns, die Datenquellen und Anmeldung zu verstehen. Der Python-Exporter übersetzt diese Daten für Prometheus, Docker übernimmt den Betrieb und Grafana macht sie übersichtlich sichtbar.
Das Downloadpaket enthält die Einrichtung, Docker-Konfiguration und ein Prometheus-Beispiel. Persönliche Zugangsdaten sind nicht enthalten.
Bestätigt ist die Lösung für den genannten Switch und Firmwarestand. Ob andere Sodola-Modelle dieselben Endpunkte und dieselbe Anmeldung verwenden, muss jeweils geprüft werden.






Wer den Exporter als Docker Container nutzen möchte, schreibt mir kurz eine Mail…