Le kit du labo, à télécharger — https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr — par
git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3. Cette leçon installe Docker (étapes 1 à 3), récupère ce kit (étape 4), en fait le tour (étape 5), puis lance sa liste de contrôle (étape 6). Le démarrage lui-même est à la leçon 04.
Le tableau de bord d'une voiture ne s'allume tout en vert que si le moteur a assez d'essence et que la route est dégagée devant lui. .\labo.ps1 prerequis (ou ./labo.sh prerequis) joue ce rôle avant de démarrer la stack d'observabilité : Docker est le moteur, la mémoire allouée est l'essence, et les neuf ports du labo sont la route qui doit être libre. Tu ne lances demarrer (leçon 04) que lorsque cette liste de contrôle se termine par sa ligne verte : Tout est prêt.
Le labo est décrit dans un fichier docker-compose.yml et piloté par un script en deux versions : labo.ps1 (PowerShell 5.1 ou 7, Windows) et labo.sh (bash : Linux, macOS, WSL 2, Git Bash). Tu n'installes rien d'autre que Docker sur ta machine : Prometheus, Grafana, Loki, Alertmanager, Alloy, node-exporter, cAdvisor, l'API, le générateur de charge et le webhook tournent tous dans des conteneurs. Quatre de ces images sont construites sur ta machine au premier démarrage (api, charge, webhook depuis python:3.13-slim, et loki pour lui ajouter un binaire de vérification de santé) ; les six autres sont téléchargées telles quelles.
| Système | Ce que tu installes | Réglage de mémoire | Particularité |
|---|---|---|---|
| Windows 10/11 | Docker Desktop, moteur WSL 2 | fichier %UserProfile%\.wslconfig | Set-ExecutionPolicy si PowerShell refuse le script |
| macOS | Docker Desktop (Intel ou Apple Silicon) | Settings → Resources → Memory | rien d'autre ; curl est déjà présent |
| Linux | Docker Engine + plugin docker-compose-plugin + curl | la RAM de la machine, directement | groupe docker ; aucun réglage noyau n'est nécessaire |
Ce que vérifie prerequis, dans l'ordre : la commande docker existe ; le démon Docker répond ; docker compose (v2) est disponible ; curl est présent (version bash seulement : labo.ps1 utilise les commandes intégrées de PowerShell) ; la mémoire visible par Docker est d'au moins 2 Go (4 Go conseillés : entre 2 et 4, le script affiche un avertissement mais laisse passer) ; au moins deux processeurs ; et chacun des neuf ports du labo est libre, ou déjà utilisé par le labo lui-même.
| Port | Service | Port | Service | Port | Service |
|---|---|---|---|---|---|
| 9090 | Prometheus | 3100 | Loki | 8080 | cAdvisor |
| 9093 | Alertmanager | 12345 | Alloy | 8000 | API catalogue |
| 3000 | Grafana (GRAFANA_PORT) | 9100 | node-exporter | 8090 | webhook |
Le port 3000 est à part. C'est celui de Grafana, et c'est le port le plus demandé sur un poste de développeur : une application Node, un autre tableau de bord, un autre Grafana l'occupent souvent déjà. Le kit prévoit ce cas avec la variable d'environnement GRAFANA_PORT. Dans docker-compose.yml, la publication du port de Grafana s'écrit :
ports:
- "${GRAFANA_PORT:-3000}:3000"Ce qu'il faut lire : ${GRAFANA_PORT:-3000} vaut la variable si elle est définie, 3000 sinon. La partie droite (:3000) est le port dans le conteneur et ne change jamais ; la partie gauche est le port sur ta machine. Les scripts labo.ps1 et labo.sh lisent la même variable : prerequis vérifie le bon port, demarrer affiche la bonne URL et etat interroge Grafana au bon endroit. Documentation : Docker Compose — Interpolation.
Windows : installer Docker Desktop avec WSL 2. Télécharge Docker Desktop, laisse coché « Use WSL 2 instead of Hyper-V », redémarre si demandé, puis lance Docker Desktop et attends que l'icône de la baleine soit stable. Sous WSL 2, Docker prend par défaut la moitié de ta RAM ; sur une machine à 8 Go, c'est juste. Pour lui garantir 4 Go, crée le fichier C:\Users\<toi>\.wslconfig :
notepad $env:UserProfile\.wslconfigColle ces lignes, enregistre, puis redémarre la machine virtuelle WSL :
[wsl2]
memory=4GB
processors=4wsl --shutdownRelance ensuite Docker Desktop.
macOS : installer Docker Desktop et vérifier la mémoire. Installe le .dmg correspondant à ta puce, lance Docker Desktop, puis ouvre Settings → Resources → Advanced et vérifie que le curseur Memory est à 4 Go ou plus. Clique « Apply & restart » si tu l'as changé.
Linux : Docker Engine, plugin Compose, curl et groupe docker. Installe Docker Engine et le plugin Compose selon la documentation de ta distribution (paquets docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin), plus curl s'il manque. Puis, pour ne pas taper sudo à chaque commande :
sudo usermod -aG docker $USER
newgrp docker # ou déconnecte-toi puis reconnecte-toi
docker run --rm hello-worldRécupérer le kit du labo.
git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3
cd lab3Toutes les commandes du cours se lancent depuis ce dossier lab3. Si tu n'as pas git, le bouton « Code → Download ZIP » de la page GitHub donne le même contenu : décompresse-le et renomme le dossier en lab3.
Faire le tour de l'arborescence. Liste les fichiers (ls ou Get-ChildItem -Recurse -File). Sur la machine du cours, le kit contient 32 fichiers :
docker-compose.yml les 10 services, leurs ports, leurs volumes, leurs healthchecks
labo.ps1 le script de pilotage, Windows
labo.sh le même, bash
README.md le mode d'emploi du kit
LICENSE .gitattributes .gitignore
api/app.py l'API catalogue (FastAPI + prometheus_client)
api/donnees/cours.json les 64 cours
api/Dockerfile api/requirements.txt
charge/charge.py le générateur de trafic
charge/Dockerfile charge/requirements.txt
webhook/webhook.py le récepteur d'alertes
webhook/Dockerfile webhook/requirements.txt
prometheus/prometheus.yml les 8 cibles, scrape toutes les 15 s
prometheus/regles/alertes.yml les 10 règles d'alerte
prometheus/regles/enregistrement.yml les règles d'enregistrement (api:taux_erreurs_5m…)
alertmanager/alertmanager.yml le routage vers le webhook
loki/loki.yml loki/Dockerfile
alloy/config.alloy la collecte des logs Docker → Loki
grafana/provisioning/datasources/sources.yml Prometheus, Loki, Alertmanager
grafana/provisioning/dashboards/tableaux-de-bord.yml
grafana/provisioning/dashboards/api-catalogue.json
grafana/provisioning/dashboards/hote-conteneurs.json
grafana/provisioning/dashboards/journaux-api.json
modules/01-le-labo/requetes.txt les requêtes PromQL de ce module
modules/01-le-labo/requetes-logql.txt les requêtes LogQL de ce module
outils/generer-cours.py le script qui a fabriqué cours.jsonCe qu'il faut voir : un dossier par service, et un dossier modules/ où chaque module du cours range ses fichiers de travail. Tu n'as rien à modifier avant le module 3.
Lancer la liste de contrôle.
.\labo.ps1 prerequis./labo.sh prerequisSur la machine du cours (Windows 11, Docker Desktop, PowerShell 5.1), avant le premier démarrage :
== Prérequis ==
✔ docker : Docker version 29.3.1, build c2be9cc
✔ le démon Docker répond
✔ docker compose : 5.1.1
✔ mémoire disponible pour Docker : 31 Go
✔ processeurs : 20
✔ port 9090 libre
✔ port 9093 libre
✔ port 3000 libre
✔ port 3100 libre
✔ port 12345 libre
✔ port 9100 libre
✔ port 8080 libre
✔ port 8000 libre
✔ port 8090 libre
Tout est prêt. Lancez : .\labo.ps1 demarrerCe qu'il faut voir : quatorze coches, et la dernière ligne verte. Les versions et la mémoire dépendent de ta machine. La version bash affiche une ligne de plus, ✔ curl : présent, et se termine par Lancez : ./labo.sh demarrer. Une fois le labo démarré, relancer prerequis affiche port 9090 : utilisé par le labo lui-même au lieu de libre : c'est normal, et c'est ce que tu verras à la leçon 04.
Si le port 3000 est déjà pris : choisir le port de Grafana. Définis GRAFANA_PORT avant prerequis, et garde-la définie pour demarrer et etat :
$env:GRAFANA_PORT = 3001
.\labo.ps1 prerequisGRAFANA_PORT=3001 ./labo.sh prerequisLa liste de contrôle affiche alors ✔ port 3001 libre à la place de la ligne du port 3000, et Grafana répondra sur http://localhost:3001. Toutes les adresses du cours qui mentionnent le port 3000 restent valables : remplace 3000 par 3001. La variable ne vit que dans le terminal courant ; si tu ouvres un autre terminal, redéfinis-la.
Les messages ci-dessous ont été provoqués pour de vrai sur la machine du cours.
Windows seulement — PowerShell refuse le script.
.\labo.ps1 : Impossible de charger le fichier C:\Users\<toi>\lab3\labo.ps1, car l'exécution de
scripts est désactivée sur ce système. Pour plus d'informations, consultez about_Execution_Policies à l'adresse
https://go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : Erreur de sécurité : (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccessLa stratégie d'exécution par défaut de Windows bloque les scripts non signés. Autorise-les pour ton compte seulement :
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedRéponds O (oui) et relance .\labo.ps1 prerequis. C'est aussi ce que labo.ps1 affiche quand tu le lances sans argument.
Docker n'est pas installé, ou le terminal a été ouvert avant l'installation.
docker : Le terme «docker» n'est pas reconnu comme nom d'applet de commande, fonction, fichier de script ou
programme exécutable. Vérifiez l'orthographe du nom, ou si un chemin d'accès existe, vérifiez que le chemin d'accès
est correct et réessayez.(docker: command not found sous bash.) Ferme et rouvre le terminal : le PATH n'a pas été rechargé. Si le message persiste, Docker n'est pas installé.
Le démon ne répond pas. prerequis affiche une croix sur le démon Docker répond. Sous Windows et macOS, Docker Desktop n'est pas lancé, ou encore en train de démarrer : attends que l'icône soit stable. Linux natif seulement — permission denied while trying to connect to the Docker daemon socket : ton utilisateur n'est pas dans le groupe docker, ou tu ne t'es pas reconnecté après usermod ; id -nG doit lister docker.
Le port 3000 est déjà occupé par un autre programme. Quand le labo n'est pas encore démarré et qu'un autre programme écoute sur le port de Grafana, prerequis affiche la croix et le remède sur la même ligne :
✘ port 3000 déjà occupé par un autre programme — choisissez un autre port pour Grafana : $env:GRAFANA_PORT = 3001 puis relancez
Corrigez les points marqués ✘ puis relancez .\labo.ps1 prerequisFais ce que dit la ligne (étape 7). Pour un autre port occupé (9090, 8000…), le message est déjà occupé par un autre programme — arrêtez-le ou changez le port dans docker-compose.yml : trouve le programme (Get-NetTCPConnection -LocalPort 9090 sous Windows, sudo ss -ltnp | grep 9090 sous Linux) et arrête-le, ou change la partie gauche du port dans docker-compose.yml ("9091:9090").
Windows seulement — pas assez de mémoire. ✘ mémoire pour Docker : 1 Go — il en faut au moins 2 (fichier %UserProfile%\.wslconfig : [wsl2] memory=4GB, puis wsl --shutdown). Fais l'étape 1. Entre 2 et 4 Go, le script affiche un avertissement au lieu d'une croix et laisse passer.
Git Bash sous Windows — les deux scripts fonctionnent. Sur la machine du cours, ./labo.sh prerequis lancé depuis Git Bash donne la même liste que labo.ps1, avec la ligne ✔ curl : présent en plus et les couleurs affichées. Tu peux donc suivre les annexes bash du cours sous Windows si tu préfères ce terminal ; la variable se passe alors comme sous Linux : GRAFANA_PORT=3001 ./labo.sh prerequis.
Ce labo n'exige qu'une seule chose sur ta machine : Docker (Desktop ou Engine, avec le plugin Compose, et curl pour la version bash) ; les dix services tournent tous dans des conteneurs, dont quatre construits sur ta machine au premier démarrage. Compte 2 Go de mémoire minimum pour Docker, 4 Go conseillés ; sous Windows, ça se règle dans %UserProfile%\.wslconfig suivi de wsl --shutdown. Neuf ports doivent être libres : 9090, 9093, 3000, 3100, 12345, 9100, 8080, 8000 et 8090. Le kit se récupère avec git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3, puis cd lab3 : 32 fichiers, un dossier par service, un dossier modules/ pour le cours. .\labo.ps1 prerequis ou ./labo.sh prerequis est ta liste de contrôle : quatorze coches (quinze en bash) et Tout est prêt. avant de démarrer. Si le port 3000 est pris, GRAFANA_PORT=3001 déplace Grafana sans toucher au reste ; la variable doit rester définie pour prerequis, demarrer et etat. Si PowerShell refuse le script : Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.
.wslconfig) : toutes les clés du fichier, dont memory, processors et swap.${VARIABLE:-défaut} utilisée pour GRAFANA_PORT, et le fichier .env qui permet de fixer la variable une fois pour toutes à la racine de lab3.RemoteSigned, et pourquoi c'est le réglage recommandé pour un poste de travail.demarrer puis de etat, et le tour des neuf interfaces.