El kit del labo, para descargar — https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr — mediante
git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3. Esta lección instala Docker (pasos 1 a 3), obtiene ese kit (paso 4), lo recorre (paso 5), y luego lanza su lista de control (paso 6). El arranque en sí está en la lección 04.
El tablero de un automóvil solo se enciende todo en verde si el motor tiene suficiente combustible y la ruta está despejada delante de él. .\labo.ps1 prerequis (o ./labo.sh prerequis) desempeña ese papel antes de iniciar la pila de observabilidad: Docker es el motor, la memoria asignada es el combustible, y los nueve puertos del labo son la ruta que debe estar libre. Solo lanzas demarrer (lección 04) cuando esa lista de control termina con su línea verde: Tout est prêt.
El labo está descrito en un archivo docker-compose.yml y controlado por un script en dos versiones: labo.ps1 (PowerShell 5.1 o 7, Windows) y labo.sh (bash: Linux, macOS, WSL 2, Git Bash). No instalas nada más que Docker en tu máquina: Prometheus, Grafana, Loki, Alertmanager, Alloy, node-exporter, cAdvisor, la API, el generador de carga y el webhook corren todos en contenedores. Cuatro de esas imágenes se construyen en tu máquina en el primer arranque (api, charge, webhook a partir de python:3.13-slim, y loki para agregarle un binario de verificación de salud); las otras seis se descargan tal cual.
| Sistema | Lo que instalas | Ajuste de memoria | Particularidad |
|---|---|---|---|
| Windows 10/11 | Docker Desktop, motor WSL 2 | archivo %UserProfile%\.wslconfig | Set-ExecutionPolicy si PowerShell rechaza el script |
| macOS | Docker Desktop (Intel o Apple Silicon) | Settings → Resources → Memory | nada más; curl ya está presente |
| Linux | Docker Engine + plugin docker-compose-plugin + curl | la RAM de la máquina, directamente | grupo docker; no se necesita ningún ajuste del kernel |
Lo que verifica prerequis, en orden: el comando docker existe; el demonio Docker responde; docker compose (v2) está disponible; curl está presente (solo versión bash: labo.ps1 usa los comandos integrados de PowerShell); la memoria visible para Docker es de al menos 2 GB (4 GB recomendados: entre 2 y 4, el script muestra una advertencia pero deja pasar); al menos dos procesadores; y cada uno de los nueve puertos del labo está libre, o ya está en uso por el propio labo.
| Puerto | Servicio | Puerto | Servicio | Puerto | Servicio |
|---|---|---|---|---|---|
| 9090 | Prometheus | 3100 | Loki | 8080 | cAdvisor |
| 9093 | Alertmanager | 12345 | Alloy | 8000 | API de catálogo |
| 3000 | Grafana (GRAFANA_PORT) | 9100 | node-exporter | 8090 | webhook |
El puerto 3000 es un caso aparte. Es el de Grafana, y es el puerto más solicitado en una computadora de desarrollador: una aplicación Node, otro tablero de control, otro Grafana lo ocupan a menudo. El kit prevé este caso con la variable de entorno GRAFANA_PORT. En docker-compose.yml, la publicación del puerto de Grafana se escribe:
ports:
- "${GRAFANA_PORT:-3000}:3000"Lo que hay que leer: ${GRAFANA_PORT:-3000} vale la variable si está definida, 3000 si no. La parte derecha (:3000) es el puerto dentro del contenedor y nunca cambia; la parte izquierda es el puerto en tu máquina. Los scripts labo.ps1 y labo.sh leen la misma variable: prerequis verifica el puerto correcto, demarrer muestra la URL correcta y etat consulta Grafana en el lugar correcto. Documentación: Docker Compose — Interpolation.
Windows: instalar Docker Desktop con WSL 2. Descarga Docker Desktop, deja marcado «Use WSL 2 instead of Hyper-V», reinicia si se solicita, luego lanza Docker Desktop y espera a que el ícono de la ballena esté estable. Bajo WSL 2, Docker toma por defecto la mitad de tu RAM; en una máquina de 8 GB, es justo. Para garantizarle 4 GB, crea el archivo C:\Users\<tú>\.wslconfig:
notepad $env:UserProfile\.wslconfigPega estas líneas, guarda, y luego reinicia la máquina virtual WSL:
[wsl2]
memory=4GB
processors=4wsl --shutdownDespués vuelve a lanzar Docker Desktop.
macOS: instalar Docker Desktop y verificar la memoria. Instala el .dmg correspondiente a tu chip, lanza Docker Desktop, luego abre Settings → Resources → Advanced y verifica que el control deslizante Memory esté en 4 GB o más. Haz clic en «Apply & restart» si lo cambiaste.
Linux: Docker Engine, plugin Compose, curl y grupo docker. Instala Docker Engine y el plugin Compose según la documentación de tu distribución (paquetes docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin), más curl si falta. Luego, para no escribir sudo en cada comando:
sudo usermod -aG docker $USER
newgrp docker # ou déconnecte-toi puis reconnecte-toi
docker run --rm hello-worldObtener el kit del labo.
git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3
cd lab3Todos los comandos del curso se lanzan desde esta carpeta lab3. Si no tienes git, el botón «Code → Download ZIP» de la página de GitHub da el mismo contenido: descomprímelo y renombra la carpeta como lab3.
Recorrer la estructura de carpetas. Lista los archivos (ls o Get-ChildItem -Recurse -File). En la máquina del curso, el kit contiene 32 archivos:
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.jsonLo que hay que ver: una carpeta por servicio, y una carpeta modules/ donde cada módulo del curso guarda sus archivos de trabajo. No tienes nada que modificar antes del módulo 3.
Lanzar la lista de control.
.\labo.ps1 prerequis./labo.sh prerequisEn la máquina del curso (Windows 11, Docker Desktop, PowerShell 5.1), antes del primer arranque:
== 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 demarrerLo que hay que ver: catorce marcas de verificación, y la última línea en verde. Las versiones y la memoria dependen de tu máquina. La versión bash muestra una línea más, ✔ curl : présent, y termina con Lancez : ./labo.sh demarrer. Una vez iniciado el labo, relanzar prerequis muestra port 9090 : utilisé par le labo lui-même en lugar de libre: es normal, y es lo que verás en la lección 04.
Si el puerto 3000 ya está ocupado: elegir el puerto de Grafana. Define GRAFANA_PORT antes de prerequis, y mantenla definida para demarrer y etat:
$env:GRAFANA_PORT = 3001
.\labo.ps1 prerequisGRAFANA_PORT=3001 ./labo.sh prerequisLa lista de control muestra entonces ✔ port 3001 libre en lugar de la línea del puerto 3000, y Grafana responderá en http://localhost:3001. Todas las direcciones del curso que mencionan el puerto 3000 siguen siendo válidas: reemplaza 3000 por 3001. La variable solo vive en la terminal actual; si abres otra terminal, vuelve a definirla.
Los mensajes siguientes fueron provocados de verdad en la máquina del curso.
Solo Windows — PowerShell rechaza el 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 política de ejecución por defecto de Windows bloquea los scripts sin firma. Autorízalos solo para tu cuenta:
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedResponde O (sí) y relanza .\labo.ps1 prerequis. Es también lo que labo.ps1 muestra cuando lo lanzas sin argumento.
Docker no está instalado, o la terminal se abrió antes de la instalación.
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 en bash.) Cierra y vuelve a abrir la terminal: el PATH no se recargó. Si el mensaje persiste, Docker no está instalado.
El demonio no responde. prerequis muestra una cruz en le démon Docker répond. En Windows y macOS, Docker Desktop no está lanzado, o todavía está arrancando: espera a que el ícono esté estable. Solo Linux nativo — permission denied while trying to connect to the Docker daemon socket: tu usuario no está en el grupo docker, o no volviste a iniciar sesión después de usermod; id -nG debe listar docker.
El puerto 3000 ya está ocupado por otro programa. Cuando el labo todavía no está iniciado y otro programa escucha en el puerto de Grafana, prerequis muestra la cruz y el remedio en la misma línea:
✘ 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 prerequisHaz lo que dice la línea (paso 7). Para otro puerto ocupado (9090, 8000…), el mensaje es déjà occupé par un autre programme — arrêtez-le ou changez le port dans docker-compose.yml: encuentra el programa (Get-NetTCPConnection -LocalPort 9090 en Windows, sudo ss -ltnp | grep 9090 en Linux) y deténlo, o cambia la parte izquierda del puerto en docker-compose.yml ("9091:9090").
Solo Windows — no hay suficiente memoria. ✘ mémoire pour Docker : 1 Go — il en faut au moins 2 (fichier %UserProfile%\.wslconfig : [wsl2] memory=4GB, puis wsl --shutdown). Haz el paso 1. Entre 2 y 4 GB, el script muestra una advertencia en lugar de una cruz y deja pasar.
Git Bash en Windows — los dos scripts funcionan. En la máquina del curso, ./labo.sh prerequis lanzado desde Git Bash da la misma lista que labo.ps1, con la línea ✔ curl : présent adicional y los colores mostrados. Puedes por lo tanto seguir los anexos bash del curso en Windows si prefieres esa terminal; la variable se pasa entonces como en Linux: GRAFANA_PORT=3001 ./labo.sh prerequis.
Este labo exige una sola cosa en tu máquina: Docker (Desktop o Engine, con el plugin Compose, y curl para la versión bash); los diez servicios corren todos en contenedores, cuatro de ellos construidos en tu máquina en el primer arranque. Calcula 2 GB de memoria mínimo para Docker, 4 GB recomendados; en Windows, se ajusta en %UserProfile%\.wslconfig seguido de wsl --shutdown. Nueve puertos deben estar libres: 9090, 9093, 3000, 3100, 12345, 9100, 8080, 8000 y 8090. El kit se obtiene con git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3, luego cd lab3: 32 archivos, una carpeta por servicio, una carpeta modules/ para el curso. .\labo.ps1 prerequis o ./labo.sh prerequis es tu lista de control: catorce marcas (quince en bash) y Tout est prêt. antes de iniciar. Si el puerto 3000 está ocupado, GRAFANA_PORT=3001 desplaza Grafana sin tocar el resto; la variable debe seguir definida para prerequis, demarrer y etat. Si PowerShell rechaza el script: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.
.wslconfig): todas las claves del archivo, entre ellas memory, processors y swap.${VARIABLE:-défaut} usada para GRAFANA_PORT, y el archivo .env que permite fijar la variable de una vez por todas en la raíz de lab3.RemoteSigned, y por qué es el ajuste recomendado para una estación de trabajo.demarrer y luego de etat, y el recorrido de las nueve interfaces.