Nouvel présentation et tutoriel autour de trois outils se combinant ensemble pour offre une solution de supervision complète. Projet réalisé dans le cadre de mon alternance chez ABC Informatique à Valence.

InfluxDB est une base de données chronologique axé autour du TimeStamp. Le TimeStamp indique le nombre de secondes écoulées depuis le 1er Janvier 1970. Une base de données chronologique (Time-Series Database) a pour vocation d’évoluer très rapidement, tandis qu’une base de données traditionnel aura plus de mal et occasionnera des temps de réponse plus long. Les données arrivent dans l’ordre chronologique et sont toujours enregistrés comme nouvel enregistrement, il est donc impossible de mettre à jour des enregistrements comme avec UPDATE en sql. Certaines fonctions, sont propres à ce type de bases de données, comme les police de rétention qui met en place une règle pour supprimer tous les enregistrements de plus de X temps ou encore les requêtes continues qui sont des requêtes s’exécutant automatiquement et stockant le résultant dans un champ spécifique de la base. Les bases de données chronologiques sont principalement utilisées dans le cadre du monitoring ou d’application de tracking afin de garder un historique détaillé et daté de tous les enregistrements. Version 1.4.3 utilisé pour ce tutoriel.

Grafana, permet de visualiser les données stockées dans InfluxDb et d’organiser le tout dans des dashboards à votre convenance. Grafana fonctionne avec plusieurs systèmes de base de données et permet d’obtenir des graphiques avec un historique complet et de mettre en place des alertes si une certaine valeur dépasse un plafond par exemple. Grafana va tout simplement effectuer des requêtes sur le serveur InfluxDb et récupérer les informations qu’il souhaite. Version 4.6.3 utilisé pour ce tutoriel.

Telegraf, c’est un agent qui sera installer sur les machines que nous allons monitorer et qui inscrira via une requête HTTP les données qu’il récupèrera. La page Github de Telegraf recense toutes les données qu’il est possible de faire remonter. Comme c’est Telegraf qui va envoyer les données vers notre serveur et non le serveur qui va récupérer les données de l’agent, cela permet d’éviter d’être bloquer par les pares feus dans le cadre de réseau distants. De plus avec une simple redirection de port, on peut contourner le filtrage en sortie sur le port 80 et 443 uniquement. Version 1.5.2 utilisé pour ce tutoriel.

Exemple du type d’affichage que l’on peut obtenir.

esxi-222a0c8fba8b58a224343a586c53b906b21698dd06926d993d7483f63cce3627.png

Commençons maintenant le tutoriel.

Je pars du principe que votre système d’exploitation est déjà installé avec une configuration IP valide ainsi qu’un service SSH fonctionnel (Optionnel). Je vais effectuer ce tutoriel sur une machine Ubuntu, si vous souhaitez le réaliser sur Debian, il suffit de ne pas indiquer sudo a chaque commande si vous êtes connecté en root.

On va commencer par mettre à jour le serveur.

sudo apt-get update -y && sudo apt-get upgrade -y

Il faut ajouter les miroirs de InfluxData dans votre liste de miroirs afin que InfluxDb se mette à jour en même temps que les autres paquets. On autorise la clé InfluxData pour les paquets signés.

curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add

Si Curl n’est pas installé, il vous faudra l’installer manuellement et relancer la commande précédente.

sudo apt-get install curl

On exécute le contenu du fichier /etc/lsb-release

source /etc/lsb-release

Puis on ajoute les miroirs InfluxData dans le fichier /etc/apt/sources.list.d/influxdb.list

echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

On peut maintenant installer InfluxDb

sudo apt-get update && sudo apt-get install influxdb

Une fois l’installation terminée, nous pouvons lancer le service.

sudo service influxdb start

Le fichier de configuration d’InfluxDb se situe dans /etc/influxdb/influxdb.conf. Il faut donc préciser à InfluxDb que nous voulons utiliser ce fichier de configuration grâce à la commande suivante.

influxd -config /etc/influxdb/influxdb.conf

Pour accéder à InfluxDb, il nous suffit de rentrer la commande influx.
Il faudra d’abord se créer un compte administrateur avec la commande suivante.

CREATE USER <Utilisateur> WITH PASSWORD '<MotDePasse>' WITH ALL PRIVILEGE

