Supervision avec Telegraf

Introduction
Ayant déjà le couple InfluxDB et Grafana sur mon serveur,
je collectais déjà les données avec Nagios.
Le problème est que cela est un peu lourd et que le polling n’est pas trop efficace.
En effet, un polling toutes les 5 minutes ne donne pas trop d’information
et du coup certaines informations ne sont pas représentatives de l’état réel.
Voyez l’exemple de la bande passante du port Ethernet de mon serveur sur la même période :
Avec Telegraf, c’est l’hôte qui envoie ces données et non le serveur (de supervision) qui lui demande. Les données de Telegraf sont alors transmissent toutes les 10 secondes !
Nous allons donc ici voir comment j’ai mis en place Telegraf au sein d’InfluxDB et
comment j’ai créé les graphes sous Grafana.
Vous verrez sur Internet que l’on parle souvent de ces trois-là sous l’acronyme TIG.
On verra aussi comment j’ai fait pour récupérer les données d’un serveur distant de manière sécurisé (enfin je crois 🤔).
TIG en local
Installation
Je ne vais pas couvrir l’installation d’InfluxDB et Grafana car je l’ai fait sur un autre tutoriel. Je remets tous de même les commandes d’installation ici.
|
|
Telegraf est dans le dépôt “influxdata”.
À ce niveau, Telegraf devrait déjà être actif (sudo systemctl status telegraf
)
et ajouté au lancement au démarrage (sudo systemctl list-unit-files --state=enabled
).
Configuration
InfluxDB
Telegraf devrait déjà avoir créé sa base et commencé à transmettre ces données basiques. On peut vérifier cela au sein d’InfluxDB :
|
|
Pour mettre cela en évidence, je ne mets pas de colorisation syntaxique sur ces blocs.
On voit donc bien qu’une TSDB
telegraf
a été créé.
Il n’y a donc rien à faire.
Telegraf
Les données transmises par défaut sont presque suffisantes pour moi (pour l’instant). Il manque seulement les données de l’interface Ethernet ainsi que les statistiques réseau.
Pour la configuration, on peut éditer le fichier /etc/telegraf/telegraf.conf
mais ce dernier sera remis à l’origine à chaque mise à jour de Telegraf…
Par défaut, Telegraf prend aussi en compte les fichiers du
dossier /etc/telegraf/telegraf.d
.
Vous pouvez vérifier cela avec un ps -ef | grep telegraf
.
J’ai donc décidé de créer un fichier par service monitoré,
vous trouverez donc ci-dessous mes ajouts.
|
|
|
|
Ainsi on relance Telegraf avec un sudo systemctl restart telegraf
.
Grafana
On intègre donc la nouvelle base telegraf
dans les Data Sources
(“Configuration (⚙️)” > “Data Sources” > “Add data source”) :
Pour l’ajout d’un dashboard , j’ai tous de suite pensé que les graphes que je voulais obtenir
devraient-être assez commun. J’ai donc cherché au sein des
dashboards de la communauté
et je ne me suis pas trompé.
J’ai trouvé le dashboard
Linux System Overview-adv que j’ai
importé dans Grafana.
Pour que cela fonctionne bien chez moi, j’ai dû éditer la valeur de Server
en mettant en dur les noms d’hôte de mes serveurs.
Le résultat est plutôt pas mal :
Telegraf sur hôte distant
Problématique
Le serveur étant dans mon LAN et le port n’étant pas exposé sur ma Box, je n’avais pas mis de sécurité particulière sur InfluxDB. J’ai tous de même Grafana qui fonctionne en HTTPS. Maintenant que je veux pouvoir récupérer les données de mon serveur (celui sur lequel vous consultez cet article 😎).
Passer InfluxDB en SSL va casser toutes les choses pour lequel je l’utilise déjà
(Home Assisstant & Nagios)… Étant donné que le trafic passe via des requêtes HTTP,
Je me suis dit que ça pourrait fonctionner derrière un reverse-proxy.
Effectivement, cela fonctionne et c’est ce que l’on va voir juste après.
Mais ce n’est pas tout, de cette manière n’importe qui peut envoyer des données
sur mon serveur ! Il faut donc que j’authentifie cela. Je vais donc ajouter
une authentification basique pour cet hôte virtuel que je vais créer sous Apache.
Partie serveur TIG
Authentification basique
Pour pouvoir créer le fichier .htpasswd
, il faut le paquet apache2-utils
qu’on installe donc avec sudo apt install apache2-utils
.
La commande suivante créera le fichier (avec l’option -c
) avec une entrée pour
l’utilisateur “sadara”.
sudo htpasswd -c /etc/apache2/.htpasswd sadara
Le prompt demande ensuite d’entrer le mot de passe (“admin123456” pour cet exemple).
Le contenue du fichier est donc le suivant :
sadara:$apr1$hr0a694t$ReQUIxnflLAgQgr2u5oyH1
On peut vérifier le mot de passe avec la commande :
htpasswd -vb /etc/apache2/.htpasswd sadara admin123456
Maintenant que notre fichier est créé, on va pouvoir l’utiliser dans la configuration du reverse-proxy.
Configuration du Reverse-Proxy
On continue sur le serveur où TIG est installé.
J’ai donc créé un nouveau fichier de configuration
(vi /etc/apache2/sites-available/influxdb.conf
)
avec le contenu suivant :
|
|
Le trafic en HTTPS se fera donc via le port 8585. On ajoutera donc une règle de NAT pour que le trafic arrive sur mon serveur.
On ajoute ensuite le port “8585” dans le fichier /etc/apache2/ports.conf
dans la section SSL.
|
|
On active donc la configuration et on relance Apache :
|
|
On va tester cela sur le serveur (hôte) distant avant l’installation de Telegraf.
Partie hôte distant
Test du Reverse-Proxy
On teste donc notre accès depuis l’extérieur depuis le serveur (hôte) distant avec une commande cURL :
|
|
Le résultat est le suivant :
|
|
L’accès est bien fonctionnel. Tester aussi avec un mauvais mot de passe ou aucun identifiant, vous devriez obtenir une erreur 401.
Installation
On installe encore Telegraf, mais cette fois-ci sur l’hôte que l’on veut superviser.
|
|
Configuration
Voici donc l’extrait de mes configurations :
|
|
|
|
|
|
En plus de ces modifications, j’ai dû commenter la section [[outputs.influxdb]]
du fichier de configuration principal car, avec cette entrée, Telegraf essaye
d’envoyer ces données localement et ça pourrit mes logs…
Je devrais alors refaire cette opération à chaque MAJ de Telegraf…
Le problème est d’ailleurs connu.
Vérification
Après avoir redémarré Telegraf, j’ai fait un tcpdump
afin de vérifier deux choses :
- Que les informations sont bien transmises
- Que le trafic est bel et bien chiffré
J’ai donc fait une capture (sudo tcpdump -i ens3 port 8585 -w aaa.pcap -c 100
)
que j’ai récupérée sur mon poste pour l’ouvrir avec Wireshark.

