Logging mit InfluxDB, Telegraf und Grafana

Aus Interesse habe ich mal einen Logging-Stack mit Grafana, Telegraf und InfluxDB auf dem Raspberry Pi untergebracht. Hier erfahrt ihr, wie das geht.

Grundkonzept

Grundsätzlich besteht der Stack aus drei Teilen: 

  • der Datenbank, die alle Werte schluckt: InfluxDB
  • der Sammler zum Ermitteln aller Daten: Telegraf
  • die Anzeige: Grafana

Installation

InfluxDB

Los geht es mit InfluxDB. Die aktuelle Version findet ihr hier. Mit folgendem Kommando wird installiert, automatischer Start eingestellt und die Datenbank gestartet:

wget https://dl.influxdata.com/influxdb/releases/influxdb_1.5.2_armhf.deb
sudo dpkg -i influxdb_1.5.2_armhf.deb
sudo systemctl enable influxdb
sudo systemctl start influxdb

Verbindet euch danach mit der Datenbank, legt den Admin-User an und erzeugt eine Datenbank (merkt euch diese Angaben!):

influx
# Admin-User anlegen (user: admin, Passwort startPW)
CREATE USER admin WITH PASSWORD 'startPW' WITH ALL PRIVILEGES 
#Datenbank anlegen und InfluxDB verlassen
CREATE DATABASE telegraf 
exit

Mehr Shell-Befehle gibt es bei Influxdata.
Geht danach in die Konfiguration von InfluxDB und aktiviert den HTTP-Zugriff mit Authentifizierung:

sudo nano /etc/influxdb/influxdb.conf  
 [http]   
  enabled = true   
  bind-address = ":8086"   
  auth-enabled = true

Schließt die Datei mit ^X, speichert und startet anschließend den Service neu:

sudo systemctl restart influxdb

Die Datenbank läuft jetzt mit eurer Konfiguration.

Telegraf

Jetzt geht es darum, die Datenbank zu füllen. Dazu nutzen wir Telegraf, um verschiedene Metriken einzusammeln und in die Datenbank zu schreiben.
Für die Installation geht es analog zu InfluxDB damit los, die aktuelle Version herauszusuchen und herunterzuladen:

wget https://dl.influxdata.com/telegraf/releases/telegraf_1.6.2-1_armhf.deb
sudo dpkg -i telegraf_1.6.2-1_armhf.deb

Ich habe mich gegen den standardmäßig installierten Service entschieden und diesen deaktiviert:

sudo systemctl disable telegraf

Stattdessen habe ich den Start von Telegraf in rc.local ergänzt und gebe per Skript meine eigene Konfiguration mit:

sudo nano /etc/rc.local
bash /home/pi/telegraf/start_telegraf.sh

Im Skript steht nur das:

#!/bin/bash
sudo telegraf --config /home/pi/telegraf/telegraf.conf &>> /home/pi/telegraf/start_telegraf.log 

Damit startet Telegraf bei jedem System-Neustart mit und ich konnte bequem an der Konfiguration experimentieren, ohne mit laufenden Services in Konflikt zu geraten.

Grafana

Mit Grafana könnt ihr u.a. eure gesammelten Daten in Dashboards anzeigen lassen. Um Grafana auf den Raspberry Pi zu bringen, könnt ihr dieses Projekt benutzen. Sucht euch die aktuelle Version heraus und ladet sie herunter.

Beim Raspberry Pi 1 ist für die Installation mit apt eine kleine Sonderlocke notwendig:

#apt source aktualisieren
echo "deb https://dl.bintray.com/fg2it/deb-rpi-1b stretch main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
# Grafana installieren
sudo apt-get install grafana

Für den Pi 3 geht es einfacher:

wget https://github.com/fg2it/grafana-on-raspberry/releases/download/v5.1.2/grafana_5.1.2_armhf.deb
sudo dpkg -i grafana_5.1.2_armhf.deb

Beim Installieren gab es bei mir einen Fehler wegen fehlendem libfontconfig. Das konnte ich folgendermaßen heilen:

# 1.Versuch
sudo apt-get install libfontconfig
# 2.Versuch (schließt Grafana-Installation ab)
sudo apt --fix-broken install

Danach konnte ich Grafana mit folgenden Kommandos starten:

sudo systemctl enable grafana-server  
sudo systemctl start grafana-server 

Ihr erreicht das Web-Interface dann über http://<IP des Raspberry Pis>:3000 und könnt euch mit admin/admin einloggen.
Wenn ihr erstmal rumspielen wollt, gibt es unter <a rel="noreferrer noopener" aria-label="Ihr erreicht das Web-Interface über dann über die URL http://:3000 und könnt euch mit admin/admin einloggen. Wenn ihr erstmal rumspielen wollt, gibt es unter http://play.grafana.org noch eine Spielwiese. (opens in a new tab)“ href=“http://play.grafana.org“ target=“_blank“>http://play.grafana.org noch eine Spielwiese.

Alles verbinden

Damit sich alle Teile des Stacks verstehen, müsst ihr jetzt noch für gegenseitige Zugriffe sorgen.

Telegraf wird über die telegraf.conf eingerichet.  Gebt hier im Bereich „Output Plugins“ die Zugangsdaten für die Datenbank an. Wichtig sind dafür die Parameter, urls, database, username und password.

#
OUTPUT PLUGINS
#
Configuration for sending metrics to InfluxDB
[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086"]
database = "telegraf"
username = "admin"
password = "startPW"

Über die Input-Plugins könnt ihr außerdem angeben, welche Daten Telegraf sammeln soll. Mehr zu den Plugins gibt auf der Projekt-Website. Damit wird eure Datenbank also gefüllt. 

Um die Daten wieder anzeigen zu lassen, ruft euer Grafana auf, loggt euch ein und sucht den Bereich „Data sources“ in den Einstellungen. Fügt hier eure Datenbank hinzu. Das Ergebnis sieht dann so aus:

Damit solltet ihr loslegen und euer erstes Dashboard anlegen können:

4 Gedanken zu „Logging mit InfluxDB, Telegraf und Grafana

  • 12. Juli 2019 um 15:14
    Permalink

    hallo Patrick,

    vielen Dank für deine Doku. ich möchte gerne als Input ein FTP-Server verwendet. Also mein Ziel ist, dass Telegraf alle Dateien aus meinem FTP-Server sammeln, und danach an InfluxdB übertragen kann. Wie kann ich das machen ?
    Lg

    Camel

    Antwort
    • 13. Juli 2019 um 18:36
      Permalink

      Hi,

      tatsächlich habe ich mich nicht damit beschäftigt, ob/wie Telegraf irgendwelche Dateien kopieren kann. Über das Exec-Plugin kann man externe Skripte aufrufen und deren Ergebnisse mit Telegraf weiterbearbeiten. Vielleicht kannst du damit die Dateien greifen und an Telegraf übergeben, sodass es die Dateien für dich in die Datenbank schreibt.
      Andere Idee: du schreibst dir selber ein Skript, das die Dateien greift und in die Datenbank schreibt und rufst das per Cron so oft auf, wie du willst. Vielleicht hilft dabei https://docs.influxdata.com/influxdb/v1.5/guides/writing_data/

      Viel Erfolg.
      Patrick

      Antwort
  • 9. September 2019 um 13:58
    Permalink

    Hi,
    kannst du mir vllt. verraten wie du in deinem Screenshot oben die Uptime konfiguriert hast um sowohl die Tage als auch die Stunden anzuzeigen?

    Danke,
    Michael

    Antwort
    • 20. September 2019 um 15:50
      Permalink

      Hi, Sorry für die späte Antwort – konnte erst jetzt mal reinschauen. In Grafana ist das eine Singlestat Metric und das Feld heißt „uptime_format“ unter Option ist als Unit „duration (hh:mm:ss)“ angegeben. Sobald es mehr als 24h werden, erscheint dann auch die Anzahl der Tage.

      Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.