Die Tage wurde ein interessantes Grafana Dashboard für einen Eigenbau Router (opnsense) vorgestellt. Da kam die Idee auf so ein Dashboard für die Fritzbox aufzubauen. Dazu findet man einiges im Netz. Eine Lösung war die Umsetzung mit einer InfluxDB die von einem Exporter Dienst befüllt wird. Das war schon ganz gut aber die Umsetzung ein wahres Grauen. Zumal die Docker Container eine InfluxDB2 statt eine InfluxDB installierten. Die InfluxDB musste mit UDP beliefert werden. Es begann eine Odysee der Fehlersuche. Konnte nun eine andere Lösung ausfindig machen. Die war schon sehr umfangreich und sehr informativer als die erste Lösung. So ist es nun mal in der Welt der Technik, man baut was auf und sieht dann eine andere und bessere Umsetzung.
Nun was brauchen wir:
- Eine Fritzbox https://amzn.to/3f2gWCo (*)
- Einen Docker Host mit Ubuntu 20.04 und Go Version 1.13.8
- Grafana Dashboard https://grafana.com/grafana/dashboards/12579
- Fritzbox Exporter https://github.com/sberk42/fritzbox_exporter
- Alle Files gibt es hier zum Download https://git.unixweb.net/jhummel/fritzbox-grafana-monitor
Starte die Installation :
Achtung: Funktioniert nur auf Rechner mit AMD64 Kernel Unterstützung ( kein ARM / Raspberry ) und nur mit Go Version 1.13.8 die auf Ubuntu Server 20.04 enthalten ist.
sudo apt install golang-1.13-go go get github.com/sberk42/fritzbox_exporter/ cd $GOPATH/src/github.com/sberk42/fritzbox_exporter CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o fritzbox_exporter main.go
Es sollte nun im aktuellen Verzeichnis eine Datei “fritzbox_exporter” vorhanden sein.
Erstelle ein Verzeichnis um die Dateien für den Exporter zu kopieren und kopiere alle JSON-Dateien dort hinein.
mkdir -p /usr/local/share/exporter cp fritzbox_exporter /usr/local/share/exporter cp *.json /usr/local/share/exporter
Erstelle ein System File unter /etc/systemd/system/fritzbox_exporter.service
[Unit] Description=Prometheus fritzbox exporter After=network.target Wants=network.target [Service] User=prometheus Group=prometheus WorkingDirectory=/usr/local/share/exporter ExecStart=/usr/local/share/exporter/fritzbox_exporter -username collectd -password <DeinPasswort> -listen-address 192.168.1.100:9042 -metrics-file /usr/local/share/exporter/exporter/metrics.json Type=simple Restart=always [Install] WantedBy=multi-user.target
Einrichtung Fritzbox:
Fritzbox einrichten mit Benutzer, Dienst und Passwort setzen
Jetzt prüfen ob die Fritzbox Daten wie gewünscht ausgibt. In der ersten Zeile wird der Exporter im Hintergrund gestartet. In der zweiten Zeile wird die Abfrage gestartet. Sollten hier Daten zu sehen sein, ist alles richtig eingerichtet. Im Anschluß Dienst Fritzbox Exporter starten. Die Listen Address muss entsprechend deinem Netzwerk und Server angepasst werden und dient nur als Platzhalter.
/usr/local/share/exporter/fritzbox_exporter -username collectd -password <DeinPasswort> -listen-address 192.168.1.100:9042 -metrics-file /usr/local/share/expoter/exporter/metrics.json& curl -s http://192.168.1.100:9042/metrics # Prüfung ob Daten vorhanden sind sudo systemctl enable fritzbox_exporter # Dienst bei Reboot starten sudo systemctl start fritzbox_exporter # Dienst starten sudo systemctl status fritzbox_exporter # Prüfen ob Dienst gestartet ist
Docker Installation:
Starte nun die Docker Einrichtung. Hier setze ich voraus dass der Docker Host schon eingerichtet ist. Erstelle ein Verzeichnis $HOME/exporter und erstelle in dem Unterverzeichnis eine Datei “docker-compose.yml”. Starte den Container mit “docker-compose up -d” und überprüfe mit “docker ps” ob Container richtig gestartet wurde.
--- version: '3' services: mon_prometheus: image: prom/prometheus:latest container_name: mon_prometheus restart: unless-stopped volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - $PWD/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml depends_on: - mon_node-exporter - mon_cadvisor mon_node-exporter: image: prom/node-exporter:latest container_name: mon_node-exporter restart: unless-stopped volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--path.rootfs=/rootfs' - '--collector.filesystem.ignored-mount-points="^(/rootfs|/host|)/(sys|proc|dev|host|etc)($$|/)"' - '--collector.filesystem.ignored-fs-types="^(sys|proc|auto|cgroup|devpts|ns|au|fuse\.lxc|mqueue)(fs|)$$"' mon_grafana: image: grafana/grafana:latest container_name: mon_grafana restart: unless-stopped volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /var/docker/data/monitoring/grafana:/var/lib/grafana ports: - 3000:3000 user: "1000" # USER ID des Docker Users anpassen depends_on: - mon_prometheus labels: - "traefik.enable=true" - "traefik.http.routers.grafana.entrypoints=websecure" - "traefik.http.routers.grafana.rule=Host(`grafana.example.com`)" # Domain anpassen - "traefik.http.routers.grafana.tls=true" - "traefik.http.routers.grafana.tls.certresolver=default" - "traefik.http.routers.grafana.middlewares=secHeaders@file" - "traefik.http.services.grafana.loadbalancer.server.port=3000" networks: - traefik_proxy - default networks: traefik_proxy: external: name: traefik_proxy default: driver: bridge
Einrichtung Prometheus
Im Verzeichnis $HOME/exporter gibt es ein Unterverzeichnis prometheus. Diese Datei wie folgt ändern und mit “docker-compose restart” neue Konfiguration einlesen.
--- global: scrape_interval: 60s evaluation_interval: 60s external_labels: monitor: 'homelab' rule_files: scrape_configs: - job_name: 'node-exporter' static_configs: - targets: ['mon_node-exporter:9100'] - job_name: 'cadvisor' static_configs: - targets: ['mon_cadvisor:8080'] - job_name: 'fritzbox_exporter' static_configs: - targets: ['192.168.1.100:9042']
Einrichtung Grafana
Starte Grafana Interface im Browser – http://<Docker-IP>:3000 und es sollte sich ein Anmeldefenster öffnen. Dort Anmeldung Benutzer und Passwort = admin:admin . Nach erfolgreicher Anmeldung wird man aufgefordert dem Benutzer “admin” ein neues Passwort zu vergeben. Im Anschluß eine neue Data Source Prometheus anlegen. Die URL lautet “http://mon_prometheus:9090” dann auf Testen und Speichern klicken.
Nun ein neues Dashboard erstellen mit “Import” und ID “12579” eintragen und auf Load klicken.
Wenn alles richtig eingerichtet wurde sollte das Dashboard bereits mit Daten zu sehen sein.
Noch ein Hinweis:
Nimm bitte nur den fritzbox_exporter wie er oben angegeben ist, denn ein anderer Exporter liefert keine Daten bei Network Devices, das Panel ist einfach leer. Sollten hier Daten fehlen dann bitte nochmal von oben beginnen.
Architektur:
Anbei noch ein Bild von dem ganzen Aufbau im Überblick
Alle Artikel auf dieser Seite sind mit einem sogenannte Provision-Links. Wenn du auf so einen Verweislink klickst und über diesen Link einkaufst, bekomme ich von deinem Einkauf eine Provision. Weiterführende Infos gibt es hier unter Punkt 8 in der Datenschutzerklärung https://blog.unixweb.de/datenschutzerklaerung/
Bei Fragen bitte die Kommentarfunktion nutzen.
Viel Spaß beim Aufbau und Monitoring der Fritzbox wünscht Joachim.
Hallo, vielen dank für die gute Arbeit. Ich hätte aber doch noch ein zwei fragen. Unter welchem OS installieren sie dies Monitoring? Ich habe versucht das unter Ubuntu zu installieren und scheitere schon an der ersten Befehlszeile „go get…“ ich hab das ganze auf Proxmox und in LXC. der Docker läuft ebenfalls in einem LXC. Können Sie mir einen tip geben?
Hallo Marco
da hab ich doch noch einen Arbeitsschritt unterschlagen. Mach einfach vorher :
$ sudo apt install golang
Beste Grüße Joachim
Hallo Marco
danke für den Hinweis hatte ich doch einen Befehl vergessen. Hab den jetzt nachgetragen.
$ sudo apt install golang
Viel Erfolg und Grüße Joachim
Mir geht es leider wir Marco. Ich hänge am gleichen Ort fest. Bei Eingabe der “go get…” Befehlszeile erhalte ich folgende Meldung auf meinem virtuellen Ubuntu Server: github.com/prometheus/client_golang/prometheus
go/src/github.com/prometheus/client_golang/prometheus/go_collector.go:353:15: un defined: debug.ReadBuildInfo
Wäre sehr dankbar um einen Tipp, wie ich weiter machen könnte.
Hallo
hast Du einen Ordner go in $HOME ?
Wenn ja dann lösche diesen und probiere es nochmal mit go get …
Mach den Befehl ohne “sudo” bitte.
Grüße Joachim
habe dies auch getestet, geht bei mir auch so nicht
Dann kommt am Freitag den 06.08.2021 ab ca 19:00 auf https://meet.unixweb.de/TechTalk
Dort besprechen wir Eure Probleme.
Grüße Joachim
Hallo Joachim
ich hab den Termin leider verpasst. ga es eine Lösung für die Fehlermeldung:
go/src/github.com/prometheus/client_golang/prometheus/go_collector.go:353:15: undefined: debug.ReadBuildInfo
ich hab den Ordner go gelöscht und auch dann klappt es nicht.
System: Raspberry pi4 mit docker und grafana
Mfg Sven
Hallo Sven
auf den Raspberry Pi 4 hab ich es nicht installiert. Ich hab es auf einen Ubuntu Server installiert.
Go auf einem Arm6/7 Prozessor zu installieren macht Probleme, außer man weiss was man tut.
Grüße Joachim
Hallo Sven
vermutlich ist dort eine veraltete GO-Version installiert.
Versuch mal nach der Beschreibung auf einem Raspberry Pi die neuere Version zu installieren:
https://www.jeremymorgan.com/tutorials/raspberry-pi/install-go-raspberry-pi/
Wie gesagt ich hab es auf einem Raspberry Pi nicht installiert und kann es nicht prüfen ob es laufen wird.
Auf Ubuntu hab ich es mit Go 1.13.8 zum laufen bekommen.
Grüße Joachim
installiere mal go so wie es hier beschrieben ist, https://www.jeremymorgan.com/tutorials/raspberry-pi/install-go-raspberry-pi/, danach hat es bei mir besser funktioniert
Was im Artikel nicht erwähnt wird, ist die Voraussetzung Ubuntu Server. Auf Debian tritt nämlich der hier in den Kommentaren mehrfach erwähnte Fehler auf:
go/src/github.com/prometheus/client_golang/prometheus/go_collector.go:353:15: undefined: debug.ReadBuildInfo
Die Anleitung funktioniert aber auch dann nicht, weil in der yml-Datei in Zeile 15 ein Service mon_cadvisor als Abhängigkeit angegeben wird, der aber gar nicht definiert wird. Da habe ich bislang noch keine Lösung dafür gefunden. Wenn ich die Zeile weglasse, zieht Docker sich zwar images, aber es gibt dann einen neuen Fehler, dass /etc/timezone sich nicht mounten lässt. Bin mir aber nicht sicher, ob ich das überhaupt richtig interpretiere.
Hallo
dann lass die Zeile 15 raus , der Prometheus sollte aber trotzdem starten und es ist keine Abhängigkeit sondern ein Dienst von dem Daten abgeholt werden und hat nichts mit Docker zu tun.
Wenn /etc/timezone nicht vorhanden ist oder 0 Byte hat dann muss diese erstellt und befüllt werden mit Europe/Berlin
Grüße , Joachim
Hey Joachim,
habe ich dann auch so gemacht. Seltsamerweise gab es dann anstelle einer Datei prometheus.yml ein gleichnamiges leeres Unterverzeichnis. Das habe ich gelöscht und die Datei reingelegt. Dann ging es. Merci.
Hallo,
jedesmal, wenn ich den Befehl
cd $GOPATH/src/github.com/sberk42/fritzbox_exporter
eingebe, passiert nichts und ich bekomme nur die Meldung “bash: cd: /src/github.com/sberk42/fritzbox_exporter: No such file or directory”. weiß jemand vielleicht, woran das liegt?
Auf welcher Hardware und Betriebssystem wird der Befehl ausgeführt ?
Was passiert wenn cd $HOME/go/src/github.com/sberk42/fritzbox_exporter eingibst?
Es wird offensichtlich die Variable $GOPATH nicht gesetzt.
Leider startet Grafana im Docker immer wieder neu. Bis auf Grafana läuft alles genau wie oben in der Anleitung angegeben.
Hallo Sebastian
was sagt das Docker Log ?
“docker logs mon_grafana”
Grüße Joachim
Kompletter Log handelt nur um genau den eine Passage:
GF_PATHS_DATA=’/var/lib/grafana’ is not writable. You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1-or-later mkdir: cannot create directory ‘/var/lib/grafana/plugins’: Permission denied
ich setz Ubuntu jetzt neu auf und probiere es erneut. Melde mich wenn es immer noch passiert nach neuversuch.
Hallo Joachim,
in deinen Beitrag sind einige Fehler drin.
/etc/systemd/system/fritzbox_exporter.service
so funktioniert der Service nicht.
Was soll das für eine IP-Adresse sein? 192.168.1.100 ?
Vom Prometheus-Server inkl. der fritzbox_exporter oder von der Fritte ?
Hallo topaLE
1.) Dann teile mit wo “die Fehler” sind.
2.) Architekturbild angesehen, denn dort sollte erschichtlich sein was wo läuft mit welchen Ports
Grüße Joachim
Hallo Joachim,
Du hast da ein tolles Projekt aufgestellt, würde es sogar gerne bei mir umsetzen, aber es scheitert an ein 2 sehr entscheidenden Punkten:
– Ubuntu, ich bin gar kein Freund von Canonical und überhaupt kein Freund von Shuttleworth
– Quasi zwingender Einsatz von Docker (bin auch kein Freund von docker)
Auf meinem System habe ich prometheus, influxdb, grafana, telegraf, collectd (und einige andere Dinge) nativ ohne container laufen, unter debian (privat) wie auch unter centOS (beruflich).
So gesehen geht es, zumindest für mich, in erster Linie um den Prometheus-Exporter sowie das Grafana Dashboard. Siehst Du hier chancen, dass Du dieses wirklich interessante Projekt weniger speziell auf nur eine Linux-Version vernagelst (die zudem auf Deinen eigenen Server zugeschnitten ist) und es breiter nutzbar machst? Gibt ja genügend einsetzbare Exporter (varnish, haproxy, blackbox, die Liste ist lang) die unter so gut wie jedem Linuxderivat laufen.
Hallo Rolf
Danke für Deine Nachricht.
Im Prinzip kannst Du ja alles nativ auf eine beliebige Server Plattform installieren, es steht Dir frei es so zu tun wie Du es brauchst. Der Artikel soll ja nur eine Anregung sein und ist nicht die letzte Weisheit.
Du kannst alles auf Debian etc. installieren. Du musst halt die ganze Konfiguration jeweils in das Programm übertragen. Ich werde mit Sicherheit nicht mehr ohne Docker/Podman etwas aufbauen.
Der Aufwand , die Pflege steht in keinem Verhältnis zu einer Standalone Installation. Außerdem nutze ich ausschließlich Ubuntu Server und nicht Ubuntu Desktop.
So und jetzt kommt ein größeres Problem und zwar “go” auf nicht Ubuntu Systeme.
Die oben genannte Software “fritzbox_exporter” ist ( für mich) nicht kompilierbar. Es kommen massive Fehlermeldungen wenn ich es auf Debian kompilieren will. Die Software ist nur erfolgreich mit Go 1.13.8 zu kompilieren. Bin kein Programmierer deshalb kann ich hier nicht wirklich helfen.
Was aber geht wenn man das komplierte Binary auf einen Debian kopiert , inkl. aller nötigen JSON-Files. Werde hierzu im Git-Repo noch ein ZIP-File hochladen und es zur Verfügung stellen.
Also , virtuelle Maschine mit Ubuntu Server 20.04 aufsetzen, dann “fritzbox_exporter” mit Go komplieren und dann Binary auf die Zielmaschine kopieren. Ubuntu Maschine wegwerfen, fertig!
Somit ist da nix auf meinen eigenen Server “vernagelt”.
So nun wünsche ich Dir viel Spaß beim installieren und konfigurieren.
Grüße Joachim