Aujourd'hui, nous allons voir comment installer la pile TICK (Telegraf, InfluxDB, Chronograf et Kapacitor) sur un Raspberry Pi 3 sous Raspbian Lite pour jouer avec les séries temporelles (time-series) à la maison.

Les séries temporelles sont une suite de valeurs numériques évoluant au cours du temps. Elles sont particulièrement adaptées pour manipuler des mesures comme la température, la charge CPU d'une machine, etc...

On s'attachera ici à déployer la pile uniquement, à injecter des données provenant du Raspberry (monitoring) et à afficher un dashboard de ces données. En revanche, nous n'aborderons pas en détail la configuration, ni la sécurisation de la pile (gestion des droits notamment), ni encore la scalabilité de la solution, je laisse ça pour un prochain article.

La pile TICK

La pile TICK est une pile logicielle dédiée à la manipulation des séries temporelles. Elle se compose des 4 éléments suivants :

  • Telegraf qui est un agent de collecte des données doté de nombreux plugins de collecte ainsi que de stockage,
  • InfluxDB qui est la base de données de stockage des séries temporelles,
  • Chronograf, l'interface graphique de visualisation des données,
  • Kapacitor qui traite les données et déclenche des actions ou des alertes suivant les règles que vous lui avez établies. Il peut alerter par SMTP, slack, PagerDuty, Telegram et plein d'autre moyens encore.

img1

Installation

Dans la suite de cet article, nous supposons que vous installez sur un OS raspbian lite, mais c'est probablement identique sur l'ensemble des distributions dérivées de debian.

Ajout du dépot InfluxData.com

En premier lieu, nous allons ajouter le dépot influxdata à notre Raspberry Pi

$ sudo echo "deb https://repos.influxdata.com/debian $(grep -e '^VERSION=' /etc/os-release | sed -e 's/^.*(\(.*\)).*$/\1/') stable" > /etc/apt/sources.list.d/influxdb.list
$ sudo curl -sL https://repos.influxdata.com/influxdb.key | apt-key add -
$ sudo aptitude update

Installation d'InfluxDB

$ sudo aptitude install influxdb influxdb-client
$ sudo systemctl enable influxdb
$ sudo systemctl start influxdb

Vous pouvez ensuite tester que la base est bien démarrée avec la commande suivante :

$ curl "http://localhost:8086/query?q=show+databases"
{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["_internal"]]}]}]}

Le résultat vous indique qu'il existe une base nommée _internal. C'est tout bon.

Si vous obtenez au premier lancement de la commande curl le résultat suivant :

{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"]}]}]}

Pas de panique. Cela peut arriver la première fois, quand InfluxDB n'a encore reçu aucune commande, la base interne n'existe pas. Au second appel de curl, vous devriez voie que la base d edonnées interne a été créée.

Installation de Chronograf

Chronograf est l'interface utilisateur de la pile TICK.

$ sudo aptitude install chronograf
$ sudo systemctl enable chronograf
$ sudo systemctl start chronograf

Vous pouvez ensuite vous rendre avec votre navigateur à l'adresse http://<IP de votre raspberry>:8888/. L'écran de configuration de chronograf vous est alors présenté. Il faut entrer les informations de connexion à InfluxDB. Nous n'avons pas mis en place de gestion de droit sur InfluxDB, vous pouvez donc laisser vide les champs utilisateur de mot de passe.

img2

Et voilà, vous pouvez commencer à jouer avec l'interface de visualisation des données. Il y a déjà les données de métrologie de la base de données influxdb (nombre de requêtes exécutées, durée des requêtes, nombre d'accès http, etc...) dans la base de données "_internal.monitor"

Il reste maintenant à ajouter des données.

Installation de Telegraf

Telegraf s'installe de la même façon que Chronograf :

$ sudo aptitude install telegraf
$ sudo systemctl enable telegraf
$ sudo systemctl start telegraf

Telegraph est construit autour de plugins d'entrée (inputs) pour accéder aux données des mesures, et des plugins de sortie (outputs) pour aller stocker les données. Les plugins de Telegraf sont écrits en GO.

Il y a toutes sortes de plugins d'entrée pour obtenir des mesures sur une quantité incroyable de systèmes (Apache, Elasticsearch, Docker, etc...). La documentation de Telegraf comporte le descriptif de chacun des plugins qui viennent avec telegraf.

