+ 33 6 68 40 27 75 contact@odeven.fr

Grafana, Telegraf et InfluxDB : Surveillez l’état de vos serveurs

par | Mar 15, 2024 | Administration Système

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

Influxdb Logo

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 Logo

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

Grafana Logo

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 :

Grafana InfluxDB Telegraf Dashboard

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 !