Puis une base de données ou seront stockée tous nos enregistrements. Le schéma de stockage que vous souhaitez utilisez reste un choix personnel (Une base pour tous les enregistrements, une base par client, par pays etc)

CREATE DATABASE <BaseDeDonnées>

On peut vérifier que cette dernière s’est bien créer avec la commande SHOW DATABASES.
Nous allons maintenant créer un utilisateur qui aura le droit d’écrire et de lire dans la base, ce sera cet utilisateur que nous renseignerons dans le fichier de configuration de l’agent chez le client. Il est conseillé pour des questions de sécurité de créer un utilisateur par base.

CREATE USER <Utilisateur> WITH PASSWORD '<MotDePasse>'

Affectons-lui les droits de lecture et d’écriture sur la table.

GRANT ALL ON <BaseDeDonnées> TO <Utilisateur>

Pour vérifier que tout s’est correctement passé, vous pouvez rentrer les commandes SHOW USERS et SHOW GRANTS FOR <Utilisateur>.

Nous allons préciser une police de rétention, afin de supprimer automatiquement les données au bout de x heures, jours ou semaines. Dans mon cas je vais supprimer toutes les données de plus d’un an donc 365 jours.

CREATE RETENTION POLICY <Nom_Police> ON <Nom_Base> DURATION <Durée> REPLICATION 1 DEFAULT

Si vous souhaitez, en cas d’erreur supprimer des droits, un utilisateur ou une base, la commande DROP suivi du nom de la base ou de l’utilisateur permettra de le supprimer et la commande REVOKE [READ,WRITE,ALL] ON <BaseDeDonnées> FROM <Utilisateur> vous permettra de supprimer les droits de votre choix sur une base donnée pour l’utilisateur donné.

Afin de forcer l’authentification de l’agent avant l’insertion des données en base, il faudra dé-commenter le champ auth-enabled de la partie http du fichier de configuration de InfluxDb.

sudo nano /etc/influxdb/influxdb.conf

Une fois la modification effectué, relancez le service pour que cette dernière soit prise en compte.

sudo service influxdb restart

Une fois InfluxDb configuré, nous pouvons passer à la configuration et l’installation de Grafana qui nous permettra de récupérer et d’afficher sous forme de graphiques les enregistrements.

Nous allons ajouter les miroirs de Grafana afin que ce dernier se mette à jour en même temps que les autres paquets.
En premier temps on ajoute la clé pour autorisé l’installation de paquets signées.

curl https://packagecloud.io/gpg.key | sudo apt-key add -

Puis on ajoute les miroirs dans le fichier /etc/apt/sources.list

sudo nano /etc/apt/sources.list

deb https://packagecloud.io/grafana/stable/debian/ jessie main

On peut maintenant installer Grafana.

sudo apt-get update && sudo apt-get install grafana

Puis on lance le service.

sudo service grafana-server start

Vous pouvez désormais accéder au panel d’administration via l’adresse IP de votre serveur sur le port 3000. Les identifiants par défauts sont admin/admin.

1

Rendez-vous dans les paramètres de l’utilisateur pour configurer le nom, l’adresse mail ainsi que le mot de passe de l’utilisateur admin.

2

Rendez-vous dans la partie Data Sources pour ajouter le serveur InfluxDb en cliquant sur Add data source.

3

Le champ Name permet de donner un nom à la source de données. Cochez Default si vous souhaitez faire de cette source de données la source par défaut et ainsi gagner du temps lors du paramétrage des graphiques. Dans le champ type sélectionnez le type de base de données correspondant, ici InfluxDb. Indiquez ensuite l’URL de connexion vers votre base InfluxDb, si celle-ci se situe sur le même serveur que votre Grafana, l’URL http://localhost:8086 suffira et permettra de ne pas perdre le lien en cas de modification de l’adresse IP du serveur. Min time interval devra correspondre au temps auquel vous remontez les données sur InfluxDb depuis Telegraf. Comme nous allons configurer un envoi de données toutes les 10 secondes dans Telegraf, nous indiquons 10s ici.

Les autres paramètres d’authentification ne sont pas pris en compte ici étant donné que les deux services ne communiquent pas par le réseau mais en local car ils sont installés sur la même machine.