Le trafic est bel et bien chiffré.
En sélectionnant le serveur dans le dashboard Grafana, je vois bien apparaitre les données ! 🍻
J’ai aussi modifié la valeur de la variable $nio
du dashboard pour qu’elle s’adapte automatiquement avec celle du serveur choisi.
Pour cela, j’ai remplacé la requête par la suivante :
|
|
Compléments
Pour récolter les données de Docker, il faut que l’utilisateur “telegraf” puisse avoir accès au socket docker. Pour cela, il faut l’ajouter au groupe “docker” :
|
|
J’utilise le dashbord 10585 et voici mon fichier de configuration associé :
|
|
Bonus : Telegraf sur Windows
J’ai aussi ajouté les métriques de mon PC Windows et ceux de ma carte graphique Nvidia (GTX 1070).
J’ai installé Telegraf via Chocolatey :
|
|
Une fois installé on édite la configuration situé
normalement ici : C:\Program Files\telegraf\telegraf.conf
Voici ma configuration :
|
|
Une fois la configuration enregistré, on relance le service en PowerShell :
|
|
On peut consulté le status avec :
|
|
Et s’assurer qu’il sera bien lancé au démarrage de la machine :
|
|
Pour l’instant, j’utilise le Dashbord 12225.
Conclusion
On remarque donc que TIG est en fait assez simple à mettre en place. Je suis plutôt satisfait du résultat.
Je vais donc voir pour obtenir de nouvelles métriques en étudiant la configuration (qui est assez bien commentée) ainsi que la liste des plugins disponibles sur le GitHub d’InfluxData.