Installer InfluxDB sur Raspberry Pi, Windows, macOS. Découverte du Shell. Créer une base de données, rétention [Màj] • Domotique et objets connectés à faire soi-même

InfluxDB est une base de données Open Source pour séries temporelles développée par la société InfluxData qui fonctionne sur Windows 64-bits, macOS ou sur la distribution Raspbian du Raspberry Pi. Dans ce tutoriel nous allons apprendre comment installer InfluxDB sur ces trois systèmes. InfluxDB est optimisée pour enregistrer des événements ou des métriques. Initialement développée pour surveiller l’activité des serveurs, elle est très bien adaptée à l’enregistrement d’événements ou de mesures provenant d’objets connectés. InfluxDB est utilisée dans l’industrie (IBM, ebay, Cisco, Citrix…) ou des centres de recherche. Le CERN de Genève utilise par exemple InfluxDB pour enregistrer les données produites durant les expériences sur le LHC. C’est une excellente solution combinée à Node-RED pour enregistrer les mesures de vos objets connectés et tracer des graphiques fantastiques avec Grafana.

Il est également possible de l’installer InfluxDB sur la plupart des distributions Linux. InfluxDB est disponible pour Windows 64 bits uniquement. Si vous avez une version 32 bits, il faudra installer Docker (docker pull influxdb )ou utiliser une machine virtuelle. Pour les distributions Linux Debian ou Ubuntu 16.x, lisez ce tutoriel spécifique.

Avantages d’InfluxDB pour les projets d’objets connectés

Les bases de données traditionnelles (MariaDB, MySQL par exemple) sont conçues pour stoker et mettre en relation les données en elles. Elles sont très bien adaptées pour gérer les comptes client et enregistrer les commandes d’un site marchand. Rien n’interdit l’enregistrement de données qui dépendent du temps mais dans ce cas il faudra effacer manuellement les données périmées. D’autres architectures de bases de données ont été imaginées. InfluxDB répond à trois objectifs :

  • Simplifier la configuration et la gestion
  • Moteur d’enregistrement et d’accès aux données qui dépendent du temps (horodatage)
  • Créer des règles de rétention et de suppression automatique de données périmées

Installer InfluxDB sur Raspbian Stretch pour Raspberry Pi

Avant de pouvoir installer InfluxDB sur Raspbian, il est nécessaire d’indiquer au système ou se trouvent les clés du dépôts du projet InfluxDB

curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -

Il existe deux versions d’InfluxDB. La première est adaptée à Debian 8.0 ou supérieur (Raspbian Jessie ou Stretch), l’autre pour Debian 7.0 (Raspbian Wheezy)

Pour connaître la version de votre système, exécutez la commande lsb_release -a

pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 9.1 (stretch)
Release:        9.1
Codename:       stretch

Je vous conseille de mettre à jour votre système (upgrade) afin de disposer des dernières versions en exécutant ces deux commandes

sudo apt-get update && apt-get upgrade

Ensuite exécutez ces commandes qui vont ajouter le paquet apt-transport-https, ajouter le lien vers la source d’InfluxDB, mettre à jour le système et enfin installer InfluxDB.

sudo apt install apt-transport-https
echo "deb https://repos.influxdata.com/debian jessie stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt-get update
sudo apt-get install influxdb

InfluxDB est maintenant installé. InfluxDB est déjà pré-configuré. Si vous voulez pouvoir enregistrer des données depuis un objet connecté à l’aide d’une requête HTTP ou depuis Node-RED on va devoir autoriser les connexions depuis le port HTTP. POur cela, il suffit de modifier le fichier de configuration qui se trouve dans le répertoire /etc/influxdb/influxdb.conf

sudo nano /etc/influxdb/influxdb.conf

On dé-commente 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

Enregistrez avec CTRL + X + O puis on redémarre le service InfluxDB

sudo service influxdb restart

Le Raspberry Pi utilise une carte SD pour faire fonctionner le système et stocker les données. Il est impératif d’acheter une carte SD adaptée à l’enregistrement intensif de données. Ce sont la plupart du temps des cartes SD adaptées pour les camescopes ou les appareils photos numériques. N’hésitez pas à dépenser quelques euros supplémentaires dans une carte rapide de grande marque. Optez pour une carte SDXC II au minimum. Vous trouverez plus d’info dans cet article.

Voir toutes les promos

