Grafana für die industrielle IoT-Überwachung: Modbus-Dashboard, Warnmeldungen, Verlaufsdaten

· 8 Minuten Lesezeit
8 min read
Eziwan-Team
IoT-Infrastruktur

Grafana hat sich zum Standardtool für die Visualisierung industrieller Daten entwickelt. Das kostenlose, quelloffene und erweiterbare Tool wandelt Ihre Modbus-, OPC-UA- oder MQTT-Daten in betriebsreife Dashboards um. Dieser Leitfaden zeigt Ihnen, wie Sie mit Grafana eine umfassende industrielle Überwachungslösung aufbauen – oder wie Eziwan Ihnen diese schlüsselfertig bereitstellt.


Warum Grafana für die industrielle Überwachung?

Grafana hat sich in der Branche aus mehreren Gründen durchgesetzt:

  • Universelle Konnektoren: InfluxDB, TimescaleDB, PostgreSQL, Prometheus, MQTT, REST-API – eine Datenquelle für jeden Stack
  • Umfangreiche Dashboards: Zeitreihen, Anzeigen, Statistiken, Tabellen, Heatmaps, Flussdiagramme (mit Plugins)
  • Integrierte Warnmeldungen: Benachrichtigungen per SMS, E-Mail, Slack, PagerDuty, Webhook
  • Zugriffsverwaltung: Teams, Ordner, Berechtigungen pro Dashboard
  • Branchenspezifische Plugins: P&ID (Flussdiagramme), Rohrleitungsdiagramme, Übersichtsdiagramme

Im Vergleich zu einem herkömmlichen SCADA-System:

Grafana (+ IoT-Stack)SCADA Wonderware/Ignition
Lizenzkosten0 (Open Source)5.000–50.000 €
Hosting-Kosten50–200 €/Monat (Cloud)Dedizierter Server + Wartung
Unbegrenzte Variablen❌ (Abrechnung pro Tag)
Native Weboberfläche✅ (Ignition) / ❌ (Wonderware)
MobilfähigTeilweise
Cloud-IntegrationNativKomplex

Architektur: Von Modbus bis Grafana

Der komplette Stack zur Überwachung von Modbus-SPSen in Grafana:

Alternative bei großen Mengen:

Eziwan-Lösung (All-in-One):

Eziwan umfasst den kompletten Stack (Modbus-/OPC-UA-Erfassung, Cloud-Zeitreihen, vorkonfigurierte Grafana-Dashboards, SMS-/E-Mail-Benachrichtigungen), ohne dass Sie die einzelnen Komponenten selbst installieren und warten müssen.


Grafana + InfluxDB mit Docker installieren

# docker-compose.yml
version: '3.8'

services:
influxdb:
image: influxdb:2.7
ports:
- "8086:8086"
environment:
DOCKER_INFLUXDB_INIT_MODE: setup
DOCKER_INFLUXDB_INIT_USERNAME: admin
DOCKER_INFLUXDB_INIT_PASSWORD: mot_de_passe_securise
DOCKER_INFLUXDB_INIT_ORG: eziwan
DOCKER_INFLUXDB_INIT_BUCKET: industrie
DOCKER_INFLUXDB_INIT_RETENTION: 1825d # 5 ans
volumes:
- influxdb_data:/var/lib/influxdb2

grafana:
image: grafana/grafana:10.4.0
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_PASSWORD: grafana_securise
volumes:
- grafana_data:/var/lib/grafana
depends_on:
- influxdb

telegraf:
image: telegraf:1.29
volumes:
- ./telegraf.conf:/etc/telegraf/telegraf.conf:ro
depends_on:
- influxdb

volumes:
influxdb_data:
grafana_data:

Telegraf-Konfiguration für MQTT

# telegraf.conf
[[inputs.mqtt_consumer]]
servers = ["tcp://localhost:1883"]
topics = ["usine/#"]
qos = 1
data_format = "json"

# Parsen des MQTT-Themas: Fabrik/Standort/Station/Variable
[[inputs.mqtt_consumer.topic_parsing]]
topic = "usine/+/+/+"
tags = "_/_/station/_"
fields = "_/_/_/value"

[[outputs.influxdb_v2]]
urls = ["http://influxdb:8086"]
token = "votre_token_influxdb"
organization = "eziwan"
bucket = "industrie"

Erstellen Sie Ihr erstes industrielles Dashboard

Panel 1: Trenddiagramm (Zeitreihe)

So zeigen Sie die zeitliche Entwicklung des Drucks einer Station an:

InfluxDB-Abfrage (Flux):

from(bucket: "industrie")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "mqtt_consumer")
|> filter(fn: (r) => r["station"] == "station1")
|> filter(fn: (r) => r["_field"] == "pression")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "mean")

Einstellungen im Bedienfeld:

  • Typ: Time series
  • Einheit der Y-Achse: bar (Druck)
  • Linienbreite: 2
  • Füllungsopazität: 10
  • Schwellenwerte: grün < 8 bar, orange 8–10 bar, rot > 10 bar

