O kit do labo, para baixar — https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr — via
git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3. Esta lição instala o Docker (etapas 1 a 3), obtém esse kit (etapa 4), faz um tour por ele (etapa 5), depois executa sua checklist (etapa 6). A inicialização em si é na lição 04.
O painel de controle de um carro só fica todo verde se o motor tem combustível suficiente e a estrada está livre na frente dele. .\labo.ps1 prerequis (ou ./labo.sh prerequis) desempenha esse papel antes de iniciar a stack de observabilidade: o Docker é o motor, a memória alocada é o combustível, e as nove portas do labo são a estrada que precisa estar livre. Você só executa demarrer (lição 04) quando essa checklist termina com sua linha verde: Tout est prêt.
O labo é descrito em um arquivo docker-compose.yml e controlado por um script em duas versões: labo.ps1 (PowerShell 5.1 ou 7, Windows) e labo.sh (bash: Linux, macOS, WSL 2, Git Bash). Você não instala mais nada além do Docker na sua máquina: Prometheus, Grafana, Loki, Alertmanager, Alloy, node-exporter, cAdvisor, a API, o gerador de carga e o webhook rodam todos em contêineres. Quatro dessas imagens são construídas na sua máquina na primeira inicialização (api, charge, webhook a partir de python:3.13-slim, e loki para adicionar a ela um binário de verificação de saúde); as outras seis são baixadas prontas.
| Sistema | O que você instala | Ajuste de memória | Particularidade |
|---|---|---|---|
| Windows 10/11 | Docker Desktop, motor WSL 2 | arquivo %UserProfile%\.wslconfig | Set-ExecutionPolicy se o PowerShell recusar o script |
| macOS | Docker Desktop (Intel ou Apple Silicon) | Settings → Resources → Memory | nada mais; o curl já vem instalado |
| Linux | Docker Engine + plugin docker-compose-plugin + curl | a RAM da máquina, diretamente | grupo docker; nenhum ajuste de kernel é necessário |
O que prerequis verifica, na ordem: se o comando docker existe; se o daemon do Docker responde; se o docker compose (v2) está disponível; se o curl está presente (só na versão bash: labo.ps1 usa os comandos integrados do PowerShell); se a memória visível pelo Docker é de pelo menos 2 GB (4 GB recomendados: entre 2 e 4, o script exibe um aviso mas deixa passar); pelo menos dois processadores; e cada uma das nove portas do labo está livre, ou já está sendo usada pelo próprio labo.
| Porta | Serviço | Porta | Serviço | Porta | Serviço |
|---|---|---|---|---|---|
| 9090 | Prometheus | 3100 | Loki | 8080 | cAdvisor |
| 9093 | Alertmanager | 12345 | Alloy | 8000 | API catálogo |
| 3000 | Grafana (GRAFANA_PORT) | 9100 | node-exporter | 8090 | webhook |
A porta 3000 é diferente. É a do Grafana, e é a porta mais disputada em uma máquina de desenvolvedor: uma aplicação Node, outro painel de controle, outro Grafana costumam já ocupá-la. O kit prevê esse caso com a variável de ambiente GRAFANA_PORT. Em docker-compose.yml, a publicação da porta do Grafana é escrita assim:
ports:
- "${GRAFANA_PORT:-3000}:3000"O que é preciso ler: ${GRAFANA_PORT:-3000} vale a variável se ela estiver definida, 3000 caso contrário. A parte direita (:3000) é a porta dentro do contêiner e nunca muda; a parte esquerda é a porta na sua máquina. Os scripts labo.ps1 e labo.sh leem a mesma variável: prerequis verifica a porta certa, demarrer exibe a URL certa e etat consulta o Grafana no lugar certo. Documentação: Docker Compose — Interpolation.
Windows: instalar o Docker Desktop com WSL 2. Baixe o Docker Desktop, deixe marcado "Use WSL 2 instead of Hyper-V", reinicie se solicitado, depois abra o Docker Desktop e espere o ícone da baleia ficar estável. No WSL 2, o Docker por padrão usa a metade da sua RAM; em uma máquina com 8 GB, isso é o suficiente. Para garantir 4 GB a ele, crie o arquivo C:\Users\<voce>\.wslconfig:
notepad $env:UserProfile\.wslconfigCole estas linhas, salve, depois reinicie a máquina virtual WSL:
[wsl2]
memory=4GB
processors=4wsl --shutdownAbra o Docker Desktop novamente.
macOS: instalar o Docker Desktop e verificar a memória. Instale o .dmg correspondente ao seu chip, abra o Docker Desktop, depois abra Settings → Resources → Advanced e verifique se o controle deslizante Memory está em 4 GB ou mais. Clique em "Apply & restart" se você o alterou.
Linux: Docker Engine, plugin Compose, curl e grupo docker. Instale o Docker Engine e o plugin Compose conforme a documentação da sua distribuição (pacotes docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin), mais curl se estiver faltando. Depois, para não precisar digitar sudo em cada comando:
sudo usermod -aG docker $USER
newgrp docker # ou desconecte-se e reconecte-se
docker run --rm hello-worldObter o kit do labo.
git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3
cd lab3Todos os comandos do curso são executados a partir dessa pasta lab3. Se você não tem git, o botão "Code → Download ZIP" da página do GitHub dá o mesmo conteúdo: descompacte e renomeie a pasta para lab3.
Fazer o tour pela árvore de arquivos. Liste os arquivos (ls ou Get-ChildItem -Recurse -File). Na máquina do curso, o kit contém 32 arquivos:
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.jsonO que é preciso ver: uma pasta por serviço, e uma pasta modules/ onde cada módulo do curso guarda seus arquivos de trabalho. Você não precisa modificar nada até o módulo 3.
Executar a checklist.
.\labo.ps1 prerequis./labo.sh prerequisNa máquina do curso (Windows 11, Docker Desktop, PowerShell 5.1), antes da primeira inicialização:
== 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 demarrerO que é preciso ver: quatorze marcas de verificação, e a última linha verde. As versões e a memória dependem da sua máquina. A versão bash exibe uma linha extra, ✔ curl : présent, e termina com Lancez : ./labo.sh demarrer. Depois que o labo estiver iniciado, executar prerequis novamente exibirá port 9090 : utilisé par le labo lui-même em vez de libre: isso é normal, e é o que você verá na lição 04.
Se a porta 3000 já estiver ocupada: escolher a porta do Grafana. Defina GRAFANA_PORT antes de prerequis, e mantenha-a definida para demarrer e etat:
$env:GRAFANA_PORT = 3001
.\labo.ps1 prerequisGRAFANA_PORT=3001 ./labo.sh prerequisA checklist então exibe ✔ port 3001 libre no lugar da linha da porta 3000, e o Grafana responderá em http://localhost:3001. Todos os endereços do curso que mencionam a porta 3000 continuam válidos: substitua 3000 por 3001. A variável só existe no terminal atual; se você abrir outro terminal, defina-a novamente.
As mensagens abaixo foram provocadas de verdade na máquina do curso.
Somente Windows — o PowerShell recusa o 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 : UnauthorizedAccessA política de execução padrão do Windows bloqueia scripts não assinados. Permita-os apenas para sua conta:
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedResponda O (sim) e execute novamente .\labo.ps1 prerequis. É isso também que labo.ps1 exibe quando você o executa sem argumento.
O Docker não está instalado, ou o terminal foi aberto antes da instalação.
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 no bash.) Feche e reabra o terminal: o PATH não foi recarregado. Se a mensagem persistir, o Docker não está instalado.
O daemon não responde. prerequis exibe um X em le démon Docker répond. No Windows e no macOS, o Docker Desktop não foi iniciado, ou ainda está iniciando: espere o ícone ficar estável. Somente Linux nativo — permission denied while trying to connect to the Docker daemon socket: seu usuário não está no grupo docker, ou você não se reconectou depois do usermod; id -nG deve listar docker.
A porta 3000 já está ocupada por outro programa. Quando o labo ainda não foi iniciado e outro programa está escutando na porta do Grafana, prerequis exibe o X e o remédio na mesma linha:
✘ 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 prerequisFaça o que a linha diz (etapa 7). Para outra porta ocupada (9090, 8000…), a mensagem é déjà occupé par un autre programme — arrêtez-le ou changez le port dans docker-compose.yml: encontre o programa (Get-NetTCPConnection -LocalPort 9090 no Windows, sudo ss -ltnp | grep 9090 no Linux) e pare-o, ou mude a parte esquerda da porta em docker-compose.yml ("9091:9090").
Somente Windows — memória insuficiente. ✘ mémoire pour Docker : 1 Go — il en faut au moins 2 (fichier %UserProfile%\.wslconfig : [wsl2] memory=4GB, puis wsl --shutdown). Faça a etapa 1. Entre 2 e 4 GB, o script exibe um aviso em vez de um X e deixa passar.
Git Bash no Windows — os dois scripts funcionam. Na máquina do curso, ./labo.sh prerequis executado a partir do Git Bash dá a mesma checklist que labo.ps1, com a linha ✔ curl : présent extra e as cores exibidas. Você pode então seguir os anexos bash do curso no Windows se preferir esse terminal; a variável se passa então como no Linux: GRAFANA_PORT=3001 ./labo.sh prerequis.
Este labo exige apenas uma coisa na sua máquina: Docker (Desktop ou Engine, com o plugin Compose, e curl para a versão bash); os dez serviços rodam todos em contêineres, dos quais quatro são construídos na sua máquina na primeira inicialização. Conte com 2 GB de memória no mínimo para o Docker, 4 GB recomendados; no Windows, isso se ajusta em %UserProfile%\.wslconfig seguido de wsl --shutdown. Nove portas precisam estar livres: 9090, 9093, 3000, 3100, 12345, 9100, 8080, 8000 e 8090. O kit se obtém com git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3, depois cd lab3: 32 arquivos, uma pasta por serviço, uma pasta modules/ para o curso. .\labo.ps1 prerequis ou ./labo.sh prerequis é sua checklist: quatorze marcas de verificação (quinze no bash) e Tout est prêt. antes de iniciar. Se a porta 3000 estiver ocupada, GRAFANA_PORT=3001 move o Grafana sem tocar no resto; a variável precisa continuar definida para prerequis, demarrer e etat. Se o PowerShell recusar o script: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.
.wslconfig): todas as chaves do arquivo, incluindo memory, processors e swap.${VARIABLE:-padrao} usada para GRAFANA_PORT, e o arquivo .env que permite fixar a variável de uma vez por todas na raiz de lab3.RemoteSigned, e por que essa é a configuração recomendada para uma estação de trabalho.demarrer e depois de etat, e o tour pelas nove interfaces.