Il y a également toutes sortes de plugins de sortie pour stocker les données récupérées dans différents types de bases de données. Par défaut InfluxDB, mais aussi (non exhaustif) Kafka, Graylog, Elasticsearch, Datadog ou des fichiers plats.

Dans la configuration par défaut de telegraf, les plugins d'entrée suivants sont activés et collectent des métriques systèmes sur la machine sur laquelle Telegraf tourne :

  • cpu
  • disk
  • diskio
  • kernel
  • mem
  • processes
  • swap
  • system

Et les données sont stockées par défaut dans une base de données telegraf d'InfluxDB sur l'hôte local (localhost:8086) sans authentification. ça tombe bien parce que c'est notre cas, nous n'avons donc pas besoin de toucher à la configuration de Telegraf pour commencer à récolter des données et les voir dans Chronograf. La configuration de Telegraf se trouve sous /etc/telegraf.

Telegraf construit également un dashboard système par défaut de la machine locale dans Chronograf. Vous le retrouverez sous Host List.

img3

Et maintenant que vous avez plein de données toutes fraiches, vous pouvez jouer à les explorer (Data Explorer) et à faire vos propres tableaux de bord (dashboards). Notez que la partie Data Explorer est beaucoup plus limitée, je n'ai notamment pas trouvé moyen de changer le type de graphe alors que c'est enfantin dans les dashboards.

Installation de Kapacitor

Maintenant que nous avons des données, pourquoi ne pas en profiter pour alarmer sur dépassement de seuil ? C'est le travail de Kapacitor.

$ sudo aptitude install kapacitor
$ sudo systemctl enable kapacitor
$ sudo systemctl start kapacitor

Vous devez ensuite "brancher" Kapacitor sur InfluxDB et Chronograf. Pour cela, dans l'interface de Chronograf, allez dans Configuration et dans la colonne Active Kapacitor, cliquez sur le bouton Add Config de votre source de données.

img4

Saisissez ensuite les informations de connexion à Kapacitor (Normalement les valeurs préremplies sur suffisantes) et validez.

img5

Enfin, scrollez en bas de l'écran et ajoutez des moyens d'alerting. Ici par exemple la configuration de l'alerting par mail :

img6

Et voilà ! Vous pouvez maintenant définir des alertes dans Alerting->Alert Rules

img7 img8

Ajoutons une source de données

Bon, on a la base, mais maintenant, on veut ajouter nos données à nous. Par exemple la température du CPU du Raspberry Pi. On peut la lire facilement dans /sys/class/thermal/thermal_zone0/temp (c'est une valeur multipliée par 1000).

On va donc créer un petit programme en python qui va lire cette valeur et retourner les données en format json. On crée pour cela le fichier /etc/telegraf/pi_temp.py avec le contenu suivant :

#!/usr/bin/env python3

import json

# This gets the CPU temp
f = open('/sys/class/thermal/thermal_zone0/temp', 'r')
temp=f.readline()
temp=int(temp) / 1000
f.close


json_body = [
{
    "sensor": "cpu",
    "temperature" : temp
}
]

print(json.dumps(json_body, indent=2, sort_keys=True))

On le rend executable et on teste :

$ cd /etc/telegraf/
$ chmod +x pi_temp.py
$ ./pi_temp.py
[
  {
    "sensor": "cpu",
    "temperature": 45.084
  }
]

Il n'y a plus alors qu'à utiliser le plugin exec de Telegraf pour que les données soient automagiquement envoyées toutes les 10 secondes dans InfluxDB. Modifiez la section inputs.exec du fichier /etc/telegraf/telegraf.conf comme cela :

# # Read metrics from one or more commands that can output to stdout
[[inputs.exec]]
  ## Commands array
  commands = [
    "/etc/telegraf/pi_temp.py"
  ]

  ## Timeout for each command to complete.
  timeout = "5s"

  ## measurement name suffix (for separating different commands)
  name_prefix = "temperature_"

  ## Data format to consume.
  ## Each data format has its own unique set of configuration options, read
  ## more about them here:
  ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
  data_format = "json"

  ## List of tag names to extract from top-level of JSON server response
    tag_keys = [
        "sensor"
    ]

Et voilà, vous aurez la mesure de température du CPU du Raspberry Pi dans InfluxDB.

img9

Amusez vous bien avec votre pile TICK et les séries temporelles !


Comments

comments powered by Disqus