VT2016 OpenTSDB

From air
Revision as of 13:33, 3 November 2016 by Julian.Hattinguais (talk | contribs) (Contexte)
Jump to: navigation, search

Présentation

  • Sujet : OpenTSDB
  • Auteur : Thibaut NOUGUIER
  • Enseignants : Didier DONSEZ, Georges-Pierre BONNEAU

Mot clés

Base de données de séries chronologiques, Time Series Daemon, HBase.

Résumé

OpenTSDB est une base de données de séries chronologiques. Chaque serveur communique ses informations à son Time Series Daemon (TSD) qui par la suite les enregistre dans HBase. Les TSDs sont aussi capables de récupérer les données stockées pour permettrent leur visualisation par un utilisateur. Il est aussi possible de mettre en place des routines (alertes, messages, ...), dans le but d'informer l'utilisateur lorsque cela est nécessaire.

Abstract

OpenTSDB is a time series database. Each server sends his data to his own Time Series Daemon (TSD), and then it store it into HBase. TSDs are able to get stored data in order to show it to an user. It is also possible to create routines (alerts, messages, ...) in order to inform users of anything.

Synthèse

Contexte

De nos jours, le stockage en continu d'importantes quantités de données est habituel, cependant il est difficile de le faire via des bases de données relationnelles classiques.

Objectifs

Les bases de données de séries chronologiques ont principalement deux objectifs :

  • Le stockage de données horodatées de source et de nature diverses (températures, humidité, ...).
  • La visualisation de celles-ci sous forme de graphique.

Problèmatique

  • Stockage de point : nom + timestamp + valeur + tags.
  • Stockage de masse de l'odre de la dizaine de millions de points par an.
  • Fonctionnalités mathématiques telles que : comptages, moyennes, interpolations, lissages, maximums, minimums...

Historique

RRD Tool

  • Elle est la première base de données de séries chronologiques.
  • Il est difficile de l'exploiter au quotidien (sauvegarde, export, scalabilité).
  • La précision des données se fait au détriment de la taille de la base.


Les bases de données suivantes ont toutes ces points communs :

  • Une architecture industrielle et scalable.
  • Une API permettant le stockage et requetage des données.
  • Des fonctions mathématiques intégrées.

Whisper

  • Elle est vue comme la transition entre RRD Tool et les TSDB suivantes.
  • Elle est difficilement utilisable sans le projet Graphite.

KairosDB

  • Elle est très similaire à OpenTSDB, si ce n'est qu'elle peut s'utiliser avec H2 ou Cassandra en plus d'HBase.

InfluxDB

  • Elle est capable de stocker des événements en plus des points.
  • Elle est basée sur LevelDB, la librairie clé / valeur écrite par Google.

Fonctionnement

Les caractéristiques principales d'OpenTSDB sont les suivantes :

  • Une architecture scalable.
  • Une API pour la lecture et l'écriture des données.
  • Des opérations statistiques intégrées.
  • Une capacité de stockage à la milliseconde.
  • Le stockage d'un milliard de points par jour.

Architecture

La lecture et l'écriture des données se fait via les Time Series Daemon. En effet chaque serveur est lié à un TSD et lui communique ses données. Ensuite, le TSD dans un délais d'une seconde maximum, va enregistrer ces informations dans HBase. Des routines internes au TSD peuvent être déclenchées lors du passage des données. Pour permettre la visualisation du contenu de HBase le TSD peut récupérer les données et les envoyer aux utilisateurs via une page internet.

Evolutivité

  • Un TSD par cluster HBase, un cluster HBase par datacenter.
  • Capacité d'écriture : 2000 points (minimum) par seconde et par coeur.
  • Capacité de lecture : moins de 2 secondes.

Fiabilité

  • Echec : sauvegarde dans un buffer si HBase ne fonctionne plus.
  • Persistance des données : les données restent 1 seconde maximum dans le buffer d'un TSD avant d'être enregistrées dans HBase.

Démonstration

  • La démonstration consiste à lancer une image docker localement contenant OpenTSDB et HBase préconfigués.
sudo docker pull petergrace/opentsdb-docker
sudo docker start --attach container_id
  • Ensuite il faut se connecter à OpenTSDB localement via le protocole telnet (ou via http).
telnet localhost 4242
  • Parallèlement j'ai créé un script bash générant des sorties simulant les connexions, les achats et les ventes d'un site de commerce sur une journée.
# Nombre de connexions par heure
heure=0
valeur=( "1000" "900" "700" "400" "100" "40" "150" "500" "1600" "3700" "600" "4500" "9800" "10000" "9900" "4800" "3100" "2600" "1500" "2500" "2900" "3300" "3100" "2000" )
timestamp=1477954800

while [ "$heure" != 24 ]
do
    echo "put connexions $timestamp ${valeur[$heure]} particulier=1"
    timestamp=$(( $timestamp + 3600 ))
    heure=$(( $heure + 1 ))
done

# Nombre d'achats par heure
heure=0
valeur=( "100" "60" "10" "0" "0" "0" "0" "20" "100" "1000" "300" "1700" "4000" "5300" "4300" "2000" "600" "300" "70" "200" "300" "500" "400" "100" )
timestamp=1477954800

while [ "$heure" != 24 ]
do
    echo "put achats $timestamp ${valeur[$heure]} particulier=1"
    timestamp=$(( $timestamp + 3600 ))
    heure=$(( $heure + 1 ))
done

# Nombre de ventes par heure
heure=0
valeur=( "150" "20" "0" "0" "0" "0" "20" "40" "200" "500" "200" "1000" "2000" "3000" "5800" "4500" "2000" "200" "100" "400" "1000" "700" "100" "150" )
timestamp=1477954800

while [ "$heure" != 24 ]
do
    echo "put ventes $timestamp ${valeur[$heure]} particulier=1"
    timestamp=$(( $timestamp + 3600 ))
    heure=$(( $heure + 1 ))
done
  • Ensuite il faut rediriger la sortie du script vers la commande telnet que j'ai lancé avant, ce qui aura pour effet d'ajouter toutes les valeurs dans la base de données.


Demo

  • Voici donc le résultat dans OpenTSDB. Grâce au graphique, différentes analyses et interprétations peuvent être faites :
    • Les connexions / achats / ventes en fonctions de l'heure.
    • Les achats / ventes en fonctions des connexions.

Webographie