La surveillance des performances et l’état de santé de vos serveurs est essentielle pour garantir la fiabilité et l’efficacité de vos services en ligne. Une stack populaire pour réaliser cette tâche est composée de Grafana, Telegraf et InfluxDB. Cet article vous guide à travers les étapes de configuration de cette stack, vous permettant de visualiser et de surveiller vos serveurs de manière intuitive et efficace.
Introduction à la Stack Grafana/Telegraf/InfluxDB
InfluxDB est une base de données de séries temporelles optimisée pour la conservation et l’analyse de données dans le temps.
Telegraf est un agent de collecte de métriques, qui peut envoyer des données à InfluxDB.
Grafana est un outil de visualisation et d’analyse, qui peut interroger des données depuis InfluxDB (ou autres) pour créer des tableaux de bord dynamiques.
Installation et Configuration de Grafana/Telegraf/InfluxDB
Dans cet article, nous utiliserons Docker et Docker Compose pour installer les différents composants. Libre à vous d’utiliser une autre méthode d’installation si vous préférez. Sinon, si ce n’est pas déjà fait, installez Docker.
Si vous souhaitez en savoir plus sur Docker, n’hésitez pas à lire cet article.
1. InfluxDB
Commencez par créer un réseau « influxdb » qui permettra à Grafana et InfluxDB de communiquer en direct :
docker network create influxdb
Créez un dossier dans lequel seront stockés les fichiers de configuration d’InfluxDB :
sudo mkdir /srv/influxdb
Créez ensuite un fichier « docker-compose.yml » dans ce dossier, est insérez-y le contenu suivant :
version: "3.5"
services:
influxdb:
image: influxdb:latest
restart: always
volumes:
- ./volumes/var/lib/influxdb2:/var/lib/influxdb2
- ./volumes/etc/influxdb2:/etc/influxdb2
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=root
- DOCKER_INFLUXDB_INIT_PASSWORD=YOUR_PASSWORD
- DOCKER_INFLUXDB_INIT_ORG=YOUR_ORGANIZATION
- DOCKER_INFLUXDB_INIT_BUCKET=telegraf
- DOCKER_INFLUXDB_INIT_RETENTION=1w
networks:
- influxdb
ports:
- '8086:8086'
networks:
influxdb:
external: true
Modifiez les valeurs suivantes :
- YOUR_PASSWORD : Saisissez le mot de passe qui devra être utilisé pour se connecter en tant qu’utilisateur root
- YOUR_ORGANIZATION : Saisissez le nom de votre organisme
Vous pouvez également saisir ces valeurs dans un fichier « .env ».
Démarrer InfluxDB
Positionnez vous dans le dossier de configuration d’InfluxDB, puis démarrez le service avec Docker Compose :
cd /srv/influxdb
sudo docker compose up -d
Vérifiez le bon fonctionnement d’InfluxDB en accédant à l’adresse http://ADRESSE_IP_DU_SERVEUR:8086 depuis un navigateur internet.
Créer des tokens
Une fois connecté à l’interface utilisateur d’InfluxDB, rendez-vous dans le menu « Data », puis sélectionnez l’onglet « Tokens » :
- Générez un token de type « Read/Write Token » pour chaque serveur que vous souhaitez surveiller. Donnez le droit d’écriture uniquement sur le bucket « telegraf ».
- Générez un nouveau token de type « Read/Write Token » pour Grafana avec le droit de lecture uniquement sur le bucket « telegraf ».
Conservez ces tokens pour plus tard.
2. Telegraf
Telegraf devra être installé sur chaque serveur que vous souhaitez surveiller. Ainsi, répétez les opérations suivantes sur chaque serveur.
Créez les dossiers nécessaires à la configuration de Telegraf :
sudo mkdir /srv/telegraf
sudo mkdir -m 777 /srv/telegraf/volumes/telegraf/etc/
Générez le fichier de configuration par défaut de telegraf, puis remettez les droits du dossier en 755 :
sudo docker run --rm telegraf telegraf config > /srv/telegraf/volumes/telegraf/etc/telegraf.conf
sudo chmod 755 /srv/telegraf/volumes/telegraf/etc/
Exécutez la commande suivant pour récupérer le GID de docker :
stat -c '%g' /var/run/docker.sock
Créez le fichier “/srv/telegraf/docker-compose.yml”, et insérez le contenu suivant (en remplaçant DOCKER_GROUP_ID par l’id du groupe récupéré ci-dessus) :
version: "3.5"
services:
telegraf:
image: telegraf:latest
pid: "host"
restart: always
user: "telegraf:DOCKER_GROUP_ID"
ports:
- "8092:8092"
- "8094:8094"
- "8125:8125"
volumes:
- ./volumes/telegraf/etc/telegraf.conf:/etc/telegraf/telegraf.conf:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /:/hostfs:ro
environment:
- HOST_ETC=/hostfs/etc
- HOST_PROC=/hostfs/proc
- HOST_SYS=/hostfs/sys
- HOST_VAR=/hostfs/var
- HOST_RUN=/hostfs/run
- HOST_MOUNT_PREFIX=/hostfs
# Uniquement pour le Telegraf installé sur le même serveur qu'InfluxDB
networks:
influxdb:
external: true
Configurer la collecte des données du serveur
Ouvrez le fichier « /srv/telegraf/volumes/telegraf/etc/telegraf.conf » avec les droits de modification, et configurez les valeurs suivantes (veillez à ce qu’il n’y ait pas de « # » au début des lignes concernées) :
[[outputs.influxdb_v2]]
urls = ["http://INFLUX_DB_IP_ADDRESS:8086"]
token = "YOUR_TOKEN"
organization = "YOUR_ORGANIZATION"
bucket = "telegraf"
Remplacez les valeurs suivantes :
- INFLUX_DB_IP_ADDRESS : Adresse IP de votre serveur (pour la configuration du Telegraf installé sur le même serveur saisissez le nom du container, à savoir « influxdb« )
- YOUR_TOKEN : Token généré lors de la configuration d’InfluxDB
- YOUR_ORGANIZATION : Nom de votre organisme saisi lors de la configuration d’InfluxDB
Optionnel : Configurer la collecte des données des containers Docker
Vous pouvez configurer Telegraf afin qu’il collecte des données concernant chaque container Docker fonctionnant sur votre serveur. Pour cela, continuez à modifier le fichier « /srv/telegraf/volumes/telegraf/etc/telegraf.conf » :
[[inputs.docker]]
endpoint = "unix:///var/run/docker.sock"
container_names = []
timeout = "5s"
perdevice = false
perdevice_include = ["cpu", "blkio", "network"]
total = true
total_include = ["cpu", "blkio", "network"]
Démarrer Telegraf
Positionnez vous dans le dossier de configuration de Telegraf, puis démarrez le service avec Docker Compose :
cd /srv/telegraf
sudo docker compose up -d
3. Grafana
Créez un dossier dans lequel seront stockés les fichiers de configuration de Grafana :
sudo mkdir /srv/grafana
Créez un fichier « docker-compose.yml » dans ce dossier, est insérez-y le contenu suivant :
version: "3.5"
services:
grafana:
image: grafana/grafana:latest
restart: always
user: '472'
environment:
- GF_SMTP_ENABLED=true
- GF_SMTP_HOST=YOUR_SMTP_HOST
- GF_SMTP_USER=YOUR_SMTP_USER
- GF_SMTP_PASSWORD=YOUR_SMTP_PASSWORD
- GF_SMTP_FROM_ADDRESS=EMAIL_ADDRESS_USED_TO_SEND_EMAILS
volumes:
- ./volumes/var/lib/grafana:/var/lib/grafana
networks:
- influxdb
ports:
- "80:3000"
networks:
influxdb:
external:
name: influxdb
Les variables d’environnement préfixées par « GF_SMTP_ » permettent de configurer les envois d’e-mails. Cette configuration n’est pas indispensable, mais peut vous être utilse si vous souhaitez configurer des alertes par e-mail concernant l’état des serveurs. Pour plus d’information, vous pouvez consulter cet article afin d’utiliser le relais SMTP de Google Workspace (compte Google payant nécessaire). Sinon, vous pouvez également utiliser une solution gratuite telle que Brevo.
Modifiez les valeurs suivantes :
- YOUR_SMTP_HOST : L’adresse de l’hôte SMTP (avec le port)
- YOUR_SMTP_USER : L’identifiant de connexion au serveur SMTP
- YOUR_SMTP_PASSWORD: Le mot de passe de connexion au serveur SMTP
- EMAIL_ADDRESS_USED_TO_SEND_EMAILS : L’adresse e-mail qui apparaîtra en tant dans « l’expéditeur »
Démarrer Grafana
Positionnez vous dans le dossier de configuration de Grafana, puis démarrez le service avec Docker Compose :
cd /srv/grafana
sudo docker compose up -d
Vérifiez le bon fonctionnement de Grafana en accédant à l’adresse http://ADRESSE_IP_DU_SERVEUR:80 depuis un navigateur internet, et en vous connectant avec les identifiants par défaut « admin / admin » (pensez bien à les modifier).
Ajouter la source de données InfluxDB à Grafana
Depuis l’interface utilisateur de Grafana, vous devrez configurer la connexion à la base InfluxDB.
Rendez-vous ensuite dans le menu « Configuration / Data sources » et cliquez sur le bouton « Add data source » :
- Sélectionnez « InfluxDB » comme base de données
- Dans le formulaire, renseignez les valeurs suivantes :
- Query Language : Flux
- HTTP / URL : http://influxdb:8086 (en supposant que Grafana et InfluxDB sont installés sur le même serveur)
- InfluxDB Details :
- Organization : Le nom de votre organisme tel que définie sur InfluxDB
- Token : Le token généré spécialement pour Grafana sur InfluxDB
- Default bucket : telegraf
- Validez le formulaire
Créer des tableaux de bords
Dans Grafana, utilisez l’interface pour créer des tableaux de bord personnalisés. Vous pouvez sélectionner différentes métriques stockées dans InfluxDB et les visualiser sous forme de graphiques, de jauges, de listes, etc.
Depuis le menu, vous pouvez créer un Dashboard ou en importer un créé par la communauté.
Pour démarrer rapidement avec un Dashboard efficace vous permettant de visualiser l’état du serveur, des containers Docker, les disques, le réseau, la RAM, etc… vous pouvez importer un Dashboard que j’ai créé pour cette configuration, en saisissant l’id 20643. Voici un exemple du résultat que vous obtiendrez :
Une fois le Dashboard importé, vous pourrez visualiser les metrics de vos différents serveurs simplement en changeant la valeur définie dans le sélecteur « host » tout en haut à gauche.
N’hésitez pas à le personnaliser suivant vos besoins 😉.
Conclusion
Configurer une stack avec Grafana, Telegraf et InfluxDB pour surveiller vos serveurs peut sembler complexe, mais en suivant ces étapes, vous serez en mesure de mettre en place un système de surveillance puissant et flexible. Cette stack vous offre une vue complète des performances de vos serveurs, vous permettant d’identifier et de résoudre rapidement les problèmes.
Pour aller plus loin, vous pouvez également configurer les alertes, afin de recevoir une notification dès lors qu’un seuil est dépassé (afin de surveiller l’espace disque disponible par exemple). Cela fera peut-être le sujet d’un autre article. En attendant, n’hésitez pas à jouer avec Grafana, afin d’obtenir les Dashboards de vos rêves !