Το kit του εργαστηρίου, να το κατεβάσεις — https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr — με
git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3. Αυτό το μάθημα εγκαθιστά το Docker (βήματα 1 έως 3), ανακτά αυτό το kit (βήμα 4), κάνει τον γύρο του (βήμα 5), και μετά εκτελεί τη λίστα ελέγχου του (βήμα 6). Η ίδια η εκκίνηση είναι στο μάθημα 04.
Το ταμπλό ενός αυτοκινήτου ανάβει ολόκληρο πράσινο μόνο αν ο κινητήρας έχει αρκετή βενζίνη και ο δρόμος είναι ελεύθερος μπροστά του. Το .\labo.ps1 prerequis (ή ./labo.sh prerequis) παίζει αυτόν τον ρόλο πριν ξεκινήσει η στοίβα παρατηρησιμότητας: το Docker είναι ο κινητήρας, η κατανεμημένη μνήμη είναι η βενζίνη, και οι εννέα θύρες του εργαστηρίου είναι ο δρόμος που πρέπει να είναι ελεύθερος. Εκτελείς το demarrer (μάθημα 04) μόνο όταν αυτή η λίστα ελέγχου τελειώνει με την πράσινη γραμμή της: Tout est prêt.
Το εργαστήριο περιγράφεται σε ένα αρχείο docker-compose.yml και ελέγχεται από ένα σενάριο σε δύο εκδόσεις: labo.ps1 (PowerShell 5.1 ή 7, Windows) και labo.sh (bash: Linux, macOS, WSL 2, Git Bash). Δεν εγκαθιστάς τίποτα άλλο εκτός από το Docker στον υπολογιστή σου: Prometheus, Grafana, Loki, Alertmanager, Alloy, node-exporter, cAdvisor, το API, η γεννήτρια φορτίου και το webhook τρέχουν όλα μέσα σε containers. Τέσσερις από αυτές τις εικόνες κατασκευάζονται στον υπολογιστή σου στην πρώτη εκκίνηση (api, charge, webhook από python:3.13-slim, και loki για να του προστεθεί ένα δυαδικό ελέγχου υγείας)· οι άλλες έξι κατεβαίνουν ως έχουν.
| Σύστημα | Τι εγκαθιστάς | Ρύθμιση μνήμης | Ιδιαιτερότητα |
|---|---|---|---|
| Windows 10/11 | Docker Desktop, μηχανή WSL 2 | αρχείο %UserProfile%\.wslconfig | Set-ExecutionPolicy αν το PowerShell αρνείται το σενάριο |
| macOS | Docker Desktop (Intel ή Apple Silicon) | Settings → Resources → Memory | τίποτα άλλο· το curl είναι ήδη παρόν |
| Linux | Docker Engine + plugin docker-compose-plugin + curl | η RAM του μηχανήματος, απευθείας | ομάδα docker· καμία ρύθμιση πυρήνα δεν είναι απαραίτητη |
Τι ελέγχει το prerequis, με τη σειρά: η εντολή docker υπάρχει· ο δαίμονας Docker απαντά· το docker compose (v2) είναι διαθέσιμο· το curl είναι παρόν (μόνο στην έκδοση bash: το labo.ps1 χρησιμοποιεί τις ενσωματωμένες εντολές του PowerShell)· η μνήμη που βλέπει το Docker είναι τουλάχιστον 2 GB (4 GB συνιστώνται: μεταξύ 2 και 4, το σενάριο εμφανίζει μια προειδοποίηση αλλά αφήνει να περάσει)· τουλάχιστον δύο επεξεργαστές· και καθεμία από τις εννέα θύρες του εργαστηρίου είναι ελεύθερη, ή ήδη σε χρήση από το ίδιο το εργαστήριο.
| Θύρα | Υπηρεσία | Θύρα | Υπηρεσία | Θύρα | Υπηρεσία |
|---|---|---|---|---|---|
| 9090 | Prometheus | 3100 | Loki | 8080 | cAdvisor |
| 9093 | Alertmanager | 12345 | Alloy | 8000 | API καταλόγου |
| 3000 | Grafana (GRAFANA_PORT) | 9100 | node-exporter | 8090 | webhook |
Η θύρα 3000 είναι ξεχωριστή περίπτωση. Είναι αυτή του Grafana, και είναι η πιο ζητούμενη θύρα σε έναν σταθμό προγραμματιστή: μια εφαρμογή Node, ένας άλλος πίνακας ελέγχου, ένα άλλο Grafana την καταλαμβάνουν συχνά ήδη. Το kit προβλέπει αυτή την περίπτωση με τη μεταβλητή περιβάλλοντος GRAFANA_PORT. Στο docker-compose.yml, η δημοσίευση της θύρας του Grafana γράφεται:
ports:
- "${GRAFANA_PORT:-3000}:3000"Τι πρέπει να διαβάσεις: το ${GRAFANA_PORT:-3000} ισούται με τη μεταβλητή αν είναι ορισμένη, 3000 αλλιώς. Το δεξιό μέρος (:3000) είναι η θύρα μέσα στο container και δεν αλλάζει ποτέ· το αριστερό μέρος είναι η θύρα στον δικό σου υπολογιστή. Τα σενάρια labo.ps1 και labo.sh διαβάζουν την ίδια μεταβλητή: το prerequis ελέγχει τη σωστή θύρα, το demarrer εμφανίζει το σωστό URL και το etat ερωτά το Grafana στο σωστό σημείο. Τεκμηρίωση: Docker Compose — Interpolation.
Windows: εγκατάσταση του Docker Desktop με WSL 2. Κατέβασε το Docker Desktop, άφησε τσεκαρισμένο το «Use WSL 2 instead of Hyper-V», επανεκκίνησε αν ζητηθεί, μετά εκκίνησε το Docker Desktop και περίμενε το εικονίδιο της φάλαινας να σταθεροποιηθεί. Κάτω από WSL 2, το Docker παίρνει από προεπιλογή τη μισή RAM σου· σε ένα μηχάνημα με 8 GB, είναι οριακό. Για να του εγγυηθείς 4 GB, δημιούργησε το αρχείο C:\Users\<εσύ>\.wslconfig:
notepad $env:UserProfile\.wslconfigΕπικόλλησε αυτές τις γραμμές, αποθήκευσε, και μετά επανεκκίνησε την εικονική μηχανή WSL:
[wsl2]
memory=4GB
processors=4wsl --shutdownΞαναεκκίνησε στη συνέχεια το Docker Desktop.
macOS: εγκατάσταση του Docker Desktop και έλεγχος της μνήμης. Εγκατάστησε το .dmg που αντιστοιχεί στο τσιπ σου, εκκίνησε το Docker Desktop, μετά άνοιξε Settings → Resources → Advanced και έλεγξε ότι ο ρυθμιστής Memory είναι στα 4 GB ή περισσότερο. Κάνε κλικ στο «Apply & restart» αν το άλλαξες.
Linux: Docker Engine, plugin Compose, curl και ομάδα docker. Εγκατάστησε το Docker Engine και το plugin Compose σύμφωνα με την τεκμηρίωση της διανομής σου (πακέτα docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin), πλέον το curl αν λείπει. Μετά, για να μην πληκτρολογείς sudo σε κάθε εντολή:
sudo usermod -aG docker $USER
newgrp docker # ou déconnecte-toi puis reconnecte-toi
docker run --rm hello-worldΑνάκτηση του kit του εργαστηρίου.
git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3
cd lab3Όλες οι εντολές του μαθήματος εκτελούνται από αυτόν τον φάκελο lab3. Αν δεν έχεις git, το κουμπί «Code → Download ZIP» της σελίδας GitHub δίνει το ίδιο περιεχόμενο: αποσυμπίεσέ το και μετονόμασε τον φάκελο σε lab3.
Γύρος της δενδρικής δομής. Κατάγραψε τα αρχεία (ls ή Get-ChildItem -Recurse -File). Στο μηχάνημα του μαθήματος, το kit περιέχει 32 αρχεία:
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.jsonΤι πρέπει να δεις: έναν φάκελο ανά υπηρεσία, και έναν φάκελο modules/ όπου κάθε ενότητα του μαθήματος τακτοποιεί τα αρχεία εργασίας της. Δεν έχεις να τροποποιήσεις τίποτα πριν από την ενότητα 3.
Εκτέλεση της λίστας ελέγχου.
.\labo.ps1 prerequis./labo.sh prerequisΣτο μηχάνημα του μαθήματος (Windows 11, Docker Desktop, PowerShell 5.1), πριν από την πρώτη εκκίνηση:
== 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 demarrerΤι πρέπει να δεις: δεκατέσσερα τικ, και η τελευταία γραμμή πράσινη. Οι εκδόσεις και η μνήμη εξαρτώνται από το μηχάνημά σου. Η έκδοση bash εμφανίζει μια γραμμή παραπάνω, ✔ curl : présent, και τελειώνει με Lancez : ./labo.sh demarrer. Μόλις ξεκινήσει το εργαστήριο, η επανεκτέλεση του prerequis εμφανίζει port 9090 : utilisé par le labo lui-même αντί για libre: είναι φυσιολογικό, και είναι αυτό που θα δεις στο μάθημα 04.
Αν η θύρα 3000 είναι ήδη κατειλημμένη: επιλογή της θύρας του Grafana. Όρισε τη GRAFANA_PORT πριν από το prerequis, και κράτησέ την ορισμένη για το demarrer και το etat:
$env:GRAFANA_PORT = 3001
.\labo.ps1 prerequisGRAFANA_PORT=3001 ./labo.sh prerequisΗ λίστα ελέγχου εμφανίζει τότε ✔ port 3001 libre στη θέση της γραμμής της θύρας 3000, και το Grafana θα απαντά στο http://localhost:3001. Όλες οι διευθύνσεις του μαθήματος που αναφέρουν τη θύρα 3000 παραμένουν έγκυρες: αντικατάστησε το 3000 με 3001. Η μεταβλητή ζει μόνο στο τρέχον τερματικό· αν ανοίξεις ένα άλλο τερματικό, ξαναόρισέ την.
Τα παρακάτω μηνύματα προκλήθηκαν στα αλήθεια στο μηχάνημα του μαθήματος.
Μόνο Windows — το PowerShell αρνείται το σενάριο.
.\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 : UnauthorizedAccessΗ προεπιλεγμένη πολιτική εκτέλεσης των Windows μπλοκάρει τα μη υπογεγραμμένα σενάρια. Επίτρεψέ τα μόνο για τον λογαριασμό σου:
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedΑπάντησε O (ναι) και ξαναεκτέλεσε .\labo.ps1 prerequis. Αυτό εμφανίζει επίσης το labo.ps1 όταν το εκτελείς χωρίς παράμετρο.
Το Docker δεν είναι εγκατεστημένο, ή το τερματικό ανοίχτηκε πριν από την εγκατάσταση.
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 σε bash.) Κλείσε και ξανάνοιξε το τερματικό: το PATH δεν επαναφορτώθηκε. Αν το μήνυμα επιμένει, το Docker δεν είναι εγκατεστημένο.
Ο δαίμονας δεν απαντά. Το prerequis εμφανίζει έναν σταυρό στο le démon Docker répond. Σε Windows και macOS, το Docker Desktop δεν έχει εκκινηθεί, ή είναι ακόμη σε διαδικασία εκκίνησης: περίμενε να σταθεροποιηθεί το εικονίδιο. Μόνο εγγενές Linux — permission denied while trying to connect to the Docker daemon socket: ο χρήστης σου δεν είναι στην ομάδα docker, ή δεν επανασυνδέθηκες μετά το usermod· το id -nG πρέπει να καταγράφει το docker.
Η θύρα 3000 είναι ήδη κατειλημμένη από άλλο πρόγραμμα. Όταν το εργαστήριο δεν έχει ακόμη ξεκινήσει και ένα άλλο πρόγραμμα ακούει στη θύρα του Grafana, το prerequis εμφανίζει τον σταυρό και τη θεραπεία στην ίδια γραμμή:
✘ 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 prerequisΚάνε αυτό που λέει η γραμμή (βήμα 7). Για μια άλλη κατειλημμένη θύρα (9090, 8000…), το μήνυμα είναι déjà occupé par un autre programme — arrêtez-le ou changez le port dans docker-compose.yml: βρες το πρόγραμμα (Get-NetTCPConnection -LocalPort 9090 σε Windows, sudo ss -ltnp | grep 9090 σε Linux) και σταμάτησέ το, ή άλλαξε το αριστερό μέρος της θύρας στο docker-compose.yml ("9091:9090").
Μόνο Windows — όχι αρκετή μνήμη. ✘ mémoire pour Docker : 1 Go — il en faut au moins 2 (fichier %UserProfile%\.wslconfig : [wsl2] memory=4GB, puis wsl --shutdown). Κάνε το βήμα 1. Μεταξύ 2 και 4 GB, το σενάριο εμφανίζει μια προειδοποίηση αντί για σταυρό και αφήνει να περάσει.
Git Bash σε Windows — τα δύο σενάρια λειτουργούν. Στο μηχάνημα του μαθήματος, το ./labo.sh prerequis εκτελεσμένο από Git Bash δίνει την ίδια λίστα με το labo.ps1, με τη γραμμή ✔ curl : présent επιπλέον και τα χρώματα εμφανισμένα. Μπορείς λοιπόν να ακολουθήσεις τα παραρτήματα bash του μαθήματος σε Windows αν προτιμάς αυτό το τερματικό· η μεταβλητή περνιέται τότε όπως σε Linux: GRAFANA_PORT=3001 ./labo.sh prerequis.
Αυτό το εργαστήριο απαιτεί ένα μόνο πράγμα στον υπολογιστή σου: το Docker (Desktop ή Engine, με το plugin Compose, και το curl για την έκδοση bash)· οι δέκα υπηρεσίες τρέχουν όλες μέσα σε containers, από τις οποίες τέσσερις κατασκευάζονται στον υπολογιστή σου στην πρώτη εκκίνηση. Υπολόγισε 2 GB μνήμης ελάχιστο για το Docker, 4 GB συνιστώμενο· σε Windows, αυτό ρυθμίζεται στο %UserProfile%\.wslconfig ακολουθούμενο από wsl --shutdown. Εννέα θύρες πρέπει να είναι ελεύθερες: 9090, 9093, 3000, 3100, 12345, 9100, 8080, 8000 και 8090. Το kit ανακτάται με git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3, και μετά cd lab3: 32 αρχεία, ένας φάκελος ανά υπηρεσία, ένας φάκελος modules/ για το μάθημα. Το .\labo.ps1 prerequis ή ./labo.sh prerequis είναι η λίστα ελέγχου σου: δεκατέσσερα τικ (δεκαπέντε σε bash) και Tout est prêt. πριν ξεκινήσεις. Αν η θύρα 3000 είναι κατειλημμένη, το GRAFANA_PORT=3001 μετακινεί το Grafana χωρίς να αγγίξει τα υπόλοιπα· η μεταβλητή πρέπει να μείνει ορισμένη για prerequis, demarrer και etat. Αν το PowerShell αρνείται το σενάριο: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.
.wslconfig): όλα τα κλειδιά του αρχείου, ανάμεσά τους memory, processors και swap.${VARIABLE:-προεπιλογή} που χρησιμοποιείται για τη GRAFANA_PORT, και το αρχείο .env που επιτρέπει να ορίσεις τη μεταβλητή μια για πάντα στη ρίζα του lab3.RemoteSigned, και γιατί είναι η συνιστώμενη ρύθμιση για έναν σταθμό εργασίας.demarrer και μετά του etat, και ο γύρος των εννέα διεπαφών.