====== InfluxDB (chronograf) et Grafana ====== L'original est sur : https://gist.github.com/gyassine/27dd5bc1ff84bc3e98f6d0ec5cb549f4 * [[#tutoriel-d-installation-du-stack-tick-de-influxdata-et-de-grafana--ubuntu-|Tutoriel d’installation du stack TICK de InfluxData et de Grafana (Ubuntu)]] * [[#installation|Installation]] * [[#test-tick|Test TICK]] * [[#configuration-de-telegraf|Configuration de Telegraf]] * [[#v-rification-de-l--criture-dans-la-bdd|Vérification de l’écriture dans la BDD]] * [[#configuration-de-chronograf|Configuration de Chronograf]] * [[#configuration-de-kapacitor|Configuration de Kapacitor]] * [[#grafana|Grafana]] * [[#installation-de-grafana|Installation de Grafana]] * [[#test-des-graphiques--chronograf---grafana-|Test des graphiques (Chronograf & Grafana)]] * [[#bonus---redirection-des-ports-vers-des-sub|Bonus : Redirection des ports vers des sub…]] * [[#installation-et-configuration-de-apache|Installation et configuration de apache]] * [[#configuration-de-grafana|Configuration de Grafana]] * [[#configuration-de-chronograf-1|Configuration de Chronograf]] * [[#red-marrage-des-services|Redémarrage des services]] {{https://2bjee8bvp8y263sjpl3xui1a-wpengine.netdna-ssl.com/wp-content/uploads/tick-stack-grid-1.jpg| Fonctionnement du stack TICK}} 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 [[https://github.com/influxdata/telegraf/tree/master/plugins/inputs|récupérer des données]] et pour [[https://github.com/influxdata/telegraf/tree/master/plugins/outputs|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"
  1. Redémarrage de Telegraf

    $ service telegraf restart

    ou

    $ systemctl restart telegraf
==== 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 [[https://docs.influxdata.com/influxdb/v1.5/tools/shell/|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 : {{https://user-images.githubusercontent.com/12556566/40643511-740e2d86-6331-11e8-8608-d342789ae439.jpg| influx connection}} 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. {{https://user-images.githubusercontent.com/12556566/40643507-732ed83e-6331-11e8-85a0-2c37d0813e8e.jpg|kapacitor connection01}} {{https://user-images.githubusercontent.com/12556566/40643508-7365ec02-6331-11e8-82de-502dc6f499b2.jpg|kapacitor connection02}} ===== 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 : {{https://user-images.githubusercontent.com/12556566/40643510-73d622c4-6331-11e8-8999-4cfe245ab782.jpg| grafana}} 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 [[https://grafana.com/dashboards/928|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** {{https://user-images.githubusercontent.com/12556566/40643509-739ee6b0-6331-11e8-86bd-f18f1c2ecb10.jpg| stress chronograf}} **Grafana** {{https://user-images.githubusercontent.com/12556566/40643512-744753ea-6331-11e8-9b7d-e5b019337bbf.jpg| stress 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 : ProxyPreserveHost On ProxyRequests Off ProxyPass http://localhost:3000 ProxyPassReverse http://localhost:3000/grafana ProxyPass http://localhost:8888 ProxyPassReverse http://localhost:8888/chronograf ProxyPass http://localhost:8086 ProxyPassReverse http://localhost:8086 ===== 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