TICK-Tac

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

$whoami

Nicolas Steinmetz

CerenIT & @nsteinmetz

Architecte Plateforme (infrastructure & applicatif)

Web + un peu (Mobile, IoT & Big Data)

Intérêt pour les problématiques DevOps / SRE

Cherche nouvelles missions/projets/équipes pour Janvier 2018

Il était une fois...

Séries temporelles ?

Définition

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

Genre ID Primaire de vos données !

{
	<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
  • ...

Ok mais ça, n'importe quelle base peut le faire.

Time Series Database

  • Ecriture ++ (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 ++

Logs vs Metrics vs Tracing

Logs

  • Donnée textuelle
  • brute
  • traduisant un fait immutable
  • et complet
127.0.0.1 - - [23/Oct/2017:07:02:30] "GET / HTTP/1.1" 301 184

Du contexte certes mais :

  • Couteux à stocker et à processer
  • Pas forcément parlant par eux-mêmes (manque de recul)
  • Pas forcément très structuré (RegExp = <3)

Metrics

  • Donnée textuelle
  • brute ou interprétée
  • traduisant un (ensemble de) fait(s)
  • récoltée sur des intervalles de temps réguliers.
  • Code HTTP reçu
  • Nombre de requêtes http / x min
  • Nombre de login / logout / add to cart / ...
  • Cours de bourse, température, etc.

Plutôt un nombre pour faire des maths dessus que du texte / autre.

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

Logs vs Metrics vs Tracing

  • Logs : Process
  • Metrics : Vue plus globale
  • Tracing : Vue bornée mais de bout en bout (scoped request)

Timeseries == Metrics & Events

Besoins & Usages

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

Surveiller / Observer

Monitoring tells you whether the system works. Observability lets you ask why it's not working

Baron Schwartz

Alerter

Something is broken, somebody needs to fix it right now ! Or, something might break soon, so somebody should look soon.

Google SRE Handbook

Alerter

Alerter sur les symptômes plus que sur les causes

Exception : quand la cause peut créer des symptômes

Architecture TICK

Language Go
Telegraf 1.4.4
InfluxDB 1.4.2
Chronograf 1.3.10
Kapacitor 1.3.3
Licence MIT

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

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

Line Protocol

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

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>

Chronograf

>
  • Dashboards
  • Administration & requêtage InfluxDB
  • Alertes (intégration avec Kapacitor)

Kapacitor

A metrics and events processing and alerting engine.

  • DSL ; TICKScript
  • HTTP API
  • CLI
  • Scripting / stream & batch
  • PubSub mechanism : topic + handlers
  • 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')

Focus InfluxDB 1.4.x & IFQL


select(db:"foo")
	.where(exp:{"_measurement"=="cpu" AND 
				"_field"=="usage_system" AND 
				"service"=="app-server"})
	.range(start:-12h)
	.window(every:10m)
	.max()

Démo Time

Grafana

"The open platform for beautiful analytics and monitoring"

Language Go
Version 4.6.x - 26/10/17
Licence Apache

Fonctionnalités

  • Multi Time Series Database => Unification
  • Platforme de Monitoring & Alerting
  • Visualisation
  • Query Editor
  • Opensource
  • Extensible (dashboard, plugins, etc)
  • Collaboration (Authentication, Organisation, Annotations, Share dashboards, Versionning)
  • HTTP API

Démo Time

Bilan Perso

Prise en main ++
Documentation +
Déploiement ++
Performances +
Ressources ++
Flexibilité Stockage ++
Flexibilité Requêtage +/-

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
  • ELK + Timelion + X-Pack ?

Mes prochaines étapes

  • Continous Queries
  • Industrialisation dashboards via Wizzy ?
  • Améliorer l'observabilité et les alertes
  • Contribuer à la doc de Grafana

Et ils repartirent heureux et eurent beaucoup d'idées...

  • Logs vs Metrics vs Tracing
  • Monitoring + Observabilité + Alertes
  • Timeseries DB = events & metrics
  • Telegraf + InfluxDB + Grafana = Awesome !
  • Chronograf + Kapacitor : attendre encore un peu
  • Des idées d'implémentations possibles

Question(s) ?

(-: Merci :-)

Nicolas STEINMETZ / CérénIT contact@cerenit.fr / www.cerenit.fr 09.72.58.44.69 / 06.28.20.31.58 @nsteinmetz - @_CerenIT

Ressources