Fritzbox mit Grafana visualisieren
Nutzt man mal Grafana für Visualisierungen möchte man mehr einlesen und überwachen. Ich verwende (wie viele andere auch) fritzcollectd zur Überwachung meiner Fritzboxen: https://github.com/fetzerch/fritzcollectd
Ich verwende dafür eine (freie) Fritzbox 6591 Cable (* Affiliatelink) und eine (ebenfalls freie) Fritzbox 6490 Cable (* Affiliatelink)
UPDATE 22.01.2022
Da es inzwischen einige Probleme mit der Lösung hier gibt bitte hier entlang:
Version Mai 2020
Vorbereitungen:
sudo apt-get install -y python-pip
sudo apt-get install -y libxml2-dev libxslt1-dev
Fritzcollectdeamon installieren:
sudo pip install fritzcollectd
Fritzbox vorbereiten
Collectdeamon installieren und konfigurieren
sudo apt-get install -y collectd
sudo nano /etc/collectd/collectd.conf
Folgendes „einkommentiern“, bzw. einfügen. Mehrere Fritzboxen können parallel abgefragt werden. Die InfluxDB ebenfalls mit IP und Port bekannt machen.
# LoadPlugin python und network "einkommentieren"
LoadPlugin python
[...]
LoadPlugin network
# +++ START einfügen
<Plugin network>
Server "127.0.0.1" "25826" # InfluxDB
</Plugin>
# Router
<Plugin python>
Import "fritzcollectd"
<Module fritzcollectd>
Address "10.10.10.1"
Port 49000
User "collectd"
Password "password1234"
Hostname "FritzRouter"
Instance "1"
Verbose "False"
</Module>
</Plugin>
#FritzREG
<Plugin python>
Import "fritzcollectd"
<Module fritzcollectd>
Address "10.10.10.10"
Port 49000
User "collectd"
Password "password1234"
Hostname "FritzEG"
Instance "1"
Verbose "False"
</Module>
</Plugin>
# +++ ENDE einfügen
Deamon neu starten
sudo systemctl restart collectd
InfluxDB Konfiguration anpassen: Database ist die Datenbank in der die vom collectd gesammelten Daten gespeichert werden. Am besten etwas stimmiges eintragen.
sudo nano /etc/influxdb/influxdb.conf
# anpassen
[[collectd]]
enabled = true
bind-address = "127.0.0.1:25826"
database = "collectd"
typesdb = "/usr/share/collectd/types.db"
# anpassen ENDE
Dienste neu starten
sudo systemctl restart collectd
sudo systemctl restart influxdb
Ich kann folgendes Grafana Dashboard empfehlen, habe es aber auf meine Wünsche angepasst. Das Dashboard soll aber zeigen was alles möglich ist:
https://grafana.com/grafana/dashboards/713
Das Dashboard ist vom Ersteller des Plugins. Vielen Dank auch dafür.
29 Kommentare
Hallo, super Anleitung um mehr als eine FritzBox einzubinden! Allerdings frage ich mich, wie ich nun ein zweites Dashboard hinbekomme, wo die Daten der zweiten Box angezeigt werden?
Habe Angst das beide Boxen die Daten in der DB immer wieder überschreiben….
Hallo, vielen Dank.
Ich hoffe ich hab das richtig verstanden: Es sollen auf dem gleichen System eine weitere Fritzbox abgefragt werden? Dann einfach in der collectd.conf zwei Geräte anlegen wie in dem Beispiel (#Router, #Fritzbox). Dann kann man in der Abfrage in Grafana über „(AND) host = FritzRouter“ nur die Daten der einen oder anderen anzeigen. Ich habe selber zwei Fritzboxen die ich so Abfrage. Der Name wird auch in der collectd.conf konfiguriert, da muss der Name dann natürlich einmalig sein.
Ich hoffe das hilft weiter, sonst einfach noch mal melden.
Genau, richtig verstanden. Also in der collectd.conf muss der Eintrag für „Hostname“ einmalig sein.
Aber wo genau muss ich das „(AND) host = *HOSTNAME*“ eintragen? Ich würde für die zweite FritzBox gerne ein neues Dashboard anlegen, aber weiß dann leider nicht weiter. Wenn ich mit der ID 713 das Dashboard importiere, kann ich nur die Datenbank collectd auswählen.
Alles klar ich habs! Ich habe im Dashboard bei allen Panels in der SQL Abfrage ein
AND „host“ = ‚H O S T N A M E‘
drangehangen. Nun klappt es, danke 🙂
Gerne, freut mich dass es klappt 🙂
Hey,
leider klappt es nicht.. Auf dem Dashboard sehe nur N/A..
wo kann ich sehen wo es hängt? ob die Verbindung nicht zur FB klappt, oder ob nicht sauber in die DB geschrieben wird?
Danke und viele Grüße
Hallo,
du kannst das logging in der „/etc/collectd/collectd.conf“ einstellen. Einfach folgendes suchen und anpassen/einkommentieren:
LoadPlugin logfile
LogLevel „info“
File „/var/log/collectd.log“
Timestamp true
PrintSeverity true
Dann sollte man Probleme mit collectd debuggen können.
Hi,
bei mir klappt es leider auch nicht, sehe auch nur N/A.
Die Log gibt leider auch nicht viel her, nichts auffälliges:
[2021-02-17 22:08:48] [info] plugin_load: plugin „battery“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „cpu“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „df“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „disk“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „entropy“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „interface“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „irq“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „load“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „memory“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „network“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „processes“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „python“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „rrdtool“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „swap“ successfully loaded.
[2021-02-17 22:08:48] [info] plugin_load: plugin „users“ successfully loaded.
[2021-02-17 22:08:50] [notice] Systemd detected, trying to signal readyness.
[2021-02-17 22:08:53] [info] Initialization complete, entering read-loop.
Woran kann es liegen?
Gruß
René
Sieht so aus als würde er die config nicht durchlaufen und nur die plugins laden ohne sie zu „interpretieren“.
Vielleicht mal das nacheinander ausführen und gucken ob Fehler gemeldet werden:
sudo systemctl stop collectd
sudo /usr/sbin/collectd -t
sudo /usr/sbin/collectd -T
sudo /usr/sbin/collectd
sudo systemctl start collectd
Hi Simon,
das sieht soweit auch gut aus:
pi@raspberrypi:~ $ sudo systemctl stop collectd
pi@raspberrypi:~ $ sudo /usr/sbin/collectd -t
pi@raspberrypi:~ $ sudo /usr/sbin/collectd -T
[2021-02-25 12:47:28] plugin_load: plugin „logfile“ successfully loaded.
[2021-02-25 12:47:28] plugin_load: plugin „syslog“ successfully loaded.
pi@raspberrypi:~ $ sudo /usr/sbin/collectd
[2021-02-25 12:47:42] plugin_load: plugin „logfile“ successfully loaded.
[2021-02-25 12:47:42] plugin_load: plugin „syslog“ successfully loaded.
pi@raspberrypi:~ $ sudo systemctl start collectd
und die collectd.log:
[2021-02-25 12:47:56] [info] plugin_load: plugin „battery“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „cpu“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „df“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „disk“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „entropy“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „interface“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „irq“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „load“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „memory“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „network“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „processes“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „python“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „rrdtool“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „swap“ successfully loaded.
[2021-02-25 12:47:56] [info] plugin_load: plugin „users“ successfully loaded.
[2021-02-25 12:47:59] [notice] Systemd detected, trying to signal readyness.
[2021-02-25 12:48:01] [info] Initialization complete, entering read-loop.
Laufen tut es leider dennoch nicht, ich bin etwas ratlos.
Gruß
René
Tja, dann tut es mir leid, dann bin ich auch überfragt. Vor allem weil es so aussieht als würde er das Plugin nicht laden (er zeigt nur „logfile“ und „syslog“ an), im log stehen network und python aber ja drin.
Sorry 🙁
Eins ist mir noch eingefallen: Bitte mal prüfen ob die Anmeldung an der Box klappt:
python /usr/local/lib/python2.7/dist-packages/fritzconnection/fritzstatus.py
FritzStatus:
version: 0.8.4
model: FRITZ!Box 6591 Cable
is linked: True
is connected: True
external ip: 10.11.12.13
uptime: 644:28:12
bytes send: 2495665127
bytes received: 628603067
max. bit rate: ('52.2 MBit/s', '1.0 GBit/s')
max. linked bit rate: password required for information
Sonst den Kommentar von Jakob den ich gleich kommentiere 🙂
Hallo, wenn ich versuche collectd versuche neuzustarten kommt immer nur das:
Job for collectd.service failed because the control process exited with error code.
See „systemctl status collectd.service“ and „journalctl -xe“ for details.
Wenn ich weiter suche kann er python nicht öffnen/laden:
Mar 13 22:09:43 GarfanaTest collectd[1141]: ERROR: dlopen(„/usr/lib/collectd/python.so“) failed: /usr/lib/collectd/python.so: undefined symbol: PyFloat_Typ
Mar 13 22:09:43 GarfanaTest collectd[1141]: dlopen(„/usr/lib/collectd/python.so“) failed: /usr/lib/collectd/python.so: undefined symbol: PyFloat_Type. The
Mar 13 22:09:43 GarfanaTest collectd[1141]: plugin_load: Load plugin „python“ failed with status 2.
Mar 13 22:09:43 GarfanaTest collectd[1141]: plugin_load: plugin „rrdtool“ successfully loaded.
Mar 13 22:09:43 GarfanaTest collectd[1141]: plugin_load: plugin „swap“ successfully loaded.
Mar 13 22:09:43 GarfanaTest collectd[1141]: plugin_load: plugin „users“ successfully loaded.
Mar 13 22:09:43 GarfanaTest collectd[1141]: Found a configuration for the `python‘ plugin, but the plugin isn’t loaded or didn’t register a configuration c
Mar 13 22:09:43 GarfanaTest collectd[1141]: Plugin python failed to handle option Import, return code: -1
Mar 13 22:09:43 GarfanaTest collectd[1141]: Error: Parsing the config file failed!
Mar 13 22:09:43 GarfanaTest systemd[1]: collectd.service: Main process exited, code=exited, status=1/FAILURE
Ohne Python kann ich es neustarten.
Bitte in der collectd.conf prüfen ob Plugins konfiguriert sind die nicht verwendet werden. z.B. ist df und rrdtool gerne mal konfiguriert und nicht aktiviert (weil nicht erforderlich).
Die bitte auskommentieren.
Im Syslog kann man die gut finden:
sudo cat /var/log/syslog | grep "collectd\["
Ein Beispiel mal manuell generiert:
Mar 15 20:18:54 raspberrypi collectd[474]: Found a configuration for the `df' plugin, but the plugin isn't loaded or didn't register a configuration callback.
Mar 15 20:18:54 raspberrypi collectd[474]: Found a configuration for the `rrdtool' plugin, but the plugin isn't loaded or didn't register a configuration callback.
Hab df und und rrdtool deaktivert. Bei: /var/log/syslog | grep „collectd\[“ bekomm ich immer diese Meldung:
Mar 20 19:44:00 GarfanaTest collectd[679]: ERROR: dlopen(„/usr/lib/collectd/python.so“) failed: /usr/lib/collectd/python.so: undefined symbol: PyFloat_Type. The most common cause for this problem is missing dependencies. Use ldd(1) to check the dependencies of the plugin / shared object.
Mar 20 19:44:00 GarfanaTest collectd[679]: dlopen(„/usr/lib/collectd/python.so“) failed: /usr/lib/collectd/python.so: undefined symbol: PyFloat_Type. The most common cause for this problem is missing dependencies. Use ldd(1) to check the dependencies of the plugin / shared object.
Mar 20 19:44:00 GarfanaTest collectd[679]: plugin_load: Load plugin „python“ failed with status 2.
Mar 20 19:44:00 GarfanaTest collectd[679]: plugin_load: plugin „swap“ successfully loaded.
Mar 20 19:44:00 GarfanaTest collectd[679]: plugin_load: plugin „users“ successfully loaded.
Mar 20 19:44:00 GarfanaTest collectd[679]: Found a configuration for the `python‘ plugin, but the plugin isn’t loaded or didn’t register a configuration callback.
Mar 20 19:44:00 GarfanaTest collectd[679]: Plugin python failed to handle option Import, return code: -1
Mar 20 19:44:00 GarfanaTest collectd[679]: Error: Parsing the config file failed!
Dann laden die andern plugins wieder ohne Probleme und dann kommt die Fehermeldung weieder
Hi,
was muss ich tun, um statt der influxDB eine ander DB zu nutzen (mySQL)?
Danke und Ciao,
Peter
Hi, also theoretisch wäre das vermutlich möglich, das Network-Plugin sendet die Daten wohin du willst. Die andere Seite müsste die Daten dann annehmen, vom InfluxDB-Format „befreien“ und dann in ne mySQL-DB schreiben. Aber da sind dann ein paar weitere Scripte notwendig. Viele Grüße Simon
Hallo, was muss ich machen, um mich mit einer entfernten Influx-Datenbank (V1.8.6), die via API Port 8086 erreichbar ist zu verbinden. Dazu muss ich auch User/Password angeben.
Danke und Gruß
Torsten
Hallo, ja, das ist möglich (ich habe es aber aktuell nicht mehr am laufen). Zu beachten ist, dass dann alles was über collectd gesammelt wird an die Adresse geschickt wird.
Statt
{Plugin network}
Server "127.0.0.1" "25826" # InfluxDB
{/Plugin}
muss es dann
{Plugin network}
{Server "muttisfritzbox.dyndns.tld"}
SecurityLevel "none"
Username "benutzer"
Password "passwort"
{/Server}
{/Plugin}
({} durch <> ersetzen natürlich, das geht in Kommentaren nicht)
Es macht natürlich mehr als Sinn die Daten zu verschlüsseln für die Übertragung, aber da ich nie mehr als einen Test damit gemacht habe kann ich dazu leider nichts sagen.
Viel Glück 🙂
[Doku: https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_network ]
Hallo,
danke erst einmal für die Anleitung.
Ich habe folgende Frage:
Auf meinem Raspberry Pi 4 habe ich folgende Konfiguration:
* Telegraf -> fragt Statusinformationen vom Raspberry Pi ab
-> Lokal auf dem Pi installiert
* InfluxDB -> bekommt Statusinformationen vom Raspberry Pi übergeben, durch Telegraf
-> in einem Docker-Container installiert
* Grafana -> visualisiert die Statusinformationen des Raspberry Pi
-> in einem Docker-Container installiert
Mein Vorhaben ist nun, dass ich anhand deiner Anleitung die InfluxDB, welche ich bereits in einem Docker-Container nutze, mit einer weiteren Datenbank bestücke und so die FritzBox Daten abfrage/in Grafana visualisiere.
Hast du eine Idee, wie ich das anstellen kann?
Danke dir im Voraus.
Hallo. Das sollte mit der Anleitung genau so klappen. Es wird halt eine neue Datenbank angelegt (collectd) in der die Einträge erstellt werden. Wenn du eine andere Tabelle anlegen möchtest kannst du das auf der Influx-Seite einstellen.
Die Anleitung sollte es treffen: https://anomaly.io/collectd-metrics-to-influxdb/index.html
Hoffe ich konnte (wenn auch spät) helfen.
Kannst du nochmal genauer erklären was hier genau gemacht wird?
sudo nano /etc/influxdb/influxdb.conf
# anpassen
[[collectd]]
enabled = true
bind-address = „127.0.0.1:25826“
database = „collectd“
typesdb = „/usr/share/collectd/types.db“
# anpassen ENDE
Sobald ich das mache geht bei mir Influx nicht mehr. Grafana zeigt an „Bad Gateway“ und ich bekomme wenn ich auf der Konsole influx aufrufen will die meldung
Failed to connect to http://localhost:8086: Get http://localhost:8086/ping: dial tcp [::1]:8086: connect: connection refused
In dem Teil wird die Verbindung zwischen dem collect-deamon und influx hergestellt. Influx „spricht“ hier collectd an und schreibt den Output in die angegebene Datenbank.
Die Fehlermeldung kann durch eine falsche Konfiguration (durch das einfügen der Daten oben) kommen. Seltsam ist dass es bei mir mit genau der Config läuft. Ich mache auch immer alle updates mit, daher sollte sich da auch nichts geändert haben.
Bei der Recherche dazu habe ich noch das hier gefunden: https://github.com/influxdata/influxdb/issues/8912#issuecomment-422137287 Vielleicht kannst du das mal prüfen und ggf. (nach einem Backup natürlich, da ich die auswirkungen davon nicht einschätzen kann) durchführen.
Hallo,
vielen Dank für die Anleitung. Ich habe leider ein Problem mit collectd. In den Logs steht:
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „syslog“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „battery“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „cpu“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „df“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „disk“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „entropy“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „interface“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „irq“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „load“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „memory“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „network“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „processes“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: ERROR: dlopen(„/usr/lib/collectd/python.so“) failed: /usr/lib/collectd/python.so: undefined symbol: PyFloat_Type. The most common cause for this problem is missing dependencies. Use ldd(1) to check the dependencies of the plugin / shared object.
Dec 17 12:27:06 Macmini collectd[132601]: dlopen(„/usr/lib/collectd/python.so“) failed: /usr/lib/collectd/python.so: undefined symbol: PyFloat_Type. The most common cause for this problem is missing dependencies. Use ldd(1) to check the dependencies of the plugin / shared object.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: Load plugin „python“ failed with status 2.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „rrdtool“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „swap“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: plugin_load: plugin „users“ successfully loaded.
Dec 17 12:27:06 Macmini collectd[132601]: Found a configuration for the `python‘ plugin, but the plugin isn’t loaded or didn’t register a configuration callback.
Dec 17 12:27:06 Macmini collectd[132601]: Plugin python failed to handle option Import, return code: -1
Dec 17 12:27:06 Macmini collectd[132601]: Error: Parsing the config file failed!
Scheinbar passt irgend etwas mit Python nicht. Ich habe Python3 laufen. Ist das vielleicht ein Problem?
Viele Grüße
Tobi
Hallo Tobi, ich habe versucht das Problem bei mir nachzustellen, hab diesen Fehler aber nicht bekommen. Ich hab aber folgende Seite gefunden (die ich wohl schon mal besucht habe): https://bugs.launchpad.net/ubuntu/+source/collectd/+bug/1872281. Im Beitrag 7 wird folgendes vorgeschlagen:
You can work around it by adding the following line to /etc/default/collectd
LD_PRELOAD=/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so
this will force it to load the python shared library.
Vielleicht klappt das bei dir ja, offenbar hat es manchen geholfen.
Viele Grüße
Seit dem 17.Dezember 2021 und Tobis Beitrag hat sich wohl nicht viel getan bei Python / Ubuntu und Collectd…;-/.
Ich habe den gleichen Fehler! Nehme ich die originale Config-Datei und starte den Collectd-Dienst, lüppt alles!
Sobald auch nur andeutungsweise die Python-Zeile einkommentiert wird und / oder aber die hier angesprochene „Lösung“:
LD_PRELOAD=/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so einfügen…
getätigt wird: Stillstand / Fehler beim Start!
Aktuelles Ubuntu mit den aktuellen Updates.
Und ich will doch nur meine Fritzboxen monitoren…;-(. Bisher hat KEINE der „Anleitungen“ im iNet funktioniert! Und das nach mehr als 40 Jahren an der Console! Wohl ein Zeichen, das man stupide wird mit zunehmendem Alter…;-(.
Hallo Alter 😉
Ich hab das mal zum Anlass genommen einen Beitrag aus meinem Textdatei-Chaos beim installieren von einer alternative zu machen: https://blog.gwarg.de/2022/01/22/fritzbox-mit-grafana-visualisieren-version-2022/
Versuch das doch mal, vielleicht klappt es damit besser. Bei mir hat es auf Anhieb gut geklappt.
Viel Erfolg
Hallo
ich scheitere bei sudo pip install fritzcollectd:
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
For more information visit http://rptl.io/venv
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing –break-system-packages.
hint: See PEP 668 for the detailed specification.
Was kann ich tun?
Michael