Influxdb: le métrologie facile

la métrologie consiste à prélever de façon régulière dans le temps une information. L’enjeux cruciale est d’avoir :

  • une base de donnée qui puisse traiter de gros volume de donnée, donnée qui reste simple (clé/valeur par temps)
  • un outil de visualisation

Il existe pour cela un module nommé influxdb sponsorisé par google.

Installation de influxdb

Warning

il n’existe pas de code compiler pour windows

Pour une machine en 64-bit

# for 64-bit systems
wget http://s3.amazonaws.com/influxdb/influxdb_latest_amd64.deb
dpkg -i influxdb_latest_amd64.deb

Pour une machine en 32-bit

# for 32-bit systems
wget http://s3.amazonaws.com/influxdb/influxdb_latest_i386.deb
dpkg -i influxdb_latest_i386.deb

Puis on démarre le service

/etc/init.d/influxdb start

On peut maintenant ce rendre sur l’interface web http://127.0.0.1:8083/ afin de créer, d’administrer notre nouvelle base de donnée métrique

Note

par défaut le login est root et le password root

HTTP API fonctionne sur le port 8086.

Api Python influxdb-python

Ce module permet notament d’intégrer des valeurs dans notre base influxdb

apt-get install python-pip
pip install influxdb

exemple d’utilisation

from influxdb import client as influxdb
import time
import math
db = influxdb.InfluxDBClient(host='127.0.0.1',
                                port=8086,
                                username='root',
                                password='root',
                                database='test')
i = 0
while True:
    data = [
      {"points":[[math.cos(math.radians(i)),math.sin(math.radians(i))]],
       "name":"math",
       "columns":["cos", "sin"]
      }
    ]
    db.write_points(data)
    i =  i +1
    print(i)
    time.sleep(1)

avec ce programme nous créons la table math contenant par unités de temps 2 informations:

  • cos
  • sin

Comme on peut le voir on intègre pas la notion de temps, elle correspond par défaut au moment de l’écriture.

Dans l’interface graphique on peut visualier les résultats ainsi

select * from math
select sin from math

avec un regroupement et une notion de moyenne

select mean(sin) from math
group by time(30s) where time > now() - 1d
_images/influxdb.png

Utilisation de Grafana

Grafana est un outil web qui permet simplement de visualiser les données métriques

l’installation est assez simple

apt-get install apache2
wget http://grafanarel.s3.amazonaws.com/grafana-1.9.1-rc1.tar.gz
tar xzvf grafana-1.9.1-rc1.tar.gz
mv grafana-1.9.1-rc1 grafana
cd grafana
mv config.sample.js config.js

placer dans votre fichier config.js

datasources: {
    influxdb: {
      type: 'influxdb',
      url: "http://192.168.65.133:8086/db/test",
      username: 'root',
      password: 'root',
    },
    grafana: {
      type: 'influxdb',
      url: "http://192.168.65.133:8086/db/grafana",
      username: 'root',
      password: 'root',
      grafanaDB: true
    },
  },

Note

dans notre cas notre base s’appelle test

Warning

par défaut la zone de configuration des sources est commentée

Vous pouvez maintenant aller sur http://127.0.0.1/graphana pour utiliser l’outil et générer un magnifique tableau de bord

_images/grafana.png