Le principe de données temporelles est le suivant, chaque entrée est un horodatage et une valeur, souvent numérique. Exemple :
Il existe de nombreuses solutions pour stocker ce genre de données dans une base. Cet article s'intéressera seulement à quelques unes :
Ces trois outils sont utilisables avec collectd qui permet de collecter des données systèmes et grafana qui permet de créer des tableaux de bord.
rrdtool est la solution la plus ancienne. L'outil crée des bases de données « tournantes ». On définit le nombre de points, la période entre chaque point et les vieilles données poussent les anciennes. Rrdtool permet de stocker la moyenne, le minimum et maximum en agrégeant les données. Garder un point toutes les 10 secondes sur un an nécessite 3139000 points, on a donc tendance à agréger.
Graphite supporte les fichiers rrdtool. Cela apporte l'API HTTP et la possibilité de créer des graphes simplement.
Graphite a été implémenté pour pallier des inconvénients de rrdtool.
Le premier inconvénient était l'impossibilité de gérer un cache pour écrire les données. Au moment de la création de graphite, rrdtool écrivait chaque donnée immédiatement ce qui nécessitait de nombreuses petites écritures sur le disque. graphite propose un système de cache pour faire les écritures plus eficaces. Depuis, rrdtool propose cette fonctionnalité avec rrdcached.
Graphite permet de mettre à jour d'anciennes données ce que ne permet pas rrdtool. Je ne trouve pas cette fonctionnalité indispensable.
Graphite se compose d'une une application en Python Django qui gère les tableaux de bord et l'API et d'un moteur qui écrit et lit les données : carbon. Il existe une implémentation de carbon en langage go. Le projet annonce des performances nettement supérieures.
Influxdb est le dernier arrivé. Il est écrit en go, langage réputé pour sa rapidité et très en vogue pour les outils système. Le développement est très (trop) dynamique.
Personnellement, le point 1 m'a fait préférer Graphite et le 3 pose question.
En terme de performance, Influxdb semble bien meilleur mais tout le monde n'a pas des dizaines de milliers de données à stocker. Pouvoir lui envoyer des données via plusieurs protocoles est un gros avantage en cas de migration.
En terme d'usage, Graphite et son API sont vraiment pratiques mais les performances sur Rapsberry Pi semblent limitées même avec peu de données.
Pour le moment, j'utilise collectd + graphite + grafana. J'ai testé influxdb mais j'ai trouvé que la peinture était encore un peu fraiche, ça manque de finition.