Feld 2: Anzeige (Momentanwert)

So zeigen Sie den aktuellen Wert einer Variablen an:

InfluxDB-Abfrage:

from(bucket: "industrie")
|> range(start: -1m)
|> filter(fn: (r) => r["station"] == "station1" and r["_field"] == "pression")
|> last()

Einstellungen des Panels:

  • Typ: Gauge
  • Min: 0, Max: 16
  • Einheit: bar
  • Schwellenwerte: 0=grün, 10=orange, 12=rot

Panel 3: Kennzahlen (KPI)

So zeigen Sie die Gesamtanlageneffektivität (TRS) oder einen Produktionszähler an:

InfluxDB-Abfrage:

from(bucket: "industrie")
|> range(start: -24h)
|> filter(fn: (r) => r["_field"] == "pieces_produites")
|> sum()

Panel-Einstellungen:

  • Typ: Stat
  • Einheit: pcs (benutzerdefiniert)
  • Farbmodus: Background (rot, wenn < Zielwert)

Panel 4: Tabelle mit mehreren Standorten

So zeigen Sie den Status all Ihrer Websites in Echtzeit an:

from(bucket: "industrie")
|> range(start: -5m)
|> filter(fn: (r) => r["_field"] == "pression" or r["_field"] == "debit" or r["_field"] == "etat")
|> last()
|> pivot(rowKey: ["_time", "station"], columnKey: ["_field"], valueColumn: "_value")

Ergebnis: Tabelle mit den Spalten „Station“, „Druck“, „Durchfluss“ und „Status“, eine Zeile pro Standort.


Grafana-Benachrichtigungen einrichten

Warnung bei Überschreitung des Schwellenwerts

In Grafana 10+ (Unified Alerting):

  1. Das Panel öffnen → Edit → Alert
  2. Eine Regel erstellen:
    Condition: WHEN last() OF query(A, 5m, now) IS ABOVE 10
  3. Die Benachrichtigung konfigurieren:
    • Kontaktpunkt: E-Mail → maintenance@usine.fr
    • Kontaktpunkt: Webhook → SMS über Twilio/OVH SMS
  4. Automatische Stummschaltung: 15 Minuten nach Bestätigung

Alarmgruppierung für mehrere Standorte

Um „Alert Storms“ zu vermeiden, wenn mehrere Standorte gleichzeitig ausfallen:

# alertmanager.yml
route:
group_by: ['alertname', 'site']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
receiver: 'maintenance-team'

receivers:
- name: 'maintenance-team'
email_configs:
- to: 'maintenance@usine.fr'
send_resolved: true
webhook_configs:
- url: 'https://api.sms-provider.fr/send'

Anmerkungen zu Ereignissen

Bei Alarmen automatische Anmerkungen zu den Diagrammen hinzufügen:

// Bei einem Fehler eine InfluxDB-Anmerkung erstellen
from(bucket: "industrie")
|> range(start: v.timeRangeStart)
|> filter(fn: (r) => r["_field"] == "defaut" and r["_value"] == 1)
|> map(fn: (r) => ({r with _value: "Défaut détecté sur ${r.station}"}))

Grafana-Vorlagen und -Variablen für mehrere Standorte

Mit den Template-Variablen können Sie ein generisches Dashboard erstellen, das für alle Ihre Websites wiederverwendbar ist.

Eine Variable „site“ erstellen

Dashboard Settings → Variables → New Variable:

  • Name: site
  • Typ: Query
  • Datenquelle: InfluxDB
  • Abfrage:
    import "influxdata/influxdb/schema"
    schema.tagValues(bucket: "industrie", tag: "station")

Die Variable in den Panels verwenden

from(bucket: "industrie")
|> range(start: v.timeRangeStart)
|> filter(fn: (r) => r["station"] == "${site}")
|> filter(fn: (r) => r["_field"] == "pression")

Der Betreiber kann nun den Standort aus einem Dropdown-Menü oben im Dashboard auswählen.


Vorkonfigurierte Grafana-Dashboards für die Industrie

Dashboard zur Überwachung der Pumpstation

┌─────────────────────────────────────────────────────────────────┐
│ Messstation: [Dropdown] │ Zeitraum: [6 Std.|24 Std.|7 Tage|30 Tage] │
├──────────────┬──────────────┬──────────────┬────────────────────┤
│ Druck │ Durchfluss │ Füllstand │ Pumpenzustand │
│ [gauge] │ [gauge] │ [gauge] │ [stat 🟢/🔴] │
├──────────────┴──────────────┴──────────────┴────────────────────┤
│ 24-Stunden-Trends: Druck / Durchfluss / Füllstand │
│ [time series graph] │
├─────────────────────────────────────────────────────────────────┤
│ Aktive Alarme │ Letzte Einsätze │
│ [table] │ [table annotations] │
└─────────────────────────────────────────────────────────────────┘