Installer InfluxDB sur Windows 64-bits

Il faut un peu chercher sur le site d’InfluxData, mais il existe bien une version pour Windows. Elle n’est disponible que pour Windows 64 bits.

Vous pouvez l’installer en téléchargeant depuis cette page ou en installant wget pour Windows. Dans ce cas, exécutez la commande suivante

wget https://dl.influxdata.com/influxdb/releases/influxdb-1.1.0_linux_amd64.tar.gz
tar xvfz influxdb-1.1.0_linux_amd64.tar.gz

N’ayant pas de Windows 64 bits à ma disposition, je n’ai pas testé sur cet environnement.

Installer InfluxDB sur macOS

InfluxDB s’installe sur macOS à l’aide de Brew. Brew est un gestionnaire de paquets pour Mac (page officielle du projet).

Ouvrez un Terminal et collez cette commande

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Répondez aux questions pour terminer l’installation de Brew sur votre Mac.

Maintenant, on peut installer InfluxDB en exécutant ces commandes

brew update
brew install influxdb

Pour démarrer influxDB au démarrage, exécutez cette commande

ln -sfv /usr/local/opt/influxdb/*.plist ~/Library/LaunchAgents

Maintenant, pour démarrer InfluxDB, exécutez cette commande (acceptez la demande de connexions entrantes dans la fenêtre qui apparait)

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.influxdb.plist

Ou pour démarrer manuellement dans un Terminal

influxd -config /usr/local/etc/influxdb.conf

Tester si InfluxDB fonctionne

Une fois l’installation terminée, on va vérifier que tout fonctionne correctement. InfluxDB expose une API avec laquelle on peut facilement vérifier son bon état de fonctionnement. Voici ce que vous devriez recevoir en retour de cette commande curl

$ curl -sl -I localhost:8086/ping
HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: 165b0fa4-ad88-11e6-8a6f-000000000000
X-Influxdb-Version: v1.1.0
Date: Fri, 18 Nov 2016 12:11:08 GMT

InfluxDB est correctement démarré

Terminologie, différences avec une base SQL classique

Comme toutes les base de données non relationnelles, InfluxDB dispose de son propre vocabulaire qu’il convient de connaître avant de se lancer.

  • Measurement est équivalent à une table SQL
  • Tags est similaire à une colonne indexée (column) dans une base SQL
  • Fields est similaire aux colonnes non indexées dans une base SQL
  • Points est équivalent à une ligne (row)dans une base SQL

Méthodes de gestion des bases de données

Il existe 6 méthodes de gestion de base de données (CREATE DATABASE, DROP DATABASE, DROP SERIES, DELETE, DROP MEASUREMENT, DROP SHARD). Voici comment fonctionnent les 2 premières, pour les autres, tout se trouve ici.

Créer une base de données (create database)

Syntaxe

CREATE DATABASE "database_name" [WITH [DURATION "duration"] [REPLICATION] [SHARD DURATION "shard_duration"] [NAME "retention-policy-name"]]

Paramètres de base

  • database_name : nom de la base de données
  • duration : on peut indiquer une durée de rétention (conservation) des données mais il est plus judicieux de mettre en place une politique de rétention (voir paragraphe suivant)

Exemple

CREATE DATABASE "temperatures"

Effacer une base de données (drop database)

Syntaxe

DROP DATABASE "database_name"

On indique juste le nom de la base (database_name) à supprimer.

Mettre en place une politique de rétention

InfluxDB intègre un système de suppression automatique de données, c’est la Politique de Rétention (Retention Policy). Passé un certain temps, les données sont automatiquement supprimées de la base. Ce mécanisme est très pratique car on a une bonne maitrise de la taille de la base et on a pas à se soucier de cette opération de maintenance. Libre à chacun de définir la durée de vie de telle ou telle mesure. Si on veut suivre la température de son microprocesseur, une durée d’un moins peut être suffisante, au contraire la politique de rétention devra être plus souple si on veut pouvoir comparer la température dans une maison d’une année sur l’autre. Il faudra aussi penser au système en amont, inutile de stocker une mesure de température d’ambiance toute les 10 secondes ! Une mesure par minute, voir 15 minutes, c’est largement suffisant. Au contraire dans un process industriel, on voudra certainement aller chercher la seconde…ou beaucoup moins.

On dispose donc de 3 méthodes

  • Create : pour créer un règle de conservation des données
  • Alter : pour modifier une règle
  • Drop : pour supprimer une règle

Créer un politique de rétention (create retention policy)

Syntaxe

CREATE RETENTION POLICY "nom_politique_retention" ON "nom_database" DURATION "duree"REPLICATION [SHARD DURATION "duree_shard"] [DEFAULT]

Paramètres

  • nom_politique_retention : un nom court sans espaces de préférence
  • nom_database : la base de données sur laquelle s’applique la politique de rétention
  • duree : durée de conservation des données.  C’est une expression littérale qui doit respecter la convention InfluxDB (ici). Par exemple si on veut conserver les données 30 jours, on indiquera 30d. Si on veut garder sans limitation de temps, on indique INF (infini).
  • duree_shard : la durée de stockage des données dans la zone tampon. Ici pour plus d’infos.
  • n : nombre de réplication (obligatoire), mettre 1 si aucun cluster installé

Exemple

CREATE RETENTION POLICY "one_day_only" ON "NOAA_water_database" DURATION 1d REPLICATION 1

Cette politique permet de conserver les enregistrements durant un jour (one_day_only) sur la base NOAA_water_database. Les données sont stockées dans l’espace shard 1 jour. Replication 1 indique qu’une copie de chaque élément est recopié dans le cluster (il faut qu’il cluster existe).

Modifier une politique de rétention (alter retention policy)

Cette méthode permet de modifier une politique de rétention existante.

Syntaxe

ALTER RETENTION POLICY "nom_politique_retention" ON "nom_database" DURATION "duree" REPLICATION SHARD DURATION "duree_shard" DEFAULT

 Paramètres

  • nom_politique_retention : le nom de la politique à modifier
  • nom_database : base de donnée sur laquelle elle s’applique
  • duree, duree_shard : voir ci-dessus
  • n : nombre de réplication (obligatoire), mettre 1 si aucun cluster installé

Exemple

ALTER RETENTION POLICY "what_is_time" ON "NOAA_water_database" DURATION 3w SHARD DURATION 30m DEFAULT

La méthode retourne un résultat vide.

Détruite une politique de rétention (drop retention policy)

Syntaxe

DROP RETENTION POLICY "nom_polique_retention" ON "nom_database"

 Paramètres

  • nom_politique_retention : le nom de la politique à modifier
  • nom_database : base de donnée sur laquelle elle s’applique

Le shell InfluxDB

Maintenant que nous connaissons quelques méthodes, nous allons pourvoir faire quelques tests. Tout comme MongoDB, InfluxDB dispose de son propre shell de commande qui permet de réaliser toutes les opérations sur les bases de données. Pour le lancer, rien de bien compliqué, il suffit de saisir influx dans le Terminal.

$ influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version v1.1.0
InfluxDB shell version: v1.1.0

La commande exit permet de sortir du shell.

Commençons par créer une base de données

CREATE DATABASE basetest
 SHOW DATABASES
name: databases
name
----
_internal
basetest

Ajoutons un utilisateur projetsdiy pour cette base de données

CREATE USER projetsdiy WITH PASSWORD 'motdepasse!'

Et maintenant, on lui donne tous les droits sur la base basetest.

GRANT ALL ON basetest TO projetsdiy

Maintenant on ajoute une politique de rétention de 30 jours

CREATE RETENTION POLICY "trente_jours" ON basetest DURATION 30d REPLICATION 1 DEFAULT

Vérifions la politique de rétention

SHOW RETENTION POLICIES ON basetest
name            duration        shardGroupDuration      replicaN        default
----            --------        ------------------      --------        -------
autogen         0s              168h0m0s                1               false
trente_jours    720h0m0s        24h0m0s                 1               true

Voilà, c’est terminé pour ce premier article de présentation sur InfluxDB. Il reste encore beaucoup à découvrir mais c’est largement suffisant pour la prendre en main et commencer à travailler avec. Vous êtes prêt à vous lancer, alors rendez-vous au prochain tutoriel pour apprendre comment stocker les mesures d’une sonde de température 433MHz développée avec un Arduino et la librairie MySensors. Les données sont collectées et envoyés vers une base InfluxDB avec Node-RED.

Mise à jour

[6 juin 2018] Comment installer InfluxDB sur Raspbian Stretch pour Raspberry Pi.

Avez-vous aimé cet article ?

[Total: 0 Moyenne: 0]