Grafana pour la supervision industrielle IoT : dashboard Modbus, alertes, historique
Grafana est devenu l'outil de référence pour la visualisation de données industrielles. Gratuit, open-source, et extensible, il transforme vos données Modbus, OPC-UA ou MQTT en tableaux de bord opérationnels. Ce guide vous montre comment architecturer une supervision industrielle complète avec Grafana — ou comment Eziwan vous l'offre clé en main.
- Pourquoi Grafana pour la supervision industrielle ?
- Architecture : de Modbus à Grafana
- Installer Grafana + InfluxDB avec Docker
- Créer votre premier dashboard industriel
- Configurer les alertes Grafana
- Templates et variables Grafana pour multi-sites
- Dashboards préconfigurés Grafana pour l'industrie
- Intégration Eziwan → Grafana
- FAQ — Grafana supervision industrielle
- Pour aller plus loin
- Ressources complémentaires
Pourquoi Grafana pour la supervision industrielle ?
Grafana s'est imposé dans l'industrie pour plusieurs raisons :
- Connectors universels : InfluxDB, TimescaleDB, PostgreSQL, Prometheus, MQTT, REST API — une source de données pour chaque stack
- Panels riches : time series, gauge, stat, table, heatmap, flow chart (avec plugins)
- Alertes intégrées : notification SMS, email, Slack, PagerDuty, webhook
- Gestion des accès : équipes, dossiers, permissions par dashboard
- Plugins industriels : P&ID (Flowcharting), piping diagrams, schémas synoptiques
Comparé à un SCADA traditionnel :
| Grafana (+ stack IoT) | SCADA Wonderware/Ignition | |
|---|---|---|
| Coût licence | 0 (open source) | 5 000–50 000€ |
| Coût hébergement | 50–200€/mois (cloud) | Serveur dédié + maintenance |
| Variables illimitées | ✅ | ❌ (facturation par tag) |
| Interface web native | ✅ | ✅ (Ignition) / ❌ (Wonderware) |
| Mobile ready | ✅ | Partiel |
| Intégration cloud | Natif | Complexe |
Architecture : de Modbus à Grafana
La stack complète pour superviser des automates Modbus dans Grafana :
Alternative pour volumes importants :
Solution Eziwan (tout-en-un) :
Eziwan intègre la stack complète (collecte Modbus/OPC-UA, cloud time series, dashboards Grafana préconfigurés, alertes SMS/email) sans que vous ayez à installer et maintenir les composants individuellement.
Installer Grafana + InfluxDB avec Docker
# 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:
Configuration Telegraf pour MQTT
# telegraf.conf
[[inputs.mqtt_consumer]]
servers = ["tcp://localhost:1883"]
topics = ["usine/#"]
qos = 1
data_format = "json"
# Parsing du topic MQTT : usine/site/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"
Créer votre premier dashboard industriel
Panel 1 : Graphe de tendance (Time Series)
Pour afficher l'évolution de la pression d'une station dans le temps :
Query InfluxDB (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")
Paramètres panel :
- Type :
Time series - Y-axis unit :
bar(Pressure) - Line width : 2
- Fill opacity : 10
- Thresholds : vert < 8 bar, orange 8-10 bar, rouge > 10 bar
Panel 2 : Gauge (Valeur instantanée)
Pour afficher la valeur courante d'une variable :
Query InfluxDB :
from(bucket: "industrie")
|> range(start: -1m)
|> filter(fn: (r) => r["station"] == "station1" and r["_field"] == "pression")
|> last()
Paramètres panel :
- Type :
Gauge - Min : 0, Max : 16
- Unit :
bar - Thresholds : 0=green, 10=orange, 12=red
Panel 3 : Stat (KPI)
Pour afficher le TRS ou un compteur de production :
Query InfluxDB :
from(bucket: "industrie")
|> range(start: -24h)
|> filter(fn: (r) => r["_field"] == "pieces_produites")
|> sum()
Paramètres panel :
- Type :
Stat - Unit :
pcs(custom) - Color mode :
Background(rouge si < objectif)
Panel 4 : Table multi-sites
Pour afficher l'état de tous vos sites en temps réel :
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")
Résultat : tableau avec colonnes Station / Pression / Débit / État, une ligne par site.
Configurer les alertes Grafana
Alerte sur seuil dépassé
Dans Grafana 10+ (Unified Alerting) :
- Ouvrir le panel →
Edit → Alert - Créer une règle :
Condition: WHEN last() OF query(A, 5m, now) IS ABOVE 10
- Configurer la notification :
- Contact Point : Email →
maintenance@usine.fr - Contact Point : Webhook → SMS via Twilio/OVH SMS
- Contact Point : Email →
- Silence automatique : 15 minutes après acquittement
Alert grouping pour multi-sites
Pour éviter les "alert storms" quand plusieurs sites tombent simultanément :
# 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'
Annotation sur événements
Ajouter des annotations automatiques sur les graphes lors d'alarmes :
// Créer une annotation InfluxDB lors d'un défaut
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}"}))
Templates et variables Grafana pour multi-sites
Les Template Variables permettent de créer un dashboard générique réutilisable pour tous vos sites.
Créer une variable "site"
Dashboard Settings → Variables → New Variable :
- Name :
site - Type :
Query - Data Source : InfluxDB
- Query :
import "influxdata/influxdb/schema"schema.tagValues(bucket: "industrie", tag: "station")
Utiliser la variable dans les panels
from(bucket: "industrie")
|> range(start: v.timeRangeStart)
|> filter(fn: (r) => r["station"] == "${site}")
|> filter(fn: (r) => r["_field"] == "pression")
L'opérateur peut maintenant choisir le site dans un menu déroulant en haut du dashboard.
Dashboards préconfigurés Grafana pour l'industrie
Dashboard Supervision Station de Pompage
┌─────────────────────────────────────────────────────────────────┐
│ Station : [dropdown] │ Période : [6h|24h|7j|30j] │
├──────────────┬──────────────┬──────────────┬────────────────────┤
│ Pression │ Débit │ Niveau │ État Pompe │
│ [gauge] │ [gauge] │ [gauge] │ [stat 🟢/🔴] │
├──────────────┴──────────────┴──────────────┴────────────────────┤
│ Tendances 24h : Pression / Débit / Niveau │
│ [time series graph] │
├─────────────────────────────────────────────────────────────────┤
│ Alarmes actives │ Dernières interventions │
│ [table] │ [table annotations] │
└─────────────────────────────────────────────────────────────────┘
Dashboard Production Multi-Sites
┌────────────────────────────────────────────────────────────────────┐
│ 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 │ │
├──────────┴──────────┴──────────┴──────────┴──────────┴────────────┤
│ Production cumulée 24h : objectif vs réel [bar chart] │
└────────────────────────────────────────────────────────────────────┘
Intégration Eziwan → Grafana
Eziwan propose deux modes d'intégration avec Grafana :
Mode 1 : Grafana hébergé dans Eziwan (recommandé)
La plateforme Eziwan intègre Grafana nativement. Vos données Modbus/OPC-UA sont déjà dans notre time series database hébergée en France. Vous accédez directement aux dashboards depuis votre navigateur, avec :
- Dashboards pré-configurés pour les cas d'usage courants (eau, énergie, production)
- Alertes SMS/email gérées
- Historisation 5 ans sans configuration
- Multi-sites, multi-utilisateurs, gestion des droits
Mode 2 : Export vers votre Grafana existant
Si vous avez déjà un Grafana interne :
- API REST Eziwan : interrogez vos données via
GET /api/v1/variables/{id}/history - Webhook MQTT : Eziwan publie vos données sur votre broker MQTT existant
- Plugin Grafana Eziwan (disponible sur demande) : datasource plugin pour connexion directe
FAQ — Grafana supervision industrielle
Grafana peut-il remplacer un SCADA en production ? Pour la visualisation et les alertes, oui dans beaucoup de cas. Pour le contrôle en temps réel (écriture sur automate, séquences de commande), un SCADA ou un système HMI dédié reste recommandé. Grafana excelle en historisation, analyse de tendances et monitoring multi-sites.
Quelle base de données pour stocker des données industrielles dans Grafana ? InfluxDB est le choix standard pour les time series industrielles (haute fréquence, compression native, requêtes Flux puissantes). TimescaleDB (extension PostgreSQL) convient si vous avez déjà PostgreSQL. Prometheus est adapté aux métriques infrastructure mais moins pertinent pour les données process.
Comment sécuriser l'accès à Grafana depuis Internet ? Mettre Grafana derrière un reverse proxy (Nginx/Traefik) avec TLS, activer l'authentification OIDC/LDAP, désactiver l'accès anonyme, configurer des alertes sur tentatives de connexion échouées. Ne jamais exposer InfluxDB directement sur Internet.
Grafana peut-il gérer 1 000 sites et 100 000 variables ? Oui avec la bonne architecture. InfluxDB 2.x supporte des milliards de points. Grafana Enterprise gère le clustering. Pour des volumes très importants, envisager Apache Kafka en amont pour le streaming, et des politiques de rétention différenciées (données 1s gardées 30j, données 1min gardées 5 ans).
Puis-je avoir un synoptique P&ID dans Grafana ? Oui avec le plugin Flowcharting (basé sur draw.io). Vous dessinez votre schéma P&ID, attachez des variables Grafana à chaque équipement, et les valeurs s'affichent en temps réel sur le synoptique avec changement de couleur selon l'état.
Pour aller plus loin
- Blog : maintenance prédictive IIoT — de la donnée capteur à l'alerte terrain
- Blog : supervision industrielle à distance — guide complet 2026
- Blog : Modbus TCP vs RTU — quel protocole choisir ?
- Blog : parc photovoltaïque — supervision et monitoring IoT
- Docs : configuration Modbus RTU sur Gateway Eziwan
Envie de dashboards Grafana sans gérer l'infrastructure ? Testez Eziwan gratuitement 30 jours — vos données Modbus dans Grafana en moins d'une heure.
Ressources complémentaires
- Modbus RTU vers le cloud — connecter vos équipements RS-485 Modbus RTU au cloud
- Data logger industriel cloud — historisation de vos données Modbus dans le cloud
- SCADA cloud — plateforme SCADA cloud avec dashboards intégrés
- Protocoles industriels — comprendre Modbus, MQTT, OPC UA et autres protocoles
- Supervision et téléassistance industrielle — supervision multi-sites de vos équipements Modbus