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

Neuen Benutzer anlegen mit den entsprechenden Einstellungen
Benutzernamen und Passwort natürlich gut merken 😉
UPnP muss ebenfalls aktiviert sein

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.

28 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….

    Antworten
    • 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.

      Antworten
      • 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.

        Antworten
        • 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 🙂

          Antworten
  • 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

    Antworten
    • 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.

      Antworten
  • 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é

    Antworten
    • 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

      Antworten
      • 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é

        Antworten
        • 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 🙁

          Antworten
          • 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.

    Antworten
    • 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.

      Antworten
      • 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

        Antworten
  • Hi,
    was muss ich tun, um statt der influxDB eine ander DB zu nutzen (mySQL)?

    Danke und Ciao,
    Peter

    Antworten
    • 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

      Antworten
  • 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

    Antworten
    • 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 ]

      Antworten
  • 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.

    Antworten
  • 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

    Antworten
    • 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.

      Antworten
  • 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

    Antworten
    • 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

      Antworten
  • 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…;-(.

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.