TICK-Tac

Il est l'heure de collecter et exploiter vos données temporelles

Retrouver le code et la démo

https://code.cerenit.fr/cerenit/breizhcamp2018-tick-tac

Séries temporelles ?

Définition

Une donnée, où la notion temporelle est dominante/significative.

{
	<timestamp>: { <data> },
	<timestamp>: { <data> },
	<timestamp>: { <data> }
}

Et pour les données ?

  • Cours de bourse
  • Relevé de température (santé, météo)
  • Stock, commandes, etc.
  • Actions utilisateurs
  • Capteurs IoT
  • Monitoring système et applicatif
  • ...

Timeseries ❤️ Metrics/Events

  • Donnée textuelle
  • brute ou interprétée
  • traduisant un (ensemble de) fait(s)
  • récoltée sur des intervalles de temps réguliers.

Exemples de métriques/événements

  • Code HTTP reçu
  • Nombre de requêtes http / x min
  • Nombre de login / logout / add to cart / ...
  • Cours de bourse, température, etc.
  • Taille d'un FS, Nombre de process, etc
  • ...

Avantages / Inconvénients des métriques/événements

  • Optimisé pour le stockage, conservation longue durée, échantillonnage
  • Indifférent à l'activité
  • Plus adapté aux opérations (sum, avg, etc) => alertes, profilage
  • Moins de détail/contexte (si interprété) qu'un fichier de logs

Time Series Databases

  • Écriture ++ (write throuput)
  • Requêtage ++ (query throughput)
  • Données temps réel (prime à la fraicheur)
  • Simplifier la représentation des données
  • Gestion des données régulières et irrégulières
  • Stockage ++

Besoins & Usages

  • Collecter
  • Explorer
  • Visualiser
  • Surveiller / Observer
  • Alerter

Architecture TICK

Plateforme TICK

Language Go
Telegraf 1.6.1
InfluxDB 1.5.1
Chronograf 1.4.4.2
Kapacitor 1.4.1
Licence MIT

Telegraf

Telegraf

  • 100+ plugins input/output
  • Input : Système, Containers, Réseau, (No)SQL, Serveurs, Capteurs IoTs, Services SaaS (mailchimp), etc
  • Output : InfluxDB, Elasticsearch, Kafka, amqp, cloudwatch, graphite, mqtt, etc.
  • Custom functions

InfluxDB

InfluxDB

  • Schemaless
  • Data types: string, float, integer, boolean
  • InfluxQL (SQL-like query)
  • Functions : mean, avg, median, sum, min, max, last, percentile, etc.
  • Echantillonnage (Continous Queries & Retention Policies)
  • API HTTP + UDP
  • Authentification & Autorisation
  • Client (tout langage) & CLI

Line Protocol

<measurement>, <tags>, <fields> <timestamp>
  • measurement : ~table
  • tags (metadonnée, optionnel) : couple(s) clé/valeur ~colonnes (indexed)
  • fields : couple(s) clé/valeur - ~colonnes (not indexed)
  • timestamp: primary key

Line Protocol - Exemples


cpu,host=serverA,region=us_west value=0.64 <ts>
payment,device=mobile,product=Notepad billed=33 <ts>
stock,symbol=AAPL bid=127.46,ask=127.48 <ts>
temperature,machine=unit42 external=25,internal=37 <ts>
btcexrate_mybtc,currency=us buy=8345,sell=8346 <ts>

Chronograf

>

Chronograf

  • Exploration de données
  • Dashboards
  • Administration & requêtage InfluxDB
  • Alertes (intégration avec Kapacitor)

Kapacitor

Kapacitor

A metrics and events processing and alerting engine.

  • DSL ; TICKScript
  • Stream & batch
  • HTTP API & CLI
  • User Defined function
  • Replay management

Tickscript


stream
|from()
	.measurement('cpu')
|alert()
	// Compare values to running mean and standard deviation
	.crit(lambda: sigma("usage_idle") > 3)
	.log('/tmp/alerts.log')

IFQL 0.0.5 (Spec)

  • Unification des langages avec une approche fonctionelle (InfluxQL + TICKScript => IFQL)
  • Réponse à des besoins non ou partiellement traités (HAVING, GROUP BY, JOIN, top, etc)
  • Découplage stockage vs requêtage
  • UDF
  • ETA: été 2018 (InfluxDB 1.6)

IFQL - Exemple


from(db:"foo")
	|> filter (fn: (r) =>
		r["host"] == "server0" and 
		r["_measurement"] == "cpu")
	|> range(start:-1h)
	|> window(every:15m)
	|> mean()

Blockchain Démo

Blockchain Démo

Grafana

"The open platform for beautiful analytics and monitoring"

Language Go
Version 5.1.x - 04/2018
Licence Apache

Fonctionnalités

  • Multi Sources (30+)
  • Query Editor
  • Visualisation
  • Monitoring & Alerting
  • Extensible (dashboard, plugins, etc)
  • Collaboration (Authentification, Organisation, Annotations, Partage, Versionning)
  • HTTP API

Bilan Perso

Prise en main ++
Documentation -/+
Déploiement ++
Performances ++
Adéquation au besoin ++

Ecosystème & Alternatives

  • Prometheus - CNCF
  • TimescaleDB - Time Series on top of Postgres
  • Gnocchi - Scalabilité + Multi tenant
  • OpenTSDB - Distribué + HBase/Big Table
  • Warp10 - Geo Time Series - BlaBlaCar/OVH/Matternet/Clever Cloud
  • ELK + Timelion + X-Pack ?

Mes prochaines étapes

  • Continous Queries & Retention Policies
  • Industrialisation dashboards Grafana (Cf 5.0, Wizzy ?)
  • Améliorer l'observabilité et les alertes

Conclusion

  • Timeseries = events & metrics
  • Telegraf + InfluxDB + Grafana = Awesome !
  • Chronograf + Kapacitor : attendre encore un peu - surtout avec IFQL en ligne de mire
  • Des idées d'implémentations possibles ?

Question(s) ?

(-: Merci :-)

Nicolas STEINMETZ / CérénIT #architecture #devops
#infrastructure #SRE
contact@cerenit.fr / www.cerenit.fr 09.72.58.44.69 / 06.28.20.31.58 @nsteinmetz - @_CerenIT

Ressources

Crédits