'

Outils pour utilisateurs

Outils du site


blog:les_bases_de_donnees_temporelles

Les bases de données temporelles

Le principe de données temporelles est le suivant, chaque entrée est un horodatage et une valeur, souvent numérique. Exemple :

  • 1455475000 : 12
  • 1455475600 : 40
  • 1455476200 : 49

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

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.

Les avantages

  • robuste, stable, éprouvé
  • rapide : implémentation en C

Les inconvénients

  • les fichiers de base de données ne sont pas portables : un fichier créé sur une machine 32 bits ne fonctionne pas sur 64 bits et inversement
  • Impossible de mettre à jour d'ancienne données : si on entre un valeur pour le 14 février 2015 à 20h00, on ne peut plus entrer aucune valeur avant cette date
  • Le protocole client serveur pour mettre à jour ou interroger les données n'est pas très utilisé
  • Pas d'API HTTP native pour interroger les données
  • Pas d'outil web natif pour faire des graphes. Il existe de trop nombreuses solutions, pas toujours simples

Graphite supporte les fichiers rrdtool. Cela apporte l'API HTTP et la possibilité de créer des graphes simplement.

graphite

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.

Avantages

Inconvénients

influxdb

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.

Avantages

  1. Rapide, notamment sur Rapsberry pi
  2. Si les promesses sont tenues, une occupation disque très efficace
  3. Influxdb intègre un serveur collectd et graphite, il implémente également un https://docs.influxdata.com/influxdb/v0.10/write_protocols/line/serveur texte simple. Ceci permet à Influxdb de recevoir des données de multiples sources sans rien avoir à modifier

Inconvénients

  • Le langage de requête que je trouve beaucoup moins simple que celui de Graphite mais plus puissant
  • L'API et le langage de requête qui ont pas mal changé d'une version à l'autre
  • L'entreprise derrière Influxdb a tendance a vouloir réinventer beaucoup de roues pourtant éprouvées : telegraph pour remplacer collectd, chronograph pour grafana.

Personnellement, le point 1 m'a fait préférer Graphite et le 3 pose question.

Conclusion

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.

blog/les_bases_de_donnees_temporelles.txt · Dernière modification: Le 14/02/2016 à 23:16 par sylvain