Attention à bien mettre l’access en proxy sinon l’URL localhost ne sera pas prise compte.

 

5

Si vous le souhaitez, vous pouvez indiquer les informations de votre organisation.

6.jpg

Vous pouvez aussi créer plusieurs utilisateurs avec des droits différents.

7.jpg

Avant de pouvoir visualiser les données, il faut installer et paramétrer l’agent Telegraf sur les machines que nous souhaitons superviser. Je vais ici détailler l’installation de Telegraf sous Windows à savoir que la configuration sous Linux est presque identique.

Il vous faut en premier lieu télécharger Telegraf sur le site InfluxData.

https://portal.influxdata.com/downloads#telegraf

Une fois téléchargé, copier le dossier Telegraf à la racine du disque C, puis nous allons paramétrer le fichier de configuration.

La variable interval indiquera le temps entre chaque récupération de données. Celui-ci doit correspondre à Min time interval que nous avons paramétrer lors de l’ajout de la source de données.
Le paramètre debug peut être passé en « true » en cas d’erreur et ainsi afficher toutes les informations nécessaires au débogage.
Le paramètre logfile permet de spécifier un fichier de log et ainsi stocker les erreurs générées par Telegraf.
La variable hostname vous permettra de différencier toutes vos machines. Si vous n’indiquez rien, c’est le nom de la machine telle qu’il est renseigné dans le système d’exploitation qui sera stocké dans la base.
La variable url devra contenir l’IP de votre serveur suivi du port 8086
La variable database devra contenir le nom de la base ou seront inscrites vos données.
Les variable username et password devront contenir les identifiants de l’utilisateur que nous avons créé précédemment qui a les droits sur sa table uniquement.
Enfin la partie Inputs contient toutes les informations que nous allons récupérer.

Si vous souhaitez en recevoir moins il suffit de commenter avec un # toute la partie qui ne vous servira pas, ou de supprimer une donnée d’une partie si vous souhaitez continuer de recevoir les autres.
Si vous souhaitez rajouter des données, il suffit de rechercher un plugin sur la page Github de Telegraf et de le copier dans ce fichier.

Pour lancer l’exécutable il faudra lancer une fenêtre d’invite de commandes et d’écrire la commande suivante.

C:\telegraf\telegraf.exe -config C:\telegraf\telegraf.conf

Votre Telegraf devait commencer à envoyer des données et au cas où une erreur est détectée, vous pouvez vous en rendre compte immédiatement.

Une fois que vous vous êtes rendu compte que les données remontaient bien, vous pouvez installer Telegraf comme service afin qu’il se lance automatiquement au démarrage de Windows.

C:\telegraf\telegraf.exe -config C:\telegraf\telegraf.conf --service install

Nous pouvons maintenant retourner sur Grafana et mettre en place notre premier graphique.

Cliquez sur Dashboard puis New dashboard.

Puis sélectionnez le type de modèle que vous souhaitez mettre en place, ici je vais cliquer sur Graph pour l’exemple.

Dans l’onglet General, vous allez pouvoir configurer le titre du graph, sa description ainsi que sa taille.

16.jpg

Sélectionnez en premier lieu votre source de données, puis créer votre requête afin de sortir uniquement les données qui vous intéresse. Vous pouvez si vous le souhaitez utiliser des variables dans le champ ALIAS BY comme $tag_host correspondant au nom de l’hôte ou $col qui correspond à l’alias que vous définissez pour le SELECT (dans le cas où vous sortez plusieurs données sur un même graph).

 

8

Dans la catégorie Axes, vous pouvez paramétrer l’unité de mesure de la donnée, l’étendue de graph (0 à 100 ou 20 à 40), le nombre de décimales et le nom des deux axes.

9

Dans la catégorie Legend, vous pouvez afficher la valeur minimal, maximale, la moyenne et celle a l’instant T. Ces données sont sélectionnées dans le temps défini en haut à droite du graphique et que vous pouvez changer en temps réel.

10

Dans la catégorie Display, vous pouvez choisir l’apparence de vos graphiques. Vous pouvez choisir de les afficher sous forme de barres, de lignes ou de points. C’est aussi ici que vous allez pouvoir mettre en place des seuils visuels pour voir quand une donnée est plus haute quelle ne le devrait.

