Artikel & Guides

Raspberry Pi Monitoring kostenlos – Grafana, InfluxDB mit Portainer und Docker installieren

letzte Änderung: 4. August 2022

Mit Grafana kannst du recht einfach, und dennoch sehr umfangreich, dein eigenes Raspberry Pi Monitoring über eine Web-GUI erstellen und wichtige Service / Werte überwachen. Das Ganze installieren wir als Container unter Docker und verwalten dies mit Portainer – einer Weboberfläche um Container einfacher verwalten zu können. Weiterhin nutzen wir die Datenbank InfluxDB und zum sammeln der Daten Telegraf.

ACHTUNG! Bitte lesen!
Du benutzt das hier Gezeigte natürlich, wie immer, auf eigenes Risiko!
Ich habe alles selbst durchgeführt und mir mein System nicht zerschossen oder sonst irgendwelche negativen Auffälligkeiten bemerkt.
Aber dennoch… Backups sind immer gut….
Ich übernehme keine Haftung für irgendwelche Schäden am System, der Hardware oder der Katze….

Raspberry Pi Monitoring – Grafana und Portainer – Was brauchen wir?

Ich beziehe mich hier, wie sooft, auf eine Installation auf einem Raspberry Pi. Unter Linux-Umgebungen können die Schritte teilweise etwas anders sein. Grundsätzlich sollte man diese aber alle übernehmen können. Damit wir ein komplettes Raspberry Pi Monitoring erstellen können benötigen wir:

Verzeichnisse für persistente Daten anlegen

Alle Container haben eins gemeinsam: Sobald sie beendet wurden – egal ob durch einen Stromausfall oder normalen Beenden des Dienstes – verlieren sie ihre Daten.
Sie starten immer wieder mit den Parametern und Inhalten aus ihrem Image.
Außer man lässt sie auf einem festen Platz ihre Daten ablegen. Und dies bereiten wir jetzt vor.

Du loggst dich auf deinem Raspberry Pi mit sudo Rechten ein und erstellst einen Ordner. Wo ist im Prinzip total egal, da du beim Bereitstellen des Containers diesen Pfad fest mit angeben wirst.
Ich lege solche Ordner immer unter /opt an. Da wir für influxdb und Grafana feste Plätze benötigen, richten wir gleich beide ein:

sudo mkdir /opt/influxdb
sudo mkdir /opt/grafana
sudo chmod 775 /opt/influxdb/ /opt/grafana/

InfluxDB und Grafana Container Installation

Wie du Docker und Portainer installieren bzw. einrichten kannst, habe ich in einem eigenen Artikel erklärt. Diesen findest du bei den oben genannten Punkten oder direkt: Raspberry PI – Docker ohne Probleme installieren.

Da wir InfluxDB und auch Grafana als Container auf unserem Raspberry Pi laufen lassen wollen, benötigen wir das entsprechende Image dazu. Auch hier wird es wieder verschiedene Wege geben um ein Image zu erhalten.
Ich nutze dafür: https://hub.docker.com/.
Einfach in dem Suchfeld eintragen was man gerne finden möchte, und Enter drücken:

Raspberry Pi Monitoring - Images

Es folgen sehr viele Ergebnisse….und das wird bei fast allen Images so sein, die du hier suchen wirst.
Für einen Container auf einem Raspberry Pi ist es wichtig, dass der TAG „arm“ bzw. „arm64“ enthalten ist.

Wir suchen also einmal nach InfluxDB, klicken das erste offizielle Image an und scrollen dann sehr weit nach unten in der Beschreibung:

Raspberry Pi Monitoring - InfluxDB

Ich nutze hier die 1.8er Version – aus irgendeinem Grund bekomme ich die 2er nicht so zu laufen wie bisher. Da ich aber aktuell nicht soviel Zeit zum ausprobieren habe, bleibe ich bei 1.8. Die läuft zum Glück auch stabil.

Was wir brauchen und uns merken müssen ist:

  • influxdb:1.8
  • 8086
  • /var/lib/influxdb

Für das Raspberry Pi Monitoring brauchen noch ein Image für Grafana, also suchen wir nach Grafana:
In meinem Fall steht der „offizielle Grafana docker container“ an erster Stelle:

Raspberry Pi Monitoring - Grafana Image

Ein Kick auf das entsprechende Ergebnis und wir werden auf eine weitere Seite geleitet. Hier finden wir auf der rechten Seite einen Docker-Pull-Befehl (brauchen wir jetzt nicht) um den Container über das Terminal laden zu können.
Weiterhin wirst du weiter unten in der Regel Changelogs und/oder Erklärungen zu dem Image finden. In diesem Fall stehen hier lediglich die Changelogs und wie man Grafana mit einem Port bindet. Dazu später aber mehr.

image 9

Was wir brauchen und uns merken müssen ist:

  • grafana/grafana
  • 3000
  • /var/lib/grafana (was leider nur auf der Grafana Seite direkt steht und nicht hier)

InfluxDB Container über Portainer einrichten

Starte, am besten in einem neuen Tab, deine Portainer-Umgebung (https://IP-DES_RASPBERRY:9443) und logge dich ein.
In der linken Menüseite wähle den Punkt „Containers“ und dann klicke auf den Button “ + Add container„:

Raspberry Pi Monitoring - Portainer - Container

Lass dich von den Einstellungen nicht erschlagen. Nicht alle benötigen wir, und alle anderen werden nach und nach klarer.

Raspberry Pi Monitoring - Portainer Einstellungen
  • Als Erstes geben wir unserem Container einen Namen(1): influxDB
  • Dann suchen wir das entsprechende Image (2) bei „DockerHub“ : influxdb:1.8
  • Jetzt klickst du auf den Button publish a new network port(3) und trägst bei Host(4) und Container(5) jeweils den Port 8086 ein
image 42

Unter dem Punk „Command & logging“ solltest du für die Console „Interactive & TTY“ auswählen.

image 16

Etwas weiter unten klickst du jetzt auf „Volumes(1)„, dann auf „map additional volume(2)“ sowie auf den Button „Bind(3)„.
Du erinnerst dich noch an den Pfad, den wir auf der hub.docker Seite unter influxDB in der Beschreibung gesehen haben?
Denn diesen müssen wir jetzt bei „container(4)“ eintragen: /var/lib/influxdb.
Bei „Host(5)“ kommt jetzt das Gegenstück dazu rein, nämlich der Ordner, den wir für die persistenten Daten auf unserem Raspberry angelegt haben: /opt/influxdb

Im Reiter „Restart policy“ geben wir noch an, wie sich unser Container verhalten soll, falls der Raspberry mal neu startet oder der Container selbst sich mit einem Fehler beendet hat. Hier wählen wir „Always“ – er soll also immer wieder selbst neu starten.

image 38


Nun haben wir soweit alles angegeben was wir benötigen und können, wieder etwas weiter oben, auf den Button „Deploy the container“ klicken.
Das Ganze dauert dann ein wenig, da zu erst das Image heruntergeladen, entpackt und der Container entsprechend angelegt werden muss. Beim nächsten Deploy des Containers würde es deutlich schneller gehen:

image 18

Hiermit hast du jetzt influxDB erfolgreich als Container gestartet. Prüfen kannst du das natürlich auch. Im Menüpunkt Containers wirst du in der Übersicht einen neuen influxDB Container im Status running sehen. Schaue auch ruhig einmal in die Logs.

image 19

Grafana Container über Portainer einrichten

Im Prinzip wiederholen wir jetzt die Schritte wie unter dem Punkt InfluxDB Container über Portainer einrichten beschrieben ist.
Natürlich tragen wir andere Parameter ein 😉
Beginnen wir mit „+ Add container“ und gehen dann die Punkte von 1 – 11 durch. Ansonsten ließ weiter oben nochmal, falls du genauere Schritten sehen magst.

image 13
Raspberry Pi Monitoring - Portainer - Container deploy
  • (1) – Name des Containers: „Grafana
  • (2) – Name des Image: „grafana/grafana
  • (3) – Anklicken um neue Ports eingeben/binden zu können
  • (4) – Port des Hosts(Raspberry): 3000
  • (5) – Port des Containers: 3000
  • (6) – Button „Volumes“ anklicken
  • (7) – Den Button bei Volume mapping klicken damit wir die Pfade eingeben können
  • (8) – Button „Bind“ anklicken
  • (9) – Pfad des Containers: /var/lib/grafana
  • (10) – Pfad auf dem Host(Raspberry) dazu: /opt/grafana

Im Reiter „Restart policy“ geben wir jetzt noch an, wie sich unser Container verhalten soll, falls der Raspberry mal neu startet oder der Container selbst sich mit einem Fehler beendet hat. Hier wählen wir „Always“ – er soll also immer wieder selbst neu starten.

image 38
  • Unter dem Punk „Command & logging“ solltest du für die Console „Interactive & TTY“ auswählen.
  • (11) – Button „Deploy the container“ klicken

Im Idealfall solltest du nach einer kurzen Ladezeit auf deiner Gesamtübersicht Grafana im Status running sehen können:

image 20

Du kannst es auch direkt testen, gib einfach die IP deines Raspberrys, gefolgt von dem Port 3000 im Browser ein und siehe was passiert:

http://IP-DEINES-RASPBERRY:3000

image 22

Mit dem Default User und Passwort (admin/admin) kannst du dich einloggen und direkt das Passwort ändern.

Raspberry Pi Monitoring - Grafana WebGui

Jetzt haben wir soweit alles für unser Raspberry Pi Monitoring installiert. Es fehlt aber noch eine Kleinigkeit, was wir im nächsten Stepp direkt auf unserem Raspberry Pi einrichten werden.
Außerdem fehlt uns ja noch die Konfiguration, damit Grafana weiß, woher es die Daten erhalten kann. Auch dies werden wir gleich noch erledigen.

Aber jetzt hast du dir eine Pause verdient, besorge dir einen Kaffee oder Wasser oder sowas, atme durch und dann ab in den Endspurt 🙂

Verpasse keine neue Themen und Videos mehr

Trage dich in den Newsletter ein und erhalte sporadisch Neuigkeiten zu DarkWolfCave und neuen Themen.
Versprochen: Es werden keine Daten verkauft und ich werde dein Postfach nicht ständig zuspammen…

telegraf auf dem Raspberry Pi installieren

Willkommen zurück! Na?! Kopf wieder etwas abgekühlt und aufnahmefähig? 🙂
Dann lass uns direkt weitermachen und die letzten paar Dinge erledigen.

Was jetzt kommt, wird wieder direkt auf dem Raspberry installiert. Also nicht als Container.
Dazu wie immer per SSH mit deinem pi verbinden.

Dann aktualisieren wir unsere Quellen und installieren apt-transport-https, was wir für den weiteren Schritt benötigen.

sudo apt-get update && sudo apt-get install apt-transport-https

Damit wir Zugriff auf die Quelle von influxDB haben, um uns Pakete herunterladen zu können, besorgen wir uns einen Key und speichern ihn auf dem Raspberry:

wget -q https://repos.influxdata.com/influxdb.key
sudo echo '23a1c8836f0afc5ed24e0486339d7cc8f6790b83886c4c96995b88a061c5bb5d influxdb.key' | sha256sum -c && cat influxdb.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdb.gpg > /dev/null

Um später auch Updates erhalten zu können, fügen wir noch einen Eintrag in unserer Paketquelle hinzu:

sudo echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdb.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list

Final installieren wir endlich Telegraf:

sudo apt-get update && sudo apt-get install telegraf
Raspberry Pi Monitoring - Telegraf installieren

Es sollte jetzt von repos.influxdata.com das Paket für telegraf heruntergeladen und installiert werden.
Für mehr Informationen, und weiterführende Konfigurationen, schaue dir die Installationsanleitung von Telegraf an.

telegraf konfigurieren

Uns fehlen noch ein paar Konfigurationen, damit wir für unser Raspberry Pi Monitoring auch alle benötigten Informationen bekommen, und in unserer Datenbank speichern können.
Dafür öffnen wir eine config Datei von telegraf:

sudo nano /etc/telegraf/telegraf.conf

Viel Spaß beim scrollen…. ja diese Datei ist WIRKLICH gefühlt unendlich lang. Aber keine Sorge, wir machen da nicht sehr viel mit und müssen es auch für unsere Anforderungen nicht.

Suche mal nach „OUTPUT PLUGINS“ und dann nach [[output.influxdb]]. Unter diesem Punkt geben wir jetzt an, wo sich unsere influxdb-Datenbank befindet.
Bei dem letzten auskommentierten (#) urls Eintrag entfernen wir einfach die Raute(#) und können es im Prinzip so lassen. Die 127er IP ist der localhost. Da die influxdb ja direkt auf dem Raspberry läuft, kann diese so erreicht werden.
Falls du noch einen zweiten Raspberry hast, würdest du bei diesem hier die IP des Hosts eingeben, auf dem die influxdb-Datenbank läuft.

Ein wenig unter diesem Eintrag entfernen wir auch die Raute(#) vor dem „database = “ und geben unserer Datenbank einen Namen.
Diese wird dann später automatisch angelegt und wir brauchen uns da nicht selbst drum kümmern.
Ich habe meine hier „raspberry_live“ genannt, damit ich später weiß von welchem meiner raspberrys die Daten sind. Bei einem weiteren pi würde ich zum Beispiel „raspberry_test“ oder sowas nehmen.

Raspberry Pi Monitoring - Telegraf config

Ich greife jetzt einen Schritt vor, denn ich nutze für mein Raspberry Pi Monitoring bei Grafana ein fertiges Dashboard. Und der Entwickler gibt noch ein paar Parameter an, die man in die telegraf.conf eintragen sollte. Daher scrollen wir jetzt sehr weit nach unten bis du „INPUT PLUGINS“ sehen kannst. Direkt da drunter fügst du dann folgendes ein:

#In order to monitor both Network interfaces, eth0 and wlan0, uncomment, or add the next:
[[inputs.net]]

[[inputs.netstat]]

[[inputs.file]]
  files = ["/sys/class/thermal/thermal_zone0/temp"]
  name_override = "cpu_temperature"
  data_format = "value"
  data_type = "integer"

[[inputs.exec]]
  commands = ["/opt/vc/bin/vcgencmd measure_temp"]
  name_override = "gpu_temperature"
  data_format = "grok"
  grok_patterns = ["%{NUMBER:value:float}"]
image 30

Jetzt speichere die Datei und verlasse sie. Denn hier sind wir erstmal mit fertig.
Damit wir auf dem Raspberry auch auf die Werte von GPU usw. zugreifen dürfen, müssen wir den telegraf User noch in eine Gruppe hinzufügen:

sudo usermod -G video telegraf

Noch haben unsere Änderungen keine Wirkung, daher starten wir den Service telegraf einmal neu:

sudo service telegraf restart

Ab jetzt sollten Daten gesammelt und in die Datenbank geschrieben werden.
Was weiterhin fehlt ist das Dashboard, damit wir auch etwas sehen, und die Konfiguration zur Datenbank, damit Grafana auch weiß woher die Daten kommen sollen!

InfluxDB mit Grafana verbinden

Wir loggen uns jetzt wieder in der Grafana WebGui auf dem Raspberry ein (IP-DEINES_RASPBERRYS:3000).
Hier wählen wir auf der linken Seite das Zahnrad und „Data sources“ aus, dann klicken wir auf den Button „Add data source“ und sagen zum Schluss wir wollen eine InfluxDB hinzufügen:

image 31
image 32
image 33

Jetzt müssen wir nur noch ein paar Angaben zu der Datenbank machen. Damit es einfacher zu handhaben ist, verzichte ich hier vollkommen auf Username / Passwörter. Bedeutet die Datenbank ist frei zugänglich. Da dies alles nur in unserem Netzwerk läuft, ist das kein Problem. Bedenke aber das man unter anderen Umständen immer User und Passwörter vergeben sollte.

Zurück zu unseren Einstellungen.
Unter Name kannst du einen Namen vergeben der dann später als Quelle in deinem Dashboard auswählbar ist.
Im Bereich HTTP und URL gibst du die IP deines Raspberrys ein auf dem die Datenbank läuft, gefolgt von dem Port 8086
Die restlichen Einstellungen können so bleiben.

image 34

Etwas weiter unten musst du noch den Datenbank Namen angeben aus dem die Daten gelesen werden sollen. Du erinnerst dich? Wir haben diesen weiter oben in die telegraf.conf eingetragen. In meinem Fall als „raspberry_live„.
Über den Button „Save & test“ prüfen wir die Verbindung. Ein grüner Haken und „Data source is working„, zeigt uns an, das alles funktioniert hat:

image 35

Dashboard für Grafana besorgen

Was wäre ein Raspberry Pi Monitoring ohne ein Dashboard?
Damit wir bei Grafana ein solches sehen können, müssten wir uns selbst eins erstellen oder – was ich hier bevorzuge – ein fertiges Dashboard importieren.
Du kannst dir auf der Grafana Labs Seite alle verfügbaren Dashboards ansehen und entsprechend suchen. Wir wollen ja ein speziell für einen Raspberry Pi erstelltes nutzen, daher suchen wir auch nach „Raspberry“.
Ich denke du wirst dann bei deiner Suche direkt auf dieses hier treffen: Raspberry Pi Monitoring

Raspberry Pi Monitoring - Grafana Dashboard

Dieses nehmen wir auch direkt. Wie?! Ganz einfach: Kopiere dir die ID oben Rechts „10578„.
Dann öffnest du bei dir deine Grafana Umgebung (IP-DEINES_RASPBERRYS:3000) und gehst über den Menüpunkt „Dashboards“ auf „+ Import„:

image 28

Hier trägst du die gerade kopierte oder gemerkte ID des Dashboards ein (10578) und betätigst den „Load“ Button.

image 29

Jetzt könntest du den Namen des Dashboards ändern und musst auf jeden Fall die Verbindung zu den Daten – also zu der influxDB – angeben.
Diese hatten wir ja gerade eingerichtet und du solltest sie in dem Drop-Down-Feld auswählen können. In meinem Fall „Raspberry Pi Monitoring“

image 36

Ist alles eingestellt, klicken wir auf den „Import“ Button und sehen einige Sekunden später bereits unser Dashboard mit Daten.
Ab jetzt kannst du dich einfach mal in Ruhe durch alle Punkte klicken und dir das Dashboard anschauen. Je länger dein Raspberry läuft, je mehr Daten erscheinen. Oben Rechts kannst du die Aktualisierungsrate einstellen. Default ist 1 Minute.

Herzlichen Glückwunsch, dein Raspberry Pi Monitoring ist somit fertig und funktionsfähig. Viel Spaß damit!

image 37

Feedback kannst du gerne hier abgeben 🙂
Fragen natürlich auch !


Du würdest auch gerne Feedback geben?
Mir mitteilen dass ich dir helfen konnte?
Einfach nur „Danke“ sagen?
Oder mir etwas mitteilen was nicht so toll war?
Du hast ein Problem oder nur eine Frage?
Na dann los!

Möchtest du diese Seite und mich sogar unterstützen?!

Du kannst mich z.B. auf Patreon besuchen und kleinere Pakete schnüren. Es gibt dann auch ein paar Vorzüge 🙂


10 Gedanken zu „Raspberry Pi Monitoring kostenlos – Grafana, InfluxDB mit Portainer und Docker installieren“

  1. Hi,
    klasse Anleitung, hat (fast) auf anhieb geklappt. Wollte die InfluxDb 2.xxx installieren. Das geht nur wenn man auf dem Pi ein 64bit Betriebssystem installiert.
    Hab jetzt alle Daten in der InfluxDb drin, hab alles brav an Grafana übermittelt. Leider brauch ich für mein „Endgerät“ einen anonymen Grafana Zugang. Den kann man ja ändern, in der Grafana.ini.
    Aber wie komme ich im Docker auf die Grafana.ini um die zu editieren?
    Bin absoluter Laie, habt bitte verständnis, hab mich so schon ganz schön durchgequält, aber an der letzten Hürde scheiter ich 🙂

    Antworten
  2. Hallo, geniale Tutorials! Das waren die besten die ich seit langem gelesen habe! Ich habe sie auch gleich mal in meinem Blog verewigt damit ich sie nicht vergesse 😀

    Mir fehlt jetzt der Punkt, dass ich die influxDB mit Benutzer und Passwort absichere. Dadurch das sie in einem Container läuft, müsste ich den Client doch jetzt entweder im Container installieren oder auf dem Host, oder? Was wäre hier das geschickteste Vorgehen?

    Grüße,
    Pascal

    Antworten
    • Ach, eins noch! Die GPU Anzeige hatte bei mir mit der Pfadangabe in der Telgraf.config nicht funktioniert. Ich habe also einfach nur den tool verlinkt, dann ging es.

      Antworten
      • Und schon selbst drauf gekommen:

        Mit:
        docker container ls
        Container anzeigen lassen für die ContainerID

        Dann mit:
        docker exec -it /bin/bash
        Auf die bash des Containers verbinden.

        Danke 😛

        Antworten
        • Hi Pascal,

          es freut mich wenn dir meine Tutorials gefallen und geholfen haben.
          Und auch schön dass du direkt selbst ein Problem gelöst hast 🙂

          Zu dem absichern der Datenbank: hier müsstest du in der config entsprechende Änderungen vornehmen (influxDB) und bei allen Applikationen die da drauf zugreifen (telegraf, grafana usw.).
          Für ein lokales Netzwerk eigentlich nicht zwingend notwendig.

          Vielleicht erstelle ich dazu aber auch noch ein Tutorial. Bisher habe ich dies auch noch nicht „komplett“ durchgeführt. Also nicht bei allen Applikationen – kann daher nicht sagen wie schwierig / aufwändig das wird.

          Es gibt aber auch einige Informationen auf der influxDB Webseite dazu:

          https://docs.influxdata.com/influxdb/v1.8/administration/authentication_and_authorization/

          lg

          DarkWolfCave

          Antworten
  3. Super Anleitung, vielen Dank!

    Ich würde jetzt noch gerne den Speicherort der Datenbanken von InfluxDB auf ein anderes Verzeichnis legen, damit die Datenbanken auf der gemounteten SSD landen, statt auf meinem Boot-Stick.
    Ich müsste doch da ja jetzt ein im Container separates Verzeichnis anlegen und im Portainer auf die SSD binden und dann in der influxdb.conf das Speicherverzeichnis entsprechend angleichen, oder sehe ich das falsch?

    Gruß
    Marian

    Antworten
    • Möchte die gesammelten SmartHome-Daten damit separat auf einem größeren Speichermeidum ablegen, damit ich mir den System-Stick nicht vollmülle langfristig.

      Antworten
      • Moin Marian,

        freut mich zu hören dass dir die Anleitung gefällt.
        Und ja, du siehst das richtig.
        Beim einrichten des Containers für InfluxDB müsstest du bei der Konfiguration unten die Pfade verbinden.
        Zuerst natürlich den Stick oder SSD in dem System mounten und diesen Punkt dann mit /var/lib/influxdb (bin mir fast zu 100% sicher dass es dieser Pfad ist) im Container verbinden.

        Ich habe aktuell nicht die Möglichkeit das selbst zu testen / prüfen aber denke es sollte so funktionieren.

        Ansonsten kannst du dich auch gerne nochmal melden (hier oder Discord).

        lg

        DarkWolfCave

        Antworten
  4. danke, hat funktioniert. nur die container habe ich ohne portainer gestartet, da ich bei Grafana eine komische Fehlermeldung „unable to remove the container“ beim deployen bekommen hab

    Antworten
    • Moin peter
      freut mich dass es grundsätzlich auch bei dir funktioniert hat.
      Die genannte Fehlermeldung hört sich stark nach einem Berechtigungsproblem von dem User an.

      lg
      DarkWolfCave

      Antworten

Schreibe einen Kommentar