InfluxDB (chronograf) et Grafana
Le stack InfluxData T.I.C.K. est composé comme suit :
Version | Component | Role |
---|---|---|
1.6 | Telegraf | Collecte les données. |
1.5 | InfluxDB | Stockage des données |
1.5 | Chronograf | Visualisation des données |
1.5 | Kapacitor | Création d’alerte |
InfluxDB est une base de données orientée séries temporelles Time Series Database (TSDB), adaptées au stockage de métriques (collecte de données “timestamped” comme dans le cas des IoT, etc.). Le stockage interne s’appuie sur la base clé-valeur. Elle est écrite en Go dont les principaux avantages sont les performances, la durée de rétention importante et la scalabilité.
Installation
Voilà les commandes nécessaires :
- Mise à jour du système et ajout de paquet nécessaire
$ aptitude update $ aptitude upgrade $ aptitude install apt-transport-https
- Ajout du repository InfluxDB:
$ curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add - $ source /etc/lsb-release $ echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
- (Dans le cas de Debian, faire les commandes suivantes:)
$ curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add - $ source /etc/os-release $ test $VERSION_ID = "7" && echo "deb https://repos.influxdata.com/debian wheezy stable" | sudo tee /etc/apt/sources.list.d/influxdb.list $ test $VERSION_ID = "8" && echo "deb https://repos.influxdata.com/debian jessie stable" | sudo tee /etc/apt/sources.list.d/influxdb.list $ test $VERSION_ID = "9" && echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
- Mise à jour:
$ aptitude update
- Installation:
$ aptitude install influxdb telegraf chronograf kapacitor
Test TICK
De manière générale, les services se lancent automatiquement. Dans le cas contraire, faire :
$ systemctl start influxdb
ou :
$ service influxdb start
(Faire de même pour les autres composants)
Configuration de Telegraf
Telegraf est le composant qui permet de collecter des mesures d’un service, à intervalles réguliers, et de l’envoyer vers un autre. Voici une liste de services auxquels Telegraf peut se connecter pour récupérer des données et pour les écrire.
- Pour nos tests, nous allons décommenter la section
[[inputs.sysstat.options]]
de/etc/telegraf/telegraf.conf
. Par exemple :
[inputs.sysstat.options] -C = "cpu" -B = "paging" -b = "io" -d = "disk" # requires DISK activity "-n ALL" = "network" "-P ALL" = "per_cpu" -q = "queue" -R = "mem" -r = "mem_util" -S = "swap_util" -u = "cpu_util" -v = "inode" -W = "swap" -w = "task"
<HTML><ol start=“2” style=“list-style-type: decimal;”></HTML> <HTML><li></HTML><HTML><p></HTML>Redémarrage de Telegraf<HTML></p></HTML>
$ service telegraf restart
<HTML><p></HTML>ou<HTML></p></HTML>
$ systemctl restart telegraf
<HTML></li></HTML><HTML></ol></HTML>
Vérification de l’écriture dans la BDD
Par défaut, Telegraf va créer une BDD telegraf contenant plusieurs “tables” (measurements) . Cette BDD sera alimentée par le monitoring choisi (ici, cpu, mem et disk). Pour vérifier cela, il suffit de faire $ influx
, puis de faire dans le CLI SHOW DATABASES
. Vous devriez obtenir :
name: databases name ---- _internal telegraf
Quelques exemples de commande : * USE telegraf
→ permet d’utiliser la table telegraf * SHOW MEASUREMENTS
→ montre les différentes “tables” disponibles * SELECT * FROM cpu LIMIT 10
→ permet de montrer les 10 dernières valeurs enregistrées dans la “table” cpu. * SHOW TRAG KEYS FROM "swap"
→ affiche les tags de la “table” swap
La commande suivante select * from swap limit 10
nous donne le résultat :
name: swap time free host in out total used used_percent ---- ---- ---- -- --- ----- ---- ------------ 1526041780000000000 36683182080 le2p-influxdb 96071680 919388160 37178306560 495124480 1.3317564080035387 1526041790000000000 36683182080 le2p-influxdb 96071680 919388160 37178306560 495124480 1.3317564080035387 1526041800000000000 36683182080 le2p-influxdb 96071680 919388160 37178306560 495124480 1.3317564080035387 1526041810000000000 36683182080 le2p-influxdb 96071680 919388160 37178306560 495124480 1.3317564080035387 1526041820000000000 36683182080 le2p-influxdb 96071680 919388160 37178306560 495124480 1.3317564080035387 1526041830000000000 36683182080 le2p-influxdb 96071680 919388160 37178306560 495124480 1.3317564080035387 1526041840000000000 36683182080 le2p-influxdb 96071680 919388160 37178306560 495124480 1.3317564080035387 1526041850000000000 36683182080 le2p-influxdb 96071680 919388160 37178306560 495124480 1.3317564080035387 1526041860000000000 36683182080 le2p-influxdb 96071680 919388160 37178306560 495124480 1.3317564080035387 1526041870000000000 36683182080 le2p-influxdb 96071680 919388160 37178306560 495124480 1.3317564080035387
Nous avons ici (pour reprendre le vocabulaire de InfluxDB) : * Measurement : la “table” nommée “swap” * Timestamp : la colonne “time”, donne en nanosecondes le temps de capture des valeurs. On pourrait appeler cela l’index primaire dans le cas d’un BDD SQL. * Tags : la colonne “host”, qui permet de qualifier la/les valeurs (il peut y avoir plusieurs tags, chacun étant indexé pour la recherche) * Fields : toutes les autres colonnes, qui contiennent les valeurs.
Quelques exemples de commande plus complexe: * select * from swap where host='le2p-influxdb' and time > now() - 1m
→ montre les valeurs de la “table” swap depuis la dernière minute. * select * from swap where host='le2p-influxdb' and time >= '2018-05-29T0:00:00Z'
→ montre les valeurs de la “table” swap depuis le moment mentionné. * select mean(usage_user) from cpu where host='le2p-influxdb' and time > now() - 1d group by time(1h)
→ donne la moyenne par heure de l’utilisation du cpu de session user depuis ce matin, groupé par heure.
Plus d’informations sur le site officiel.
Les requêtes peuvent aussi se faire par curl :
$ curl -G 'http://10.82.64.147:8086/query?pretty=true&db=telegraf' --data-urlencode 'q=SELECT * FROM "swap" WHERE time > now() - 1m'
Configuration de Chronograf
Chronograf est un système de visualisation de données. Il va venir se connecter à notre base de données InfluxDB. Il remplace dorénavant l’API web de InfluxDB et permet donc d’administrer ce dernier. Il permet aussi la création de graphiques et la création de dashboards, mais Grafana semble plus mature à ce jour. Par défaut, Chronograf s’exécute sur le port 8888.
On obtient ce premier écran de configuration :
On peut ensuite : * Host List: Voir un dashboard autogénéré * Data Explorer: Permet d’explorer les données de manière interactive (et notamment de tester les requêtes) * Dashboards : Permet de créer des dashboards personnalisés/ * Alerting : Permet de créer des alertes automatiques (par log, smtp, tcp, exec, telegram, slack, etc.) après avoir configuré Kapacitor… * Configuration : Configuration de la BDD (et notamment de Kapacitor)
Configuration de Kapacitor
Kapacitor est le composant qui permet de gérer des alertes basées sur le résultat d’une requête. Il suffit de passer par le menu précédent pour la configuration.
Grafana
Grafana est un tableau de bord compatible avec de nombreuses BDD (Graphite, InfluxDB, OpenTSDB, etc.). Il est adapté pour visualiser des mesures en provenance de capteurs ou d’objets connectés. Il est développé en Go et Javascript.
Installation de Grafana
Pour des raisons diverses, nous avons installé Grafana. Cela peut se faire par les commandes suivantes:
$ curl https://packagecloud.io/gpg.key | sudo apt-key add - $ echo 'deb https://packagecloud.io/grafana/stable/debian/ stretch main' > /etc/apt/sources.list.d/grafana.list $ aptitude update $ aptitude install grafana
La configuration se fait aisément :
Pour tester très rapidement, on peut importer un dashboard en cliquant sur Home
puis Import dashboard
. Nous avons utilisé l’ID 928 (qui correspond à ce dashboard).
Test des graphiques (Chronograf & Grafana)
Pour tester la visualisation en temps “presque” réel (5s de décalage), nous avons installé le package stress
et utilisé la commande suivante:
$ stress -v -t 20s -m 100 -c 4
Chronograf
Grafana
Bonus : Redirection des ports vers des sub…
Pour des raisons de sécurité (drastique), il n’est pas possible d’accéder à tous les ports sans faire une demande à la DSI. Nous avons donc installé un proxy pour faciliter l’accès aux services:
Installation et configuration de apache
$ aptitude install apache2 $ a2enmod proxy proxy_http $ nano /etc/apache2/sites-available/000-default.conf
La configuration est la suivante :
<VirtualHost *:80> ProxyPreserveHost On ProxyRequests Off <Location /grafana> ProxyPass http://localhost:3000 ProxyPassReverse http://localhost:3000/grafana </Location> <Location /chronograf> ProxyPass http://localhost:8888 ProxyPassReverse http://localhost:8888/chronograf </Location> <Location /influxdb> ProxyPass http://localhost:8086 ProxyPassReverse http://localhost:8086 </Location> </VirtualHost>
Configuration de Grafana
$ nano /etc/grafana/grafana.ini
Les lignes à décommenter et à configurer sont les suivantes :
# The public facing domain name used to access grafana from a browser domain = 10.82.64.147 # The full public facing url you use in browser, used for redirects and emails # If you use reverse proxy and sub path specify full url (with sub path) root_url = http://10.82.64.147/grafana/
Configuration de Chronograf
$ nano /etc/default/chronograf
La configuration est la suivante :
BASE_PATH=/chronograf PUBLIC_URL="https://10.82.64.147/chronograf"
Redémarrage des services
$ service grafana-server restart $ service chronograf restart $ service apache2 restart