Récemment, on a m’a demandé un petit coup de main pour aider à l’installation d’une pile logicielle qui permet de stocker des données temporelles et en faire des graphiques.
Voici donc quelques notes prises durant l’installation du système, concues pour que des personnes qui n’y connaissent pas grand chose puissent s’y retrouver.
L’objectif, c’est d’avoir des cartes Arduino qui envoient des données de manière régulière sur un système qui va nous permettre de les stocker et d’en faire des graphiques.
Pour ça, nous allons utiliser :
- Un Broker Mosquitto qui va permettre de receptionner les données depuis les différents clients, puis de les dispatcher à qui en a besoin ;
- Une base de données InfluxDB, qui permet de stocker des données temporelles ;
- Un agent Telegraf qui va prendre les données du broker et les stocker dans la base de données InfluxDB.
- Grafana, une application web qui permet de visualiser les données stockées dans InfluxDB.
Voici donc un document qui résume les étapes que j’ai suivies pour mettre en place les différents élements utiles :
Installer et se connecter au serveur
Dans notre cas, on est passé par un VPS chez OVH, qui tourne sous Debian 11, qui a le mérite d’être une distribution Linux stable, reconnue et (relativement) simple à utiliser.
Dans un terminal, vous pouvez vous connecter en utilisant la ligne de commande suivante :
Les lignes suivantes sont des lignes d’invite de commande, on les rencontre assez souvent dans les documentations sur le web. Le signe $
signifie le début de la ligne de commande. Le signe #
signifie le début des commentaires.
$ ssh utilisateur@adresseip
Une fois connecté, on va mettre à jour les logiciels qui sont présents sur le serveur.
$ sudo apt update # mise à jour des dépôts (la liste des logiciels).
$ sudo apt upgrade # mise à jour des logiciels.
Configurer les DNS
Nous allons avoir besoin de deux sous domaines qui redirigent vers le serveur. Bien sur, il faut adapter ndd.tld
et le remplacer par votre nom de domaine :
- moquitto.ndd.tld
- graphs.ndd.tld
Pour faire ça, chez OVH ça se passe dans la console de « OVH Cloud », direction « Noms de domaines », et puis il faut rajouter deux enregistrements de type « A » qui pointent vers l’adresse IP du serveur.
En temps normal, l’adresse IP vous est fournie par OVH. Si vous avez un doute, vous pouvez l’obtenir depuis le serveur avec la commande ip a
.
Installer Mosquitto
$ sudo apt install mosquitto # installation depuis les dépots officiels
Une fois installé, il faut sécuriser l’installation avec un utilisateur et un mot de passe.
$ sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
Ensuite dans le fichier de configuration il faut spécifier où est le fichier qui contient les mots de passe. Pour éditer je recommande l’utilisation de l’éditeur de texte nano
.
$ sudo nano /etc/mosquitto/mosquitto.conf
Voici les lignes à rajouter :
listener 1883
password_file /etc/mosquitto/passwd
Puis il faut relancer le service mosquitto :
$ sudo systemctl restart mosquitto
Avant de pouvoir utiliser mosquitto, il faut régler le firewall de chez OVH pour qu’il accepte de laisser passer les messages pour le broker MQTT.
Il faut ajouter une règle dans le Firewall qui laisse passer toutes les connections TCP, avec l’option « établie ».
Vérifions que tout fonctionne comme prévu :
Dans une console, écoutons…
$ mosquitto_sub -h mosquitto.ndd.tld -p 1883 -u <username> -P <password> -t topic
Et dans une autre envoyons un message :
$ mosquitto_pub -h mosquitto.ndd.tld -p 1883 -u <username> -P <password> -t topic -m 30
Vous deviez voir « 30 » apparaitre dans la première console. Si c’est bon, tout fonctionne !
Installation d’InfluxDB et Telegraf
Coup de bol, InfluxDB propose directement des packets pour Debian, sur leur dépot, qu’il faut donc ajouter en suivant ces quelques lignes :
sudo apt install -y gnupg2 curl wget
wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt update
Puis sudo apt install influxdb telegraf
pour l’installer.
Ensuite, vous pouvez le lancer maintenant et indiquer au système de le lancer tout seul au démarrage :
$ sudo systemctl enable --now influxdb
$ sudo systemctl enable --now telegraf
Configuration de Telegraf
Telegraf permet de faire le lien entre les messages envoyés sur le broker MQTT et la base de données InfluxDB.
Ici, il faut rentrer un peu plus dans le vif du sujet, et ça dépends des messages que vous avez à stocker.
Dans notre cas, nous avons trois types de messages :
- /BatVoltage, int
- /Temperature, int
- /GPS, string
Voici un fichier de configuration, qui reste à modifier en fonction des données.
[global_tags]
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = "0s"
hostname = ""
omit_hostname = false
[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086"]
database = "telegraf"
[[inputs.mqtt_consumer]]
servers = ["tcp://127.0.0.1:1883"]
name_override = "mqtt_consumer_float"
topics = [
"Topic/BatVoltage",
"Topic/Temperature",
]
username = "<username>"
password = "<password>"
data_format = "value"
data_type = "integer"
Installation de Grafana
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
sudo wget -q -O /usr/share/keyrings/grafana.key https://packages.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt-get install grafana
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable grafana-server
sudo /bin/systemctl start grafana-server
Nginx
sudo apt install nginx certbot python3-certbot-nginx
Puis il faut créer un fichier de configuration dans /etc/nginx/sites-enabled/graphs.ndd.tld
avec le contenu suivant :
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream grafana {
server localhost:3000;
}
server {
listen 80;
server_name graphs.ndd.tld;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
proxy_set_header Host $http_host;
proxy_pass http://grafana;
}
# Proxy Grafana Live WebSocket connections.
location /api/live/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_pass http://grafana;
}
}
Une fois ces fichiers de configuration en place, il faut penser à la mise en place du SSL qui permet d’avoir une connexion sécurisée (https).
Il suffit de lancer cette ligne de commande et de suivre les questions posées :
sudo certbot --nginx
Voilà ! A ce moment là, tout doit être fonctionnel, il ne reste plus qu’à configurer le Grafana pour grapher les données enregistrées dans InfluxDB.
#Administration Système - Posté dans la catégorie code