InfluxDB et Grafana sur Raspberry Pi !
Après le dernier article sur Mosquitto et Node-RED, on va compléter la chaîne d’information avec la création d’une base de données sur InfluxDB et la présentation de ces données sur Grafana. Le tout sur Raspberry et disponible sur votre réseau local ! C’est parti ! Rappel de l’architecture Dans le dernier article concernant Mosquitto et […]
InfluxDB et Grafana sur Raspberry Pi !

Après le dernier article sur Mosquitto et Node-RED, on va compléter la chaîne d’information avec la création d’une base de données sur InfluxDB et la présentation de ces données sur Grafana. Le tout sur Raspberry et disponible sur votre réseau local ! C’est parti !

Rappel de l’architecture

Dans le dernier article concernant Mosquitto et Node-RED, je vous ai fait part de l’architecture que j’allais mettre en place pour mes futurs objets connectés. Voici un petit rappel de l’architecture :

Une architecture dont le centre névralgique est Mosquitto. L'architecture peut aisément être mise en place grâce à Node-RED.

Une architecture dont le centre névralgique est Mosquitto. L’architecture peut aisément être mise en place grâce à Node-RED.

Dans cette architecture, une base de données s’abonne à un ou plusieurs Topics du Broker MQTT (je vous invite à lire cet article, si vous ne voyez pas de quoi je parle). La base de données est Subscriber d’un ou plusieurs Topic. Donc, dès qu’une modification de ces Topics auront lieu, chacun de ces changements seront archivés en base de données.

InfluxDB et Grafana. Pourquoi ces choix ?

En effet, il existe tant de bases de données différentes et plusieurs manières différentes de représenter les données.

InfluxDB

Pour la base de données, j’ai choisi de passer par InfluxDB. Pourquoi ce choix ? Pour plusieurs raisons que voici :
– C’est une base de données intégrant le temps (des timestamp) pour chacun de ses enregistrements. On appelle ce type de base de données des Time Series Databases.
– La base est Open Source.
– Serveur de base de données la plus performante du marché selon DB-Engines.com pour ce qui est des Time Series Databases.
– Possibilité d’archivage de données numériques ET alphanumériques (String).
– Langage de requêtes semblable au langage SQL qui est un standard que je connais.
– Possibilités de scripting en .Net, Java, JavaScript, Node.js, PHP, Python et j’en passe !
Réplication des données possible sur plusieurs bases. Exemple : synchroniser la base de données locale avec une base de données dans le Cloud.
– Choix de la pérennité des données. On peut choisir les données que l’on veut garder et combien de temps. C’est un des points forts de InfluxDB, car cela permet de faire bien plus qu’il n’y paraît !
Librairie Node-RED existante.
Compatible Raspberry Pi et Raspbian.

Bien sûr, InfluxDB permet bien d’autre choses comme la gestion des droits, de différents utilisateurs… Je n’ai cité là que les caractéristiques dont je pourrais tirer avantage dans mes futurs projets.

Grafana

Pour l’analyse et la mise en forme des données sous formes de compteur, graphiques, jauges… J’ai choisi Grafana ! Pourquoi ?
– C’est un projet Open Source que je suis depuis un petit bout de temps.
– Représentation des données dans une belle interface Web. Du coup, compatible Windows, Mac, Android, IOS… Toutes les architectures supportant une interface Web HTML5 quoi :-).
– Proposé en installation locale avec toutes les options ou en version Cloud limité sur leurs serveurs. Des versions payantes enlèvent ces limitations sur leurs serveurs.
– Compatible avec plusieurs types de base de données, dont InfluxDB.
Flexibilité des requêtes à effectuer.
Compatible Raspberry Pi et Raspbian.
– Et surtout le + important ! Leur interface a vraiment de la gueule.

Et détrompez-vous, ce dernier point est hyper important. Je rappelle qu’on cherche à analyser des données. Il nous faut donc une interface nous permettant de présenter un nombre important de données de manière lisible. De plus, les graphes se doivent de posséder un niveau de détail élevé en cohérence avec nos données. Et en prime, le système doit pouvoir se mettre à jour très régulièrement afin de coller au plus proche de la réalité. Grafana réuni tous ces points dans une interface sobre, flexible et puissante. Un petit exemple de ce que Grafana peut faire ici : Statistiques des serveurs de Grafana.

Allez, c’est parti pour l’installation !

Installation et paramétrage sur Raspberry Pi

Ma configuration est une Raspberry Pi 3 avec Raspbian Stretch à jour du 20/11/2017. J’ai préalablement configuré la Raspberry Pi en point d’accès Wifi pour y connecter mes objets connectés. D’autre part, la RPI est connectée en Ethernet à mon réseau local (Box Internet, PC, smartphone, etc…). J’ai également installé, configuré et mis à jour Mosquitto et Node-RED. Ces étapes ne sont pas indispensables à ce qui va suivre. Comme d’habitude, un sudo apt-get update && apt-get upgrade ne fait pas de mal ! 🙂

InfluxDB

Pour installer InfluxDB sur Raspberry Pi avec Rasbian Stretch / Debian 9, il y a besoin d’une source apt-get supplémentaire :

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install apt-transport-https
sudo apt-get install curl
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt-get update
sudo apt-get install influxdb

InfluxDB est maintenant installé. Pour une configuration très rapide, on va ouvrir /etc/influxdb/influxdb.conf et activer le port HTTP sans authentification :

sudo nano /etc/influxdb/influxdb.conf

Pour cela, il suffit de dé-commenter les lignes suivantes :

[http]
# Determines whether HTTP endpoint is enabled.
enabled = true

# The bind address used by the HTTP service.
bind-address = ":8086"

# Determines whether user authentication is enabled over HTTP/HTTPS.
auth-enabled = false

Ensuite, on redémarre le service InfluxDB :

sudo service influxdb restart

Notre base de données est prête. 🙂

Intégration InfluxDB dans Node-RED

Si vous souhaitez connecter, tout comme moi, une base de données InfluxDB à un flux Node-RED, suivez ce qui suit. On va ajouter les librairies InfluxDB à Node-RED. Pour se faire, on va télécharger le paquet « npm » qui va nous permettre d’ajouter la librairie InfluxDB à Node-RED.

sudo apt-get install npm
cd ~/.node-red
npm install node-red-contrib-influxdb

Note : npm devra toujours s’exécuter dans ~/.node-red.

Ensuite, redémarrez Node-RED :

cd ~/.node-red
node-red-stop
node-red-start

La librairie InfluxDB dans Node-RED est installée ! 🙂

Nœuds InfluxDB dans Node-RED.

Nœuds InfluxDB dans Node-RED.

Grafana

Grafana a également besoin d’une soucre apt-get supplémentaire pour une installation sur Raspberry Pi sous Raspbian Stretch :

sudo apt-get install apt-transport-https curl
curl https://bintray.com/user/downloadSubjectPublicKey?username=bintray | sudo apt-key add -
echo "deb https://dl.bintray.com/fg2it/deb stretch main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana

Une fois installé, on va configurer Grafana en activant le protocole http et le port à utiliser pour l’interface Web de Grafana. Pour se faire, on va modifier /etc/grafana/grafana.ini :

sudo nano /etc/grafana/grafana.ini

Les modifications à effectuer :

[server]
# Protocol (http, https, socket)
protocol = http

# The ip address to bind to, empty will bind to all interfaces
;http_addr =

# The http port to use
http_port = 3000

Après avoir effectué ces modifications, on redémarre le service Grafana :

sudo service grafana-server restart

Maintenant, l’interface web de Grafana est accessible à l’adresse <IP de votre Raspberry Pi>:3000. Par défaut, le nom d’utilisateur est : admin. Le mot de passe est : admin.

Page Login de Grafana.

Page Login de Grafana.

Pour plus d’informations quant à la configuration de Grafana, leur documentation est très complète.

Premiers tests et première mise en forme graphique

InfluxDB est une base de données optimisée sur les requêtes datées. La base de données InfluxDB contient des « Measurements » (comprendre Mesures) munis de plusieurs « DataPoints » (comprendre Données). Par exemple, la Mesure « temperature » peut contenir les points de mesure de deux capteurs distincts « sensor1 » et « sensor2« . Dans InfluxDB, chaque point de mesure possède un nom de Mesure (ici « temperature« ), une date (il s’agit du timestamp) et une valeur. Afin d’avoir des dates compréhensibles, il faut lancer influx avec la commande -precision rfc3339 (norme d’écriture des dates au format Année-Mois-Jour H:min:sec).

influx -precision rfc3339
Connected to http://localhost:8086 version 1.3.7
InfluxDB shell version: 1.3.7
> use iotdb
Using database iotdb
> insert temperature sensor1=18.5
> insert temperature sensor1=24.2
> insert temperature sensor2=35.8
> insert temperature sensor2=45.5
> insert temperature sensor2=45.5
> select * from temperature
name: temperature
time sensor1 sensor2
---- ------- -------
2017-11-23T13:28:38.660322004Z 18.5
2017-11-23T13:28:52.10762729Z 24.2
2017-11-23T13:29:14.435734063Z 35.8
2017-11-23T13:29:31.330300118Z 45.5
2017-11-23T13:29:53.354943535Z 45.5

Maintenant, on va aller sur l’interface Web de Grafana pour afficher nos valeurs sur un graphique. La première chose à effectuer est d’ajouter une source de données. Ici on va ajouter les mesures « temperature » de la base de données iotdb de notre serveur local.

Si vous avez suivi toutes mes procédures, l'URL est http://<IP de votre RPI>:8086.

Si vous avez suivi toutes mes procédures, l’URL est http://IP-DE-VOTRE-RPI:8086.

Prêtez attention à la valeur « Min time interval« . Par défaut, cette valeur est à une minute. Il s’agit de l’intervalle de synchronisation de Grafana avec la base de données pour cette Mesure. C’est cette valeur qui va limiter le taux de rafraîchissement de vos données. Les graphiques ont aussi leur « Min time interval » qui corresponds à l’intervalle de mise à jour de l’affichage du graphique. A ne pas confondre donc !

Ajout d'un nouveau Dashboard dans Grafana.

On va ajouter un nouveau « Dashboard« . Il s’agit d’une page où l’on peut placer des widgets comme des graphiques, des indicateurs, etc… Je place un graphique dans la première ligne du Dashboard.

Ajout d'un nouveau graphique dans Grafana.

Une fois dans le mode « Edition« , dans l’onglet « Metrics« , on peut paramétrer nos requêtes à la source de données. De nombreuses options de personnalisation sont disponibles dans les différents onglets.

Requêtes InfluxDB pour afficher les données dans Grafana.

Pour récupérer nos données et différencier nos capteurs, on peut faire des requêtes de la forme suivante :
– FROM temperature SELECT sensor1 GROUP BY time($_interval) fill(linear) FORMAT AS Time series
FROM temperature SELECT sensor2 GROUP BY time($_interval) fill(linear) FORMAT AS Time series

Il n’y a pas à paniquer à ce niveau-là, Grafana vous propose les possibilités dans votre base de données pour chaque paramètre. Je pense que quelqu’un qui bidouille peut très bien s’en sortir même sans connaître le langage SQL. 🙂

Et voilà, on a mis en forme nos premières données !

Et voilà, on a mis en forme nos premières données !

Et voilà ! On peut maintenant enregistrer des données datées dans InfluxDB et les représenter grâce à Grafana. Et tout ça sur Raspberry Pi ! Et comme j’ai configuré Node-RED pour rediriger un message MQTT vers la base de données iotdb dans les mesures de « temperature« , je peux ajouter des données à la base via un publish sur le Topic Temp.

Flux de donnée avec une source MQTT.

Flux de donnée avec une source MQTT.

Maintenant que j’ai tout ce qu’il faut pour réaliser simplement des flux de données, je peux me relancer dans mon défi avec de nombreux objets connectés à venir ! Je vous donne RDV dans le prochain article qui concernera la partie 2 de l’anémomètre connecté ! En attendant, faites un petit tour sur la partie 1 !

Benoît Jellimann.

 

3 Commentaires

  1. francois

    Super tuto. J’arrive jusqu’à la fin sauf que je n’ai rien dans les graph sur grafana. Mon graph reste desesperement vide… newbie sur grafana
    influxdb/unknown,now 1.8.3-1 armhf [installed]
    grafana/stretch,now 5.1.4 armhf [installed]
    pi3

    Réponse
  2. Alf

    Super tutoriel (merci!) que j’ai suivi avec soin. Seulement voilà après 1 an d’utilisation, même si je ne stocke pas beaucoup de données, influx ne veut plus démarrer. En effet le lancement d’influxd fini par un « fatal error: runtime: cannot allocate memory ». Alors que la base totale ne fait qu’un giga. J’ose espérer que toute la base n’est pas chargé en RAM quand même ? Même en activant « TSI1 » au lieu de « INMEM » le problème persiste.
    J’imagine donc que pour un petit raspberry, le fichier de configuration doit être qq peu modifier non ? Des idées ?
    J’utilise un HDD externe pour éviter que la SD ne finisse par rendre l’âme ça n’a rien changé. J’ai pu redémarrer influx après avoir supprimer un répertoire correspondant à une table mais le problème revient au bout d’un moment.

    Réponse

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Pin It on Pinterest

Shares
Share This