VT2016 OpenTSDB

= 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...

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.



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 = sudo docker pull petergrace/opentsdb-docker sudo docker start --attach container_id
 * La démonstration consiste à lancer une image docker localement contenant OpenTSDB et HBase préconfigurés.

telnet localhost 4242
 * Ensuite il faut se connecter à OpenTSDB localement via le protocole telnet (ou via http).

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 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 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
 * 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.
 * 1) Nombre de connexions par heure
 * 1) Nombre d'achats par heure
 * 1) Nombre de ventes par heure


 * 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.




 * 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 =
 * http://opentsdb.net/
 * https://wooster.checkmy.ws/2013/12/time-series-databases/
 * https://en.wikipedia.org/wiki/Time_series_database
 * http://fr.slideshare.net/HBaseCon/ecosystem-session-6?next_slideshow=1