11

Les seuils visuels se paramètre de la façon suivante. gt ou lt pour Greather than ou Lower than, suivi de la valeur et de la couleur du seuil. Vous pouvez choisir d’afficher une ligne, de remplir la zone de seuil ou les deux combinés.

12.jpg

Il est possible de mettre en place des alertes par mail afin d’être notifie si un seuil est dépassé ou si une donnée n’est plus reçue.

Il faut d’abord modifier le fichier /etc/grafana/grafana.ini pour y intégré nos paramètres SMTP.

sudo nano /etc/grafana/grafana.ini

Passez la variable « enabled » à « true ».
Dans la variable « host », indiquez l’adresse de votre serveur SMTP suivi de son numéro de port.
Dans la variable user, indiquez l’utilisateur que vous utilisez pour vous connecter.
Dans la variable « password », le mot de passe que vous utilisez pour vous connecter au serveur smtp. Attention, si ce dernier contient des # ou des ; il faudra ajouter trois quottes au début et à la fin. Exemple «  » »test# » » »
La variable « from_address » contient l’adresse qui va envoyer le mail.
La variable « from_name » contient le nom de l’expéditeur telle qu’il sera affiché sur votre boite mail.

Lorsque les mails seront envoyés, un lien en bas de ce dernier sera disponible pour se rendre sur le graphique via l’interface web et ainsi se rendre compte du problème. Cependant le lien redirige vers localhost:3000 alors qu’on ne se trouve pas forcément sur la machine locale.  Pour remédier à ce soucis, il faut remplacer « localhost » dans la variable « domain » par l’adresse IP de votre serveur.

Une fois toutes les modifications opérées, vous pouvez retourner sur l’interface web de Grafana et vous rendre dans Alerting et cliquer sur Configure notification.

Cliquez sur New Channel pour ajouter une nouvelle chaine de notification.

Screenshot_18.jpg

Dans le champ nom indiquez le nom que vous souhaitez donner à votre chaine de notification, dans le champ Type sélectionnez Mail, cochez Send on all alerts si vous voulez définir cette alerte par défaut, cochez include image si vous souhaitez que le mail vous envoie une image du graphe pour commencer à visualiser le problème enfin dans le champ email adresses vous pouvez indiquer les différentes adresses ou vous souhaitez que les alertes soient envoyées.

Une fois tous les paramètres nécessaires indiquées vous pouvez tester l’envoi de mail en cliquant sur le bouton Send Test. Si malheureusement Grafana vous indique une erreur ou que vous ne recevez pas le mail vous pouvez vous rendre dans les logs de Grafana afin de déceler une potentielle erreur. Vérifiez aussi du côté de votre serveur SMTP on ne sait jamais.

cat /var/log/grafana/grafana.log

Une fois que les mails transitent correctement, rendez-vous dans l’onglet Alert du graphe de votre choix pour configurer une alerte.

Attention les alertes que vous allez configurer vont remplacer les seuils configurés auparavant. Comme ces derniers étaient uniquement visuels, ils sont remplacés par les seuils de l’alerte mail.

Vous pouvez lui donner un nom et indiquer le temps entre deux déclenchement de la vérification.

Ensuite il vous suffit de créer votre requête selon votre choix qui définira quand le système d’alerte vous enverra un mail.

13.jpg

Dans l’onglet Notifications, il vous faudra ajouter votre chaine de notifications pour que les mails soient envoyées à l’adresse mail précédemment renseigné.

14.jpg

Une fois l’alerte bien configuré, si vous vous rendez dans Alert list vous pourrez la voir affiché. Ok sera affiché si l’alerte ne remonte aucun problème, critical si une alerte remonte un problème et pending le temps que la première requête soit lancé.

17.jpg

Votre alerte est maintenant correctement configuré.

Si votre Grafana comporte plusieurs utilisateurs ou organisations et que vous souhaitez définir une page d’accueil différente pour chacun, il vous suffit d’ajouter le dashboard de votre choix aux favoris en cliquant sur l’étoile dans la liste déroulante et dans les paramètres d’organisation ou d’utilisateurs, de modifier le champ home dashboard avec le dashboard que vous souhaitez.

Documentation officielle Grafana

Documentation officielle InfluxDb

Documentation officielle Telegraf