FritzBox Monitoring mit Zabbix

Die FritzBox verwehrt sich hartnäckig gegen jedes Monitoring. Sie kann kein SNMP und ist auch sonst nicht zugänglich um Daten für Monitoring auszulesen. Die einzige Möglichkeit ist die Verwendung der SOAP Schnittstelle. An vieles kommt man da nicht ran, aber die jeweiligen Schnittstellenzähler kann man auslesen.

/etc/zabbix/bin/fritzbox.sh:

download

#!/bin/bash
#  Liest die Übertragungszähler der WAN Schnittstelle der Fritzbox aus und 
#  gibt die Daten auf stdout aus, zum Beispiel für Zabbix Monitoring
#  Die Zahl ist der jeweilige Zählerstand der Schnittstelle in Bytes
#  Die Zahlen steigen monoton und Zabbix muss die Auswertung mit dem 
#  Präprozessor »Änderung/Sekunde« verarbeiten, die Einheit ist dann bytes/s
#
case "$1" in
    down)
        curl -s "http://192.168.178.1:49000/igdupnp/control/WANCommonIFC1" \
	-H "Content-Type: text/xml; charset="utf-8"" \
        -H "SoapAction:urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1#GetAddonInfos" \
        -d "@/etc/zabbix/bin/linkspeed.xml" | grep -E "TotalBytesReceived64" | \
        sed -e "s/<NewX_AVM_DE_TotalBytesReceived64>//"  -e 's/<\/\?[^>]\+>//'
        ;;
    up)
        curl -s "http://192.168.178.1:49000/igdupnp/control/WANCommonIFC1" \
	-H "Content-Type: text/xml; charset="utf-8"" \
	-H "SoapAction:urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1#GetAddonInfos" \
	-d "@/etc/zabbix/bin/linkspeed.xml" | grep -E "TotalBytesSent64" | \
	sed -e "s/<NewX_AVM_DE_TotalBytesSent64>//" -e 's/<\/\?[^>]\+>//'
	;;
    *)
	curl -s "http://192.168.178.1:49000/igdupnp/control/WANCommonIFC1" \
	-H "Content-Type: text/xml; charset="utf-8"" \
	-H "SoapAction:urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1#GetAddonInfos" \
	-d "@/etc/zabbix/bin/linkspeed.xml" | grep -E "TotalBytesSent64|TotalBytesReceived64" | \
        sed -e "s/<NewX_AVM_DE_TotalBytesReceived64>/BytesReceived: /" \
	-e "s/<NewX_AVM_DE_TotalBytesSent64>/BytesSent: /" -e 's/<\/\?[^>]\+>//'
	# -e 's/<\/\?[^>]\+>//g'
    ;;
esac

Die IP Adresse der Fritzbox muss man eventuell anpassen, und die FritzBox muss die Verwendung freigeschaltet haben. Ausserdem muss eventuell der Pfad für die XML Datei angepasst werden, die in dem Skript verwendet wird. Das Ganze erfordert »curl« auf dem Monitoring-Server, der im LAN sein muss. Dort wird auch das Skript installiert. Von dort aus liest er per http die FB aus. Zabbix ruft dieses Skript jeweils mit der Option »up« oder »down« auf und übernimmt das Ergebnis. Als Präprozessor muss noch »Änderung/Sekunde« eingestellt werden, dann kann man das Ergebnis als bytes/s anzeigen lassen. Der Aufruf des Skripts ist nicht unbedingt sehr Resourcenschonend, es erzeugt Netzverkehr und die Fritzbox reagiert relativ langsam darauf. Allzu häufig kann man ds nicht veranstalten, hier läuft das mit 10 s Intervall aus einer FB 6490 Cable. Kurze Spitzen bekommt man dadurch nicht mit, es wird eben ein Mittelwert über das Intervall ermittelt.

/etc/zabbix/bin/linkspeed.xml:

download

<?xml version="1.0" encoding="utf-8" ?>
    <s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
        <s:Body>
            <u:GetCommonLinkProperties xmlns:u="urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1" />
        </s:Body>
    </s:Envelope>

/etc/zabbix/zabbix_agent.d/userparameter_fritzbox.conf:

download

# fritzbox
UserParameter=fritzbox.upload,/etc/zabbix/bin/fritzbox.sh up
UserParameter=fritzbox.download,/etc/zabbix/bin/fritzbox.sh down

 Zabbix Datenpunkt  Präprozessor  Ergebnis