Dashboard für die Produktion an mehreren Standorten

┌────────────────────────────────────────────────────────────────────┐
│ Vue globale — 15 sites │
├──────────┬──────────┬──────────┬──────────┬──────────┬────────────┤
│ Site 1 │ Site 2 │ Site 3 │ Site 4 │ Site 5 │ ... │
│ TRS: 87% │ TRS: 91% │ TRS: 73% │ TRS: 94% │ TRS: 82% │ │
│ 🟢 OK │ 🟢 OK │ 🔴 Alrm │ 🟢 OK │ 🟡 Warn │ │
├──────────┴──────────┴──────────┴──────────┴──────────┴────────────┤
│ Kumulierte Produktion in 24 Stunden: Ziel vs. Ist [Balkendiagramm] │
└────────────────────────────────────────────────────────────────────┘

Integration von Eziwan in Grafana

Eziwan bietet zwei Möglichkeiten zur Integration mit Grafana:

Modus 1: Grafana, gehostet bei Eziwan (empfohlen)

Die Eziwan-Plattform integriert Grafana nativ. Ihre Modbus-/OPC-UA-Daten befinden sich bereits in unserer in Frankreich gehosteten Zeitreihendatenbank. Sie greifen direkt über Ihren Browser auf die Dashboards zu, mit:

  • Vorkonfigurierten Dashboards für gängige Anwendungsfälle (Wasser, Energie, Produktion)
  • Verwalteten SMS-/E-Mail-Benachrichtigungen
  • 5-jähriger Datenhistorie ohne Konfiguration
  • Unterstützung für mehrere Standorte und Benutzer sowie Rechteverwaltung

Modus 2: Export in Ihr bestehendes Grafana

Wenn Sie bereits über ein internes Grafana verfügen:

  • Eziwan-REST-API: Rufen Sie Ihre Daten über GET /api/v1/variables/{id}/history ab
  • MQTT-Webhook: Eziwan veröffentlicht Ihre Daten auf Ihrem bestehenden MQTT-Broker
  • Eziwan-Grafana-Plugin (auf Anfrage erhältlich): Datenquellen-Plugin für die direkte Verbindung

FAQ – Grafana für die industrielle Überwachung

Kann Grafana ein SCADA-System im Produktivbetrieb ersetzen? Für die Visualisierung und Alarmierung ja, in vielen Fällen. Für die Echtzeitsteuerung (Schreiben an SPS, Steuerungssequenzen) wird weiterhin ein SCADA- oder ein dediziertes HMI-System empfohlen. Grafana zeichnet sich durch Protokollierung, Trendanalyse und standortübergreifendes Monitoring aus.

Welche Datenbank eignet sich zum Speichern von Industriedaten in Grafana? InfluxDB ist die Standardwahl für industrielle Zeitreihen (hohe Frequenz, native Komprimierung, leistungsstarke Flux-Abfragen). TimescaleDB (eine PostgreSQL-Erweiterung) eignet sich, wenn Sie bereits PostgreSQL einsetzen. Prometheus ist für Infrastrukturmetriken geeignet, für Prozessdaten jedoch weniger relevant.

Wie kann man den Zugriff auf Grafana über das Internet sichern? Grafana hinter einem Reverse-Proxy (Nginx/Traefik) mit TLS bereitstellen, die OIDC/LDAP-Authentifizierung aktivieren, den anonymen Zugriff deaktivieren und Warnmeldungen bei fehlgeschlagenen Anmeldeversuchen konfigurieren. InfluxDB niemals direkt im Internet verfügbar machen.

Kann Grafana 1.000 Standorte und 100.000 Variablen verwalten? Ja, mit der richtigen Architektur. InfluxDB 2.x unterstützt Milliarden von Datenpunkten. Grafana Enterprise unterstützt Clustering. Bei sehr großen Datenmengen sollten Sie Apache Kafka als vorgelagerte Lösung für das Streaming sowie differenzierte Aufbewahrungsrichtlinien in Betracht ziehen (1-Sekunden-Daten werden 30 Tage lang aufbewahrt, 1-Minuten-Daten 5 Jahre lang).

Kann ich in Grafana ein P&ID-Übersichtsdiagramm erstellen? Ja, mit dem Plugin Flowcharting (basierend auf draw.io). Sie zeichnen Ihr P&ID-Schema, verknüpfen Grafana-Variablen mit jedem Gerät, und die Werte werden in Echtzeit auf dem Übersichtsdiagramm angezeigt, wobei sich die Farbe je nach Status ändert.


Weiterführende Informationen


Möchten Sie Grafana-Dashboards nutzen, ohne sich um die Infrastruktur kümmern zu müssen? Testen Sie Eziwan 30 Tage lang kostenlos – Ihre Modbus-Daten in Grafana in weniger als einer Stunde.


Weitere Ressourcen