Le monitoring ou surpervision est une activité de surveillance et de mesure d'une activité informatique. Ces mesures permettent de construire des graphes afin de visualiser les performances et de voir les tendances, de détecter voire d'anticiper des anomalies ou des pannes et d'alerter en cas de dysfonctionnement.
Le monitoring peut vous permettre de déclencher des alertes sur certains seuils de métriques afin de réagir avant qu’un problème devienne critique.
Les indicateurs peuvent être :- un pic de charge important indiquant un problème de performance ou un pic de visiteurs
- un pic de trafic anormal causé par une attaque
- à l’inverse une perte soudaine de traffic pouvant indiquer une panne ou une indisponibilité.
Dans ce tutoriel, nous allons mettre en place la stack TIG (Telegraf - InfluxDB - Grafana) où Telegraf sera utilisé comme collecteur, InfluxDB comme solution de stockage et Grafana comme outil de mise en forme et de visualisation des données.
Telegraf est un collecteur de données créé par les créateurs d’InfluxDB : InfluxData. Il permet de collecter des données systèmes (CPU, mémoire, I/O, disque, etc.) ou les données liées à vos containers Docker et dispose de très nombreux plugins d’entrées (pour collecter) et de sortie (pour stocker).
Comme plugin de sortie, nous utiliserons InfluxDB, une base de données écrite en Go spécialisée dans le stockage de métriques et d’événements. Egalement développé par InfluxData, l’intégration d'InfluxDB avec Telegraf est très aisée.
Grafana est une des références pour la visualisation et la mise en forme de données métriques. Il permet de réaliser des tableaux de bord et des graphiques à partir d’une multitude de sources de données (InfluxDB, Graphite, Prometheus, Elasticsearch, etc.) et permet également de vous alerter en fonction de seuils définis via différents canaux (Slack, email, PagerDuty, etc.).
Grafana sera accessible depuis l'extérieur via Traefik et sera sécurisé grâce à un certificat SSL/TLS délivré par Let's Encrypt.
1 - Prérequis
- Vous devez disposer d'Ubuntu en version 22.04 ou supérieure Desktop, Server ou ARM (Raspberry Pi). Si vous disposez d'une version antérieure, vous pouvez mettre à jour votre système en suivant cette procédure.
- Votre utilisateur doit avoir accès à sudo.
-
Vos dépôts APT doivent être à jour. Dans le doute, tapez la commande suivante :
sudo apt-get update
-
Les paquets curl et software-properties-common doivent être installés sur votre système. Dans le doute, tapez la commande suivante :
sudo apt-get install -y curl software-properties-common
2 - Installation de Docker
-
Installez Docker :
sudo apt-get install -y docker.io
-
Vérifiez que Docker est correctement installé avec la commande :
La commande doit retourner la version installée de Docker.docker -v Docker version 19.03.8, build afacb8b7f0
3 - Installation de Docker Compose
-
Téléchargez Docker Compose avec la commande suivante en modifiant, si besoin, la version avec la dernière release du repository officiel de Docker :
sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
-
Ajoutez les droits d'exécution sur le binaire de Docker Compose :
sudo chmod +x /usr/local/bin/docker-compose
-
Vérifiez l'installation de Docker Compose avec la commande :
Si l'installation s'est correctement effectuée, cette commande doit vous renvoyer la version de Docker Compose.docker-compose -v docker-compose version 1.27.4, build 8a1c60f6
4 - Droits Unix
Il est recommandé, pour des raisons de sécurité, de créer un utilisateur dédié à la gestion des volumes Docker et de ne pas le lancer sous votre super-utilisateur.
-
Créez un utilisateur grafana :
sudo adduser grafana
-
Ajoutez-le au groupe docker :
sudo adduser grafana docker
5 - Création des volumes Telegraf, InfluxDB et Grafana
-
Connectez-vous sous l'utilisateur grafana :
su grafana
-
Déplacez-vous dans le répertoire personnel de cet utilisateur :
cd
-
Créez le fichier /home/grafana/docker-compose.yml et modifiez les lignes en surbrillance en fonction de la configuration souhaitée :
Les données suivantes seront créées automatiquement au démarrage des containers :version: "3" services: influxdb: image: influxdb:latest container_name: influxdb restart: always hostname: influxdb networks: - lan ports: - 8086:8086 environment: INFLUX_DB: "telegraf" INFLUXDB_USER: "telegraf_user" INFLUXDB_USER_PASSWORD: "telegraf_password" volumes: - influxdb-data:/var/lib/influxdb telegraf: image: telegraf:latest depends_on: - influxdb container_name: telegraf restart: always networks: - lan links: - influxdb:influxdb tty: true volumes: - /var/run/docker.sock:/var/run/docker.sock - /home/grafana/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf privileged: true grafana: image: grafana/grafana:latest depends_on: - influxdb container_name: grafana restart: always networks: - lan ports: - 3000:3000 links: - influxdb:influxdb environment: GF_INSTALL_PLUGINS: "grafana-clock-panel,\ grafana-influxdb-08-datasource,\ grafana-kairosdb-datasource,\ grafana-piechart-panel,\ grafana-simple-json-datasource,\ grafana-worldmap-panel" GF_SECURITY_ADMIN_USER: "grafana_user" GF_SECURITY_ADMIN_PASSWORD: "grafana_password" volumes: - grafana-data:/var/lib/grafana volumes: influxdb-data: grafana-data: networks: lan:
- INFLUX_DB : nom de la base de données créée dans InfluxDB.
- INFLUXDB_USER : utilisateur créé avec les droits de lecture/écriture sur la base de données INFLUX_DB.
- INFLUXDB_USER_PASSWORD : mot de passe de l'utilisateur INFLUXDB_USER.
- GF_SECURITY_ADMIN_USER : administrateur de l'interface Grafana.
- GF_SECURITY_ADMIN_PASSWORD : mot de passe de l'administrateur de Grafana.
-
Créez le répertoire de configuration de Telegraf et générez un fichier de configuration à jour avec la commande suivante :
mkdir telegraf docker run --rm telegraf telegraf config > telegraf/telegraf.conf
-
Modifiez ou décommentez les lignes suivantes dans le fichier de configuration /home/grafana/telegraf/telegraf.conf :
[...] # Configuration for telegraf agent [agent] [...] ## Override default hostname, if empty use os.Hostname() hostname = "telegraf" [...] ############################################################################### # OUTPUT PLUGINS # ############################################################################### # Configuration for sending metrics to InfluxDB [[outputs.influxdb]] ## The full HTTP or UDP URL for your InfluxDB instance. ## ## Multiple URLs can be specified for a single cluster, only ONE of the ## urls will be written to each interval. # urls = ["unix:///var/run/influxdb.sock"] # urls = ["udp://127.0.0.1:8089"] # urls = ["http://127.0.0.1:8086"] urls = ["http://influxdb:8086"] ## The target database for metrics; will be created as needed. database = "telegraf" ## If true, no CREATE DATABASE queries will be sent. Set to true when using ## Telegraf with a user without permissions to create databases or when the ## database already exists. # skip_database_creation = false ## Name of existing retention policy to write to. Empty string writes to ## the default retention policy. Only takes effect when using HTTP. # retention_policy = "" ## Write consistency (clusters only), can be: "any", "one", "quorum", "all". ## Only takes effect when using HTTP. # write_consistency = "any" ## Timeout for HTTP messages. # timeout = "5s" ## HTTP Basic Auth username = "telegraf_user" password = "telegraf_password" [...] [...] ############################################################################### # INPUT PLUGINS # ############################################################################### [...] # # Read metrics about docker containers [[inputs.docker]] # ## Docker Endpoint # ## To use TCP, set endpoint = "tcp://[ip]:[port]" # ## To use environment variables (ie, docker-machine), set endpoint = "ENV" endpoint = "unix:///var/run/docker.sock" [...] [...]
- hostname = "telegraf" : donnée purement indicative permettant d'identifier dans Grafana la provenance des métriques relevées par Telegraf.
- urls = ["http://influxdb:8086"] : le host doit correspondre à la valeur de la directive hostname déclarée dans votre docker-compose.yml pour le container influxdb. Le port d'écoute par défaut d'InfluxDB est le 8086.
- database = "telegraf" : le nom de la base données doit correspondre à la valeur de la directive INFLUX_DB déclarée dans votre docker-compose.yml pour le container influxdb.
- username = "telegraf_user" : cette ligne doit être décommentée et la valeur doit correspondre à celle de la directive INFLUXDB_USER déclarée dans votre docker-compose.yml pour le container influxdb.
- password = "telegraf_password" : cette ligne doit être décommentée et la valeur doit correspondre à celle de la directive INFLUXDB_USER_PASSWORD déclarée dans votre docker-compose.yml pour le container influxdb.
- [[inputs.docker]] : cette ligne doit être décommentée pour activer et lire les métriques liés à vos containers Docker.
- endpoint = "unix:///var/run/docker.sock" : cette ligne doit être décommentée pour préciser le socket d'écoute de votre processus Docker.
-
Démarrez les containers :
docker-compose up -d
-
Listez vos containers avec la commande
docker ps -a
:
Si vous êtes en local, vous pouvez désormais accéder à Grafana via http://localhost:3000.docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9d32077ff753 grafana/grafana:latest "/run.sh" 42 seconds ago Up 42 seconds 0.0.0.0:3000->3000/tcp grafana 4120c198969a telegraf:latest "/entrypoint.sh te..." 42 seconds ago Up 42 seconds 8092/udp, 8125/udp, 8094/tcp telegraf 0bd12f99c1ef influxdb:latest "/entrypoint.sh in..." 42 seconds ago Up 42 seconds 8086/tcp influxdb 68ff10e49913 busybox "sh" 42 seconds ago Up 42 seconds influxdb-data
Ubuntu Server 20.04 LTS
Edouard WATTECAMPS
Bonjour,
J’ai un souci avec le Docker-compose. Je tape la commande :
sudo curl -L https://github.com/docker/compose/releases/download/1.28.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
Puis :
sudo chmod +x /usr/local/bin/docker-compose
Mais la commande docker-compose -v m’indique /usr/local/bin/docker-compose: line 1: Not: command not found
Alors que j’ai bien le fichier docker-compose
Merci
Bonjour Laurent,
Sur quel système d’exploitation êtes-vous ?
Ubuntu 20.04 LTS
Essayez la 1ère commande en remplaçant la version par 1.27.4