Zum Inhalt springen

Aufgabe 09 - InfluxDB mit Grafana

Zu Zen-Modus wechseln

In dieser Übung wird eine Zeitreihendatenbank praktisch ausprobiert: Testdaten erzeugen, InfluxDB und Grafana per Docker Compose starten, CSV importieren und in Grafana visualisieren (siehe Kapitel 4 - DBMS Markt, Zeitreihendatenbanken). Im Expertenteil entsteht eine echte Live-Datenpipeline mit Node-RED.

  • Docker und Docker Compose.
  • Browserzugang zu mockaroo.com.
  • Kapitel 4 - DBMS Markt (Zeitreihendatenbanken).
  • Sie erzeugen Zeitreihen-Testdaten mit Tags und Fields.
  • Sie starten einen Container-Stack mit vorkonfigurierter InfluxDB und Grafana.
  • Sie importieren annotiertes CSV und visualisieren es mit Flux.
  • Sie bauen eine kontinuierliche Live-Datenpipeline und verstehen Retention.
  • Reproduktion: Testdaten erzeugen (Teil A).
  • Reorganisation und Transfer: den Stack starten und Daten importieren und visualisieren (Teile B und C).
  • Reflexion, Problemlösung und Urteilsbildung: eine Live-Pipeline aufbauen und beurteilen (Teil D).

Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.

  1. Auf Mockaroo ein Schema „Smart Building Sensoren” mit den Spalten _measurement (Formula, konstant "sensors"), time (Datetime ISO 8601), building und device (Custom List), temperature_c, humidity_rh, co2_ppm, power_w (Number) anlegen und als CSV exportieren. building und device eignen sich als Tags, die Messwerte als Fields. Spaltenreihenfolge: _measurement,time,building,device,temperature_c,humidity_rh,co2_ppm,power_w.
  1. Einen Projektordner influx-grafana-lab/ mit docker-compose.yml (Services influxdb:2 und grafana, InfluxDB per DOCKER_INFLUXDB_INIT_* vorkonfiguriert: Org school, Bucket sensors, Admin-Token) und der Datasource-Provisioning-Datei grafana/provisioning/datasources/datasource.yml (Typ influxdb, Version Flux, Org/Bucket/Token) anlegen.
  2. Mit docker compose up -d starten, mit docker compose ps prüfen und die UIs öffnen (InfluxDB http://localhost:8086, Grafana http://localhost:3000).
  1. Das CSV per influx write importieren (annotiertes CSV mit #datatype measurement,dateTime:RFC3339,tag,tag,double,double,long,long und den Spaltennamen als zweitem Header, --skipHeader 1). Der Import kann über einen wegwerfbaren CLI-Container erfolgen, der das CSV nur mountet.

  2. Den Import verifizieren, per CLI oder im Data Explorer:

    Terminal-Fenster
    docker exec influxdb influx query 'from(bucket:"sensors") |> range(start:-2y) |> count()' --token school-super-token
  3. In Grafana die Datenquelle testen und ein Dashboard mit vier Panels bauen: temperature_c über Zeit gruppiert nach building (Time series); co2_ppm für building = "E101" (Time series); aktueller humidity_rh für ein Gebäude (Stat); die letzten 20 Messwerte als Tabelle. Beispiel-Flux:

    from(bucket: "sensors")
    |> range(start: -1y)
    |> filter(fn: (r) => r._measurement == "sensors")
    |> filter(fn: (r) => r._field == "temperature_c")
    |> group(columns: ["building"])

Teil D - Expertenteil: Live-Datenpipeline mit Node-RED

Abschnitt betitelt „Teil D - Expertenteil: Live-Datenpipeline mit Node-RED“
  1. Bucket mit Retention: Einen zweiten Bucket crypto mit 30 Tagen Vorhaltezeit anlegen. Erklären, was die Retention Policy bewirkt und warum sie bei fortlaufenden Live-Daten wichtig ist (alte Daten werden automatisch gelöscht).

    Terminal-Fenster
    docker exec influxdb influx bucket create --name crypto --org school --token school-super-token --retention 30d
  2. Node-RED anbinden: Den Docker-Stack um einen nodered-Service erweitern (Port 1880, Umgebungsvariablen für Org/Bucket/Token/URL) und starten.

  3. Live-Flow: In Node-RED einen Flow aufbauen, der alle fünf Sekunden Kurse mehrerer Kryptowährungen von der Binance-API abruft, ins InfluxDB-Line-Protocol umwandelt und in den Bucket crypto schreibt (der fertige Flow kann per Import eingespielt werden). Mit Deploy starten und im Debug-Node prüfen, dass geschrieben wird.

  4. Live-Dashboard: Ein Grafana-Dashboard mit Panels für den BTC-Preis über die Zeit, alle Coins, den aktuellen BTC-Preis (Stat, |> last()) und eine Preistabelle bauen.

  5. Reflexion: In vier bis fünf Sätzen begründen, warum eine Zeitreihendatenbank für diese Live-Messwerte besser passt als eine relationale Datenbank (Schreibrate, Retention, zeitbasierte Abfragen), und wo ihre Grenze läge (etwa komplexe Joins über viele Entitäten).

  1. Worin unterscheiden sich Tags und Fields in InfluxDB?
  2. Wozu dient das annotierte CSV-Format beim Import?
  3. Was bewirkt eine Retention Policy?
  4. Warum passt eine Zeitreihendatenbank besser zu Sensordaten als ein relationales System?
  5. Wo liegt die Grenze einer Zeitreihendatenbank gegenüber einer relationalen?
  • Das verwendete docker-compose.yml und die datasource.yml, die CSV-Schema-Beschreibung, je Panel ein Screenshot samt Flux-Query und Einstellungen sowie ein README.md mit allen Docker- und Import-Befehlen.
  • Für Teil D zusätzlich das erweiterte docker-compose.yml, den Node-RED-Flow und die Screenshots des Live-Dashboards.

HTL Villach, 2025-2026,
https://www.htl-villach.at