Eerder schreef ik over het monitoren van een KPN DSL-verbinding middels OpenWRT en Prometheus. Dit is echter niet de enige KPN-verbinding die ik onder mijn beheer heb en waarop ik monitoring wil toepassen. Idealiter zou ik ook daar natuurlijk een modem met OpenWRT plaatsen zodat ik op dezelfde manier kan monitoren, maar het feit dat ik hier iets over schrijf wijst er natuurlijk al op dat het helaas niet zo eenvoudig is.

De verbinding in kwestie maakt namelijk gebruik van ‘KPN Sneller Internet Buitengebied’, hetgeen betekent dat de DSL-verbinding wordt bijgestaan door een 4G-modem om de treurige snelheden een stukje richting de 21e eeuw te trekken. Doordat KPN hiervoor ongedocumenteerde MPTCP-magie gebruikt zitten we helaas vast aan de door KPN geleverde Experiabox V10. Net als de meeste modems die door providers worden geleverd is dit apparaat volledig dichtgetimmerd wat interessante zaken betreft. De enige manier om informatie uit het modem te halen is via de webinterface.

Via deze webinterface zijn gelukkig wel enige statistieken over de DSL-verbinding inzichtelijk.

Experiabox V10 DSL Statistieken

Ik wil echter deze gegevens graag over tijd bijhouden door middel van Prometheus, net als in mijn eerdere schrijven. In tegenstelling tot bij OpenWRT is het uitgesloten om de exporter op het apparaat te draaien. We hebben daarom een collector nodig die de gegevens van het apparaat leest en beschikbaar maakt voor de Prometheus server.

Nu ben ik absoluut geen held in het schrijven van scrapers, maar gelukkig staat bijna tegenwoordig bijna alles wat je kunt bedenken op Github. Zo ook kwam ik dit project tegen van ene Wouter. Deze collector scrapet de webinterface van de Experiabox en maakt de verzamelde gegevens beschikbaar voor Prometheus. Helaas lijkt het project geschreven voor iemand met een glasvezelverbinding, aangezien alleen gegevens worden verzameld voor de ethernetpoorten van het apparaat. Nu ben ik niet alleen geen held met scrapers, maar ook zeker geen held met Go, de taal waarin deze collector is geschreven. Gelukkig bood de bestaande code genoeg houvast en inspiratie om verder te klussen.

Ik heb een eigen fork gemaakt van het project waardoor het nu ook mogelijk is de DSL-gegevens te verzamelen en exporteren. Mocht je geïnteresseerd zijn, het eenvoudigst is waarschijnlijk de docker container te gebruiken. Dit werkt ongeveer als volgt:

docker run -d --name="expexporter" \
-e EXPERIA_V10_LISTEN_ADDR=localhost:9684 \
-e EXPERIA_V10_TIMEOUT=10 \
-e EXPERIA_V10_ROUTER_IP=192.168.2.254 \
-e EXPERIA_V10_ROUTER_USERNAME=Admin \
-e EXPERIA_V10_ROUTER_PASSWORD="PASSWORD" \
bajansen/experiaexporter

Met de container geconfigureerd en draaiende kan mijn Prometheus server de statistieken verzamelen en kan ik ze vervolgens plotten in Grafana. Over een tijdspanne van zo’n 14 dagen ziet de verbinding er als volgt uit:

Experiabox V10 DSL Grafiek

In deze grafiek is duidelijk te zien dat de snelheden enorm fluctueren van tijd tot tijd, hetwelk zeer handige informatie is om paraat te hebben als er iemand klaagt over traag internet, of wanneer je hier zelf over klaagt bij je provider.