Skip to content

Envoyer des données dans InfluxDB

influxdb_banner

Je vous ai déjà parlé d’InfluxDB et Grafana qui permettent de réaliser une supervision orientée métriques en réalisant des graphs et dashboards afin de surveiller des serveurs.
Dans cet article, nous allons voir comment envoyer manuellement des données à InfluxDB afin de remonter n’importe quelle information qu’on souhaiterait monitorer.

Dans mon cas, j’ai réalisé un dashboard affichant les infos CPU/ Load / Ram et disques de mes serveurs importants. Il me manquait cependant une information importante, le nombre de VM démarrées dans mon cluster de machines virtuelles. Pour les métriques systèmes, j’utilise Telegraf qui permet de tout logguer dans InfluxDB facilement. Parcontre, pour mon nombre de VM UP, je vais devoir le faire à la main.dashboard_dom0

 

Pour cela, il a fallu que je me plonge dans le fonctionnement d’InfluxDB afin de pouvoir ajouter manuellement et périodiquement mes données (nombre de VM démarrées dans mon cas). Nous allons commencer par créer une base et l’utilisateur possédant tous les droits sur cette base.
Pour interagir avec InfluxDB, on peut passer par l’interface web (http://localhost:8083) ou par Influx, le client en ligne de commande, ce que nous allons faire.

$ influx
CREATE DATABASE vm
CREATE USER utilisateur WITH PASSWORD 'password'
GRANT ALL ON vm TO utilisateur

À partir de cette instant, on a une base fonctionnelle, avec un utilisateur prêt à l’utiliser.

Il a donc fallu construire une requête POST afin d’envoyer mes données (nombre de VM) au bon endroit. Voici tout d’abord la commande me permettant de savoir combien de VM sont démarrées (sous Ganeti) :

gnt-instance list |grep running |wc -l

A partir de maintenant, je récupère le nombre de VMs correctement et je dois l’envoyer dans InfluxDB.
Pour cela, il faut utiliser la commande cURL qui va bien que je vais détailler plus bas :

 curl -i -XPOST 
'http://localhost:8086/write?db=vm' 
--data-binary 'vms_up,host=cluster01 value=12'

Cette commande permet d’envoyer au serveur InfluxDB (localhost:8086) dans la base vm (write?db=vm) les données suivantes :
Le « Measurement » est vms_up c’est en gros, l’équivalent d’une table dans SQL.
Le « Tag Key » host contient le « Tag Value » cluster01, cela permet de différencier les données avec des tags.
La « Field Value » de cet enregistrement est 12, le nombre de VMs démarrées.

On lance plusieurs fois cette commande cURL puis on peut vérifier si les points arrivent bien dans InfluxDB (via Grafana) :

influxvmup1

Maintenant qu’on arrive à enregistrer dans InfluxDB, il y a plus qu’à automatiser cela avec un petit script :

#! /bin/bash

vm_up=`gnt-instance list |grep running |wc -l`
server=http://myInfluxDB:8086
db=VM
cluster=cluster01
$(curl -i -XPOST 'http://$server/write?db=$db' --data-binary 'vms_up,host=$cluster value=$vm_up')

Ce script, vous l’aurez compris, permet de récupérer le nombre de VM UP et de le logguer dans notre base InfluxDB (présente sur un autre serveur). Il sera bien qu’il soit lancé périodiquement, pour cela on va ajouter une entrée dans /etc/cron.d/ :

*/5 * * * * root /srv/scripts/log_vm_up.sh

Et voilà, toutes les 5 minutes mon script sera appelé et vérifiera le nombre de VM démarrées. J’ai plus qu’à l’intégrer dans mon dashboard :

vmup-influxdb

Pour conclure, nous avons vu comment inscrire des données dans InfluxDB afin de remonter le nombre de VM, cependant on peut utiliser cette technique pour remonter n’importe quelle information d’un serveur physique, virtuel ou n’importe quoi. Par exemple, en domotique, on pourrait remonter des informations électriques, la température, l’humidité (…) en vue de réaliser un dashboard pour votre maison (à tester !).

 

 

Published inDatabasesMonitoringTutorielVirtualisation

Be First to Comment

Laisser un commentaire

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

Proudly hosted with Open-sources Softwares.