Raspberry Pi Monitoring mit Telegraf, Influxdb und Grafana

Wenn man einen Raspberry Pi verwendet und darauf verschiedene Dienste ausführt, möchte man auch sicherstellen, dass diese Dienste reibungslos funktionieren. Um über Fehler bzw. Probleme informiert zu werden, ist Monitoring (Überwachung) des Raspberry Pi Servers von großer Bedeutung.

Das Ziel / Ergebnis

Im Folgenden wird der sogenannte TIG-Stack bestehend aus Telegraf, Influxdb und Grafana auf dem Raspberry Pi installiert. In diesem Beitrag wird ein Raspberry Pi 3 b+ mit aktuellstem RaspberryOS verwendet. Die folgenden Schritte funktionieren problemlos auch auf dem Raspberry Pi 4, der aufgrund seiner Architektur sogar besser geeignet wäre.

Man kann diese Grundlage dann später verwenden, um auch andere Dienste zu überwachen, da Influxdb als Datenbank für zeitbasierte Daten häufig von anderen Überwachungswerkzeugen verwendet wird und es für Grafana unzählige visuelle Übersichten gibt.

Voraussetzungen

Es wird ein konfigurierter Raspberry Pi (3 bzw. 4) als Grundlage benötigt. Es gibt viele Beiträge, in denen gezeigt wird, wie man das Gerät zu Beginn einrichtet. Hier wird keine grafische Oberfläche benötigt. Alle Schritte in diesem Beitrag werden per SSH Verbindung in der Kommandozeile durchgeführt.

Vorbereitungen

Eine wichtige Einstellung, die eventuell noch nicht getroffen wurde, wäre es die Partition für Dateien zu erweitern, sodass die Datenbank theoretisch die volle Größe der verwendeten SD-Karte verwenden kann. Dies kann man mithilfe der raspi-config erreichen. Zur Sicherheit nehmen wir vorher noch ein Update des Systems vor.

sudo apt-get update && sudo apt-get -y upgrade
sudo raspi-config

Es öffnet sich ein Interface im Terminal. Navigiere zu Punkt 7 Advanced Options.

Wähle nun den Punkt A1 Expand Filesystem aus.

Man sieht nun, wie der Befehl ausgeführt wird und erhält noch einige Rückmeldungen. In der Regel sollte alles problemlos funktioniert haben und wir haben ausreichend Speicherplatz für die Überwachungsdaten.

TIG-Stack Installation

Da meistens die offiziellen Repositories von Debian ältere Softwareversionen anbieten, fügen wir zuerst die Repositories der Hersteller hinzu und verwenden diese dann für die Installation von Influxdb und Grafana.

curl -sL https://packages.grafana.com/gpg.key | sudo apt-key add -
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/debian buster stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list

sudo apt-get update

Wenn alles fehlerfrei funktioniert hat, können nun die Programme einfach installiert werden.

sudo apt-get install -y grafana influxdb telegraf

Nun fügen wir die drei Programme noch zum Autostart hinzu, sodass nach Einschalten des Raspberry Pi auch das Monitoring direkt startet.

sudo systemctl enable influxdb grafana-server telegraf
sudo systemctl start influxdb grafana-server telegraf

Man kann nun noch überprüfen, ob alle drei Programme auch funktionieren.

sudo systemctl status influxdb.service
sudo systemctl status grafana-server.service
sudo systemctl status telegraf.service

Konfiguration

Bisher haben wir nur die notwendigen Anwendungen installiert. Im Folgenden müssen wir die drei Bausteine nun verbinden. Das heißt wir sorgen dafür, dass wir mithilfe von Telegraf den Raspberry Pi selbst überwachen und diese Daten in einer Influxdb Datenbank speichern und die dann mithilfe von Grafana für den Nutzer visualisieren.

InfluxDB

Wir erstellen hier für unseren Telegraf Dienst eine Datenbank und einen eigenen Nutzer für diese Datenbank. Wichtig ist, dass die hier verwendeten Passwörter Beispielangaben sind und durch starke Passwörter ausgetauscht werden sollen. Wir rufen also das InfluxDB Terminal auf.

influx

Nun erstellen wir die Datenbank. Die Folgenden Befehle finden jeweils in dieser InfluxDB Eingabe statt. Unsere Datenbank heißt telegraf.

create database telegraf

Als nächstes wird der Telegraf Nutzer der Datenbank erstellt. Wir geben diesem Nutzer alle Rechte an der soeben erstellten Datenbank. Unser Nutzer heißt auch einfach telegraf mit dem Passwort securePassword.

use telegraf
create user telegraf with password 'securePassword' with all privileges
grant all privileges on telegraf to telegraf

Dieser Schritt ist nun optional. Wir erstellen eine Aufbewahrungsregel, die dafür sorgt, dass nicht zu viel Speicher verwendet wird.

create retention policy "4Weeks" on "telegraf" duration 4w replication 1 default

Nun können wir die InfluxDB Eingabe verlassen.

exit

Telegraf

Da nun eine Datenbank existiert, in der Telegraf Informationen über den Raspberry Pi speichern kann, muss nun genau diese Verbindung hergestellt werden. Hierfür wird die Konfigurationsdatei von Telegraf angepasst.

sudo nano /etc/telegraf/telegraf.conf

Folgender Block sollte in dieser Datei in irgendeiner Weise bereits in der Datei existieren. Vor jeder Zeile muss das Kommentarsymbol entfernt werden, sodass dann insgesamt folgende valide Zeilen existieren. Es müssen natürlich ggf. Änderungen vorgenommen werden. Zum Beispiel beim Passwort oder dem Nutzernamen. In unserer Installation verwenden wir den Standardport von InfluxDB, der 8086 ist.

[[outputs.influxdb]]
   urls = ["http://127.0.0.1:8086"]
   database = "telegraf"
   username = "telegraf"
   password = "securePassword"

Telegraf muss nun die neue Konfiguration laden.

sudo systemctl reload telegraf.service

Jetzt werden Daten von Telegraf an die Datenbank gesendet, sobald der Telegraf Dienst wieder gestartet ist. Zur Überprüfung kann man hier wieder die InfluxDB Eingabe verwenden.

influx
use telegraf
select * from system limit 10

Es sollte keine Fehlermeldung erscheinen aber eventuell bereits ein paar (maximal 10) Datenbankeinträge. (Zur Erinnerung: mit dem Befehl exit verlässt man die InfluxDB Eingabe)

Nun müssen wir noch im Hinblick auf das Grafana Dashboard, das in wenigen Schritten hinzugefügt wird, einige Einstellungen anpassen um zusätzliche Daten zu erfassen.

Als erstes muss der telegraf Nutzer der Linux Gruppe video hinzugefügt werden, um GPU Informationen sammeln zu können.

sudo usermod -a -G video telegraf

Nun müssen wir zusätzlich erneut die Telegraf Konfiguration ändern. Dieses mal ist es jedoch besser nicht die originale Telegraf Konfiguration, die bereits weiter oben angepasst wurde, zu verändern. Stattdessen fügen wir eine weitere Datei hinzu, die von Telegraf als Konfiguration gelesen wird. Wichtig ist, dass sich diese Datei im Ordner /etc/telegraf/telegraf.d/ befindet. Jede Datei in diesem Ordner mit der Endung .conf wird von Telegraf verwendet.

sudo nano /etc/telegraf/telegraf.d/raspberrypi.conf

Folgender Inhalt wird dort eingesetzt.

[[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}"]

Nun werden unter anderem auch die CPU & GPU Temperaturen und Netzwerkinformationen gespeichert. Man kann die Telegraf Konfiguration noch überprüfen.

telegraf --test --config /etc/telegraf/telegraf.d/raspberrypi.conf

Wenn keine Fehler aufgetreten sind und man in der Ausgabe die Werte für cpu_temperature und gpu_temperature findet, ist die Konfiguration gültig und der Telegraf Dienst kann mit der neuen Konfiguration verwendet werden.

sudo systemctl reload telegraf.service

Zur Sicherheit bietet es sich hier auch an, den Raspberry Pi neu zu starten.

Grafana

Telegraf sammelt nun Daten und speichert sie in einer eigenen InfluxDB Datenbank. Bisher können wir diese Daten allerdings nur über das InfluxDB Terminal sehen. Mithilfe von Grafana können diese Daten nun visualisiert und im Browser dargestellt werden.

Wir haben Grafana bereits installiert und müssen keine weiteren Änderungen vornehmen. Der Dienst läuft bereits auf dem Raspberry Pi und kann nun im Browser über die Adresse des Raspberry Pi von jedem beliebigen Gerät im gleichen Netzwerk erreicht werden. Der verwendete Port ist 3000. Also unter http://IP_RASPBERRYPI:3000. Es wird ein Anmeldefenster angezeigt. Die Anmeldedaten für die erste Anmeldung sind für username/email und passwort jeweils admin und admin. Nach der Anmeldung wird man aufgefordert, dieses Passwort sofort zu ändern.

Nun muss eine sogenannte Data Source hinzugefügt werden. Grafana verwendet Daten verschiedene Data Sources um sie graphisch anzuzeigen. Hier wollen wir also unsere telegraf InfluxDB Datenbank als Quelle hinzufügen.

Um eine Neue Datenquelle hinzuzufügen kann man in der Navigation links auf das Zahnrad gehen und dort den Reiter Data Sources auswählen.

Auf der Seite wählt man dann Add data source.

Man sucht nun in der Übersicht der Möglichen Quelltypen nach InfluxDB und wählt diese Datenquelle auch aus.

Nun kann man diese Quelle konfigurieren. Im Folgenden steht eine Übersicht passender Einstellungen, die man so übernehmen kann. Sehr wichtig ist, dass man auch die URL des InfluxDB Dienstes angibt. Häufig wird dieser Punkt ausgelassen.

Hier wird noch die Verbindung zur erstellten telegraf Datenbank hinzugefügt. Im Passwortfeld steht das Passwort des Telegraf Nutzers. Man kann natürlich alternativ auch einen eigenen Grafana Nutzer für die Datenbank anlegen. Dies geht genauso wie bei der Erstellung des Telegraf Nutzers. Man könnte lediglich die Rechte anpassen.

Mit einem Klick auf Save & Test wird die Data Source gespeichert und man kann die Seite verlassen.

Im nächsten und letzten Schritt wird nun noch ein Grafana Dashboard importiert, das die Daten anzeigen kann. In der Navigation an der Seite unter Dashboards>Manage kann man mit Import ein Dashboard importieren. Das zu importierende Dashboard hat die Nummer 10578.

Mit einem Klick auf Load öffnet sich ein Import Assistent. Hier kann man alles frei einstellen. Wichtig ist nur, dass man bei der im Bild unten roten Markierung die Datenquelle auswählt, die weiter oben erstellt worden ist.

Mit einem Klick auf Import ist das Dashboard verfügbar und kann aufgerufen und verwendet werden.