- Alexis Métaireau
- Journal
- Code, etc.
- Notes hebdo
- Lectures
- Projets

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 :

1. moquitto.ndd.tld
2. 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