Εκκίνηση του εργαστηρίου και γύρω από τα διεπαφές

13 λεπτά
Κοινό
αρχάριοι, μάθημα 03 ολοκληρωμένο (prerequis όλο πράσινο)
Διάρκεια
45 έως 60 λεπτά (εκ των οποίων 5 έως 10 λεπτά λήψης την πρώτη φορά)
Ενότητα
1/7
Στόχος δεξιότητας
να ξεκινάς τις δέκα υπηρεσίες με μία μόνο εντολή, να διαβάζεις την έξοδο του demarrer και μετά του etat, να ανοίγεις καθεμία από τις εννέα διεπαφές του εργαστηρίου ξέροντας τι κοιτάς, να διαβάζεις ένα ημερολόγιο (journal), να σταματάς και να επανεκκινείς χωρίς να χάνεις τα δεδομένα

Το kit του εργαστηρίουhttps://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr — κλωνοποιημένο στο lab3 στο μάθημα 03. Όλες οι εντολές αυτού του μαθήματος πληκτρολογούνται από αυτόν τον φάκελο. Το Grafana περιγράφεται στη θύρα 3000· αν επέλεξες GRAFANA_PORT=3001, αντικατάστησε το 3000 με 3001 παντού.

Σε μια εικόνα

Να ξεκινήσεις το εργαστήριο είναι σαν να γυρίζεις το κλειδί: ο κινητήρας (Docker) εκκινεί τις δέκα υπηρεσίες, οι μετρητές ανάβουν ένας-ένας, και μετά από ένα λεπτό το ταμπλό είναι ζωντανό. Οι εννέα διεπαφές web είναι τα εννέα καντράν αυτού του ταμπλό: καθεμία δείχνει το ίδιο εργαστήριο από διαφορετική γωνία. Ο Prometheus είναι ο ακατέργαστος μετρητής· το Grafana είναι το παρμπρίζ, η άνετη θέα στους ίδιους αριθμούς· ο Alertmanager και το webhook είναι τα λαμπάκια· το API είναι ο δρόμος που το αυτοκίνητο διανύει αυτή τη στιγμή.

Πώς λειτουργεί

Το demarrer εκτελεί αλυσιδωτά τέσσερις φάσεις. Κατεβάζει τις έξι δημόσιες εικόνες (Prometheus, Alertmanager, Grafana, Alloy, node-exporter, cAdvisor: περίπου 1,5 GB την πρώτη φορά, τίποτα στη συνέχεια)· κατασκευάζει τις τέσσερις τοπικές εικόνες (api, charge, webhook από python:3.13-slim, και loki για να του προστεθεί ένα δυαδικό busybox που χρησιμεύει στον έλεγχο υγείας)· δημιουργεί ένα δίκτυο Docker (labo-observabilite_labo) και τρεις τόμους (grafana-data, prometheus-data, loki-data)· και μετά ξεκινά τα δέκα containers και περιμένει καθένα να απαντήσει στον έλεγχο υγείας του (healthcheck). Ορισμένες υπηρεσίες εξαρτώνται από άλλες: το charge ξεκινά μόνο όταν το API είναι υγιές, το grafana και το alloy περιμένουν τον Prometheus και το Loki.

Οι τρεις τόμοι είναι η μνήμη του εργαστηρίου. Το arreter σταματά τα containers αλλά κρατά τους τόμους: οι σειρές του Prometheus, τα logs του Loki και οι ρυθμίσεις του Grafana επιζούν, και το demarrer συνεχίζει από εκεί που ήσουν. Το reinitialiser διαγράφει τους τόμους: καινούριο εργαστήριο. Τεκμηρίωση: Docker Compose — Volumes και Docker Compose — Healthchecks και depends_on.

ΕντολήΤι κάνειΠότε να τη χρησιμοποιείς
prerequisΕλέγχει Docker, Compose, τη μνήμη, τους επεξεργαστές, τις εννέα θύρεςΠριν από το πρώτο demarrer (μάθημα 03)
demarrerΚατεβάζει, κατασκευάζει, δημιουργεί δίκτυο και τόμους, ξεκινά τις 10 υπηρεσίες, περιμένει να είναι έτοιμεςΣτην αρχή κάθε συνεδρίας
etatΠίνακας των containers, στόχοι Prometheus, σειρές, ειδοποιήσεις, κατάσταση κάθε διεπαφήςΣυνεχώς: είναι το πρώτο σου αντανακλαστικό
journal <service>Οι 100 τελευταίες γραμμές ημερολογίου μιας υπηρεσίαςΌταν μια υπηρεσία δεν απαντά, ή για να διαβάσεις τα logs του API
casser <scenario>Προκαλεί μια βλάβη: api, erreurs, lenteur, disqueΠρακτική αυτής της ενότητας και των επόμενων
reparerΑκυρώνει όλες τις βλάβεςΜετά από κάθε casser
arreterΣταματά τα containers, κρατά τα δεδομέναΣτο τέλος της συνεδρίας
reinitialiserΔιαγράφει containers και τόμους, μετά από επιβεβαίωσηΓια να ξεκινήσεις από το μηδέν

Οι εννέα διεπαφές, και τι κοιτάς σε καθεμία:

ΔιεπαφήURLΤι κοιτάς εκεί
Prometheushttp://localhost:9090Η σελίδα Query για να πληκτρολογήσεις ένα ερώτημα, Alerts για τους κανόνες, Status → Target health για τους 8 στόχους
Alertmanagerhttp://localhost:9093Οι ληφθείσες ειδοποιήσεις, ομαδοποιημένες ανά alertname και service· οι σιγάσεις
Grafanahttp://localhost:3000Οι τρεις προ-ρυθμισμένοι πίνακες ελέγχου, Explore, οι τρεις πηγές δεδομένων
API καταλόγουhttp://localhost:8000/cours, /cours/C0001, /sante, /metrics: η παρατηρούμενη υπηρεσία, όπως φαίνεται από έξω
webhookhttp://localhost:8090Η λίστα των ειδοποιήσεων που λήφθηκαν από τον Alertmanager, ανανεωμένη κάθε 10 s
Lokihttp://localhost:3100/readyΑπαντά ready· το Loki δεν έχει διεπαφή, το ερωτάς μέσω Grafana
Alloyhttp://localhost:12345Η διεπαφή διάγνωσής του: τα συστατικά του config.alloy και η κατάστασή τους
node-exporterhttp://localhost:9100/metricsΗ ακατέργαστη σελίδα των μετρικών του μηχανήματος-οικοδεσπότη
cAdvisorhttp://localhost:8080Οι μετρικές ανά container· /metrics για την ακατέργαστη σελίδα

Βήμα προς βήμα

  1. Εκκίνηση. Από το lab3:

    powershell
    .\labo.ps1 demarrer
    bash
    ./labo.sh demarrer

    Στο μηχάνημα του μαθήματος, στην πρώτη εκκίνηση (οι γραμμές λήψης και κατασκευής έχουν κοπεί):

    text
    
    == Téléchargement des images (long la première fois : ~1,5 Go) ==
     Image labo-webhook:1.0.0 Skipped Image can be built
     Image labo-api:1.0.0 Skipped Image can be built
     Image labo-charge:1.0.0 Skipped Image can be built
     Image labo-loki:3.7.7 Skipped Image can be built
    
    == Construction des images du labo (api, charge, webhook, loki) et démarrage ==
    
     Network labo-observabilite_labo Created
     Volume labo-observabilite_grafana-data Created
     Volume labo-observabilite_prometheus-data Created
     Volume labo-observabilite_loki-data Created
    
     Container labo-prometheus Healthy
     Container labo-api Healthy
     Container labo-charge Starting
     Container labo-charge Started
     Container labo-loki Healthy
     Container labo-alloy Started
     Container labo-grafana Started
    
    == Attente que chaque service soit prêt ==
      prometheus       prêt (0 s)
      alertmanager     prêt (0 s)
      loki             prêt (0 s)
      alloy           .. prêt (6 s)
      node-exporter    prêt (0 s)
      cadvisor         prêt (0 s)
      api              prêt (0 s)
      webhook          prêt (0 s)
      charge           prêt (0 s)
      grafana         ... prêt (9 s)
    
    Le labo est prêt.
      Grafana        http://localhost:3000   (utilisateur admin · mot de passe aiopsatlas2026)
      Prometheus     http://localhost:9090   (Status → Target health, puis onglet Graph)
      Alertmanager   http://localhost:9093
      API catalogue  http://localhost:8000/cours   ·   http://localhost:8000/metrics
      Webhook        http://localhost:8090   (les alertes reçues)
      Loki           http://localhost:3100/ready   ·   Alloy   http://localhost:12345
      node-exporter  http://localhost:9100/metrics   ·   cAdvisor   http://localhost:8080
    
    Étape suivante : .\labo.ps1 etat   (laissez tourner 2 minutes pour avoir des courbes)

    Τι πρέπει να δεις: τα τέσσερα Skipped Image can be built (οι τοπικές εικόνες δεν κατεβαίνουν, κατασκευάζονται), οι τρεις τόμοι που δημιουργήθηκαν, το labo-charge Starting μόνο μετά το labo-api Healthy, και μετά τα δέκα prêt. Στο μηχάνημα του μαθήματος, το demarrer πήρε 44 δευτερόλεπτα με τις εικόνες ήδη σε cache. Η τελευταία γραμμή σου λέει να περιμένεις δύο λεπτά: ο Prometheus χρειάζεται μερικά scrapes για να σχεδιάσει μια καμπύλη.

  2. Ανάγνωση του etat.

    powershell
    .\labo.ps1 etat
    text
    
    == Conteneurs ==
    NAME                 SERVICE         STATUS
    labo-alertmanager    alertmanager    Up About a minute (healthy)
    labo-alloy           alloy           Up 48 seconds (healthy)
    labo-api             api             Up About a minute (healthy)
    labo-cadvisor        cadvisor        Up About a minute (healthy)
    labo-charge          charge          Up About a minute (healthy)
    labo-grafana         grafana         Up 48 seconds (healthy)
    labo-loki            loki            Up About a minute (healthy)
    labo-node-exporter   node-exporter   Up About a minute (healthy)
    labo-prometheus      prometheus      Up About a minute (healthy)
    labo-webhook         webhook         Up About a minute (healthy)
    
    == Supervision ==
      ✔ Prometheus répond — cibles up : 8/8
         séries en mémoire : 9038
         alertes : 0 active(s), 0 en attente (pending)
      ✔ Alertmanager répond (http://localhost:9093)
      ✔ Grafana répond (http://localhost:3000)
      ✔ Loki répond (http://localhost:3100)
      ✔ API catalogue répond — version 1.0.0, 64 cours
      ✔ Webhook répond — 0 alerte(s) reçue(s) (http://localhost:8090)
    
    Labo : 10/10 services, 8/8 cibles up, 0 alertes actives.

    Τι πρέπει να δεις: δύο μπλοκ. Conteneurs (containers): δέκα γραμμές, όλες Up … (healthy). Supervision (εποπτεία): ο Prometheus διαβάζει τους 8 στόχους του, αποθηκεύει 9038 σειρές (αυτός ο αριθμός ανεβαίνει τα πρώτα λεπτά, μετά σταθεροποιείται γύρω στις 12 000 έως 15 000 στο μηχάνημα του μαθήματος), καμία ειδοποίηση· το API γνωρίζει 64 μαθήματα· το webhook δεν έχει λάβει τίποτα. Η τελευταία γραμμή, Labo : 10/10 services, 8/8 cibles up, 0 alertes actives., είναι αυτή που πρέπει να ξαναβρίσκεις στο τέλος κάθε πρακτικής.

  3. Prometheus: Query, Alerts, Status. Άνοιξε το http://localhost:9090. Το πάνω μενού έχει τρεις καταχωρήσεις: Query, Alerts, Status. Στο Status, το υπομενού προτείνει Target health, Rule health, Service discovery, Runtime & build information, TSDB status, Command-line flags, Configuration, Alertmanager discovery. Πήγαινε στο Target health: οκτώ μπλοκ, ένα ανά job, καθένα με 1 / 1 up, το URL που διαβάζεται (Endpoint), τα labels, την ημερομηνία του τελευταίου scrape και την κατάσταση UP. Στο μηχάνημα του μαθήματος:

    text
    api
    1 / 1 up
    Endpoint                    Labels                                   Last scrape   State
    http://api:8000/metrics     instance="api:8000" job="api" service="api"   6.014s ago    UP

    Γύρνα στο Query, πληκτρολόγησε up στο πεδίο εισαγωγής και κάνε κλικ στο Execute (ή Enter). Κάτω από το πεδίο, τρεις καρτέλες: Table, Graph, Explain. Στο Table, οκτώ γραμμές της μορφής up{instance="localhost:9090", job="prometheus"} 1, όλες στο 1. Κάτω από τις καρτέλες, μια γραμμή του τύπου Load time: 40ms Result series: 8 σου λέει πόσες σειρές απάντησαν. Πέρασε στο Graph: οκτώ επίπεδες γραμμές στο 1. Η ενότητα 2 θα περάσει τον υπόλοιπο χρόνο σε αυτή τη σελίδα.

  4. Grafana: τρεις έτοιμοι πίνακες ελέγχου. Άνοιξε το http://localhost:3000, χρήστης admin, κωδικός aiopsatlas2026. Η αρχική σελίδα καταγράφει τα Recent dashboards: οι τρεις πίνακες ελέγχου που προ-ρυθμίστηκαν από το kit, στον φάκελο Labo observabilite. Το κύριο μενού (εικονίδιο πάνω αριστερά) δίνει Dashboards, Explore, Alerting, Connections → Data sources. Στο Connections → Data sources, τρεις πηγές: Prometheus (προεπιλογή), Loki, Alertmanager. Το API του Grafana επιβεβαιώνει την ίδια λίστα:

    text
    uid=api-catalogue   titre=« API catalogue — signaux dorés »   panneaux=23   dossier=Labo observabilite
    uid=hote-conteneurs titre=« Hôte et conteneurs »              panneaux=16   dossier=Labo observabilite
    uid=journaux-api    titre=« Journaux de l'API »               panneaux=6    dossier=Labo observabilite
    source Prometheus   type=prometheus     uid=prometheus     default=True
    source Loki         type=loki           uid=loki           default=False
    source Alertmanager type=alertmanager   uid=alertmanager   default=False

    Άνοιξε το API catalogue — signaux dorés (API καταλόγου — χρυσά σήματα): τα τέσσερα χρυσά σήματα (κίνηση, σφάλματα, καθυστέρηση, κορεσμός) του API, πλέον δύο επιχειρησιακές μετρικές (εγγραφές, μαθήματα που ανοίχτηκαν). Οι καμπύλες είναι επίπεδες στην αρχή: χρειάζονται δύο λεπτά φορτίου. Τι πρέπει να δεις: τίποτα από όσα βλέπεις εδώ δεν αποθηκεύεται στο Grafana. Κάθε πίνακας (panel) στέλνει ένα ερώτημα PromQL στον Prometheus τη στιγμή που κοιτάς. Το Grafana είναι το παρμπρίζ, όχι ο κινητήρας.

    Το Loki διαβάζεται στο ίδιο σημείο. Άνοιξε το Explore στο μενού, διάλεξε την πηγή Loki στον επιλογέα πάνω, πληκτρολόγησε {service="api"} στο πεδίο ερωτήματος και εκτέλεσε με Run query: οι γραμμές JSON του API κυλούν, οι πιο πρόσφατες πάνω, καθεμία με τα labels της. Το Loki γνωρίζει μόνο τέσσερα σε αυτό το εργαστήριο, που λαμβάνονται από το http://localhost:3100/loki/api/v1/labels: code, conteneur, niveau, service. Τα service και conteneur έρχονται από το Docker, τα niveau και code εξάγονται από το JSON μέσω του Alloy. Γύρισε τον επιλογέα στο Prometheus, πληκτρολόγησε up, Run query: οι οκτώ σειρές του βήματος 3 εμφανίζονται, σε πίνακα και σε καμπύλη. Το Explore είναι το σημείο όπου δοκιμάζεις ένα ερώτημα πριν το κάνεις πίνακα (panel) (μάθημα 07).

  5. Το API καταλόγου, από έξω. Άνοιξε τα τέσσερα παρακάτω URL στον περιηγητή, ή με Invoke-RestMethod / curl:

    text
    http://localhost:8000/sante          → {"etat":"ok","version":"1.0.0","cours":64}
    http://localhost:8000/cours/C0001    → {"id":"C0001","titre":"Introduction à Python","categorie":"programmation","niveau":"debutant","prix":89,"duree_heures":6,"professeur":"Karim Haddad","tags":["code","algorithmes"],"note":4.8,"inscrits":2319}
    http://localhost:8000/cours/C9999    → 404 {"detail":"cours C9999 introuvable"}
    http://localhost:8000/metrics        → 271 lignes de texte, les métriques de la leçon 02

    Τι πρέπει να δεις: το /sante είναι η διαδρομή που καλεί το Docker για το healthcheck· το /cours/C0001 είναι ένα από τα 64 μαθήματα· το /cours/C9999 απαντά ένα καθαρό 404, που το API μετρά στο http_requetes_total{code="404",route="/cours/{id}"} και γράφει σε ένα log WARNING· το /metrics είναι αυτό που διαβάζει ο Prometheus. Κάθε απόκριση φέρει μια κεφαλίδα x-id-requete (για παράδειγμα c5c49525ea53), το ίδιο αναγνωριστικό με αυτό του log JSON αυτού του αιτήματος.

  6. Alertmanager και webhook: τα λαμπάκια, σβηστά. Άνοιξε το http://localhost:9093: το μενού προτείνει Alerts, Silences, Status, Settings, και ένα κουμπί New Silence. Σε κανονική λειτουργία, η σελίδα Alerts είναι κενή. Άνοιξε το http://localhost:8090: μια σελίδα «Alertes reçues d'Alertmanager» (Ειδοποιήσεις που λήφθηκαν από τον Alertmanager) με έναν πίνακα έξι στηλών (Reçue à, Alerte, Sévérité, État, Service, Résumé) και τη γραμμή Aucune alerte reçue pour l'instant.· η σελίδα ανανεώνεται κάθε 10 δευτερόλεπτα. Η ακατέργαστη μορφή βρίσκεται στο http://localhost:8090/alertes.json ([]) και η κατάσταση της υπηρεσίας στο http://localhost:8090/sante:

    json
    {"etat":"ok","alertes_en_memoire":0,"notifications":0,"alertes":0}

    Τι πρέπει να δεις: δύο κενές σελίδες, και αυτό είναι που θέλουμε. Η πρακτική αυτής της ενότητας τις γεμίζει με casser api.

  7. Loki, Alloy, node-exporter, cAdvisor: τα παρασκήνια. Τέσσερις σελίδες χωρίς άνετη διεπαφή:

    text
    http://localhost:3100/ready              → ready
    http://localhost:12345/-/ready           → Alloy is ready.
    http://localhost:9100/metrics            → 1578 lignes (node_cpu_seconds_total, node_memory_MemTotal_bytes…)
    http://localhost:8080/metrics            → 3444 lignes (container_memory_working_set_bytes{name="labo-api"}…)

    Τι πρέπει να δεις: το Loki και το Alloy απαντούν με μια λέξη· δουλεύουν για το Grafana, όχι για σένα απευθείας. Οι δύο exporters εκθέτουν την ίδια μορφή σελίδας με το API (# HELP, # TYPE, μια γραμμή ανά σειρά), με πολύ περισσότερες γραμμές. Άνοιξε το http://localhost:8080 χωρίς /metrics: το cAdvisor ανακατευθύνει στο /containers/, μια μικρή σελίδα που δείχνει ολόκληρο το μηχάνημα (Usage Overview, CPU Total Usage, Memory Total Usage, Network Throughput) και έναν σύνδεσμο Docker Containers προς τη λεπτομέρεια κάθε container.

  8. Ανάγνωση ενός ημερολογίου.

    powershell
    .\labo.ps1 journal api
    text
    labo-api  | {"horodatage": "2026-09-15T19:33:25.839+00:00", "niveau": "INFO", "id_requete": "46bb533b33e9", "methode": "GET", "route": "/cours/{id}", "code": 200, "duree_ms": 13.9, "message": "GET /cours/C0038 -> 200"}
    labo-api  | {"horodatage": "2026-09-15T19:33:25.843+00:00", "niveau": "INFO", "id_requete": "5c0d4e124807", "methode": "GET", "route": "/cours", "code": 200, "duree_ms": 30.4, "message": "GET /cours -> 200"}
    labo-api  | {"horodatage": "2026-09-15T19:33:25.916+00:00", "niveau": "INFO", "id_requete": "5ccaee4d1a2a", "methode": "GET", "route": "/sante", "code": 200, "duree_ms": 1.0, "message": "GET /sante -> 200"}

    Μετά journal charge:

    text
    labo-charge  | {"horodatage": "2026-09-15T19:33:22.848+00:00", "niveau": "INFO", "message": "résumé des 30 dernières secondes", "requetes": {"201": 28, "total": 264, "200": 210, "404": 21, "422": 2, "500": 3}}

    Τι πρέπει να δεις: το API γράφει μια γραμμή ανά αίτημα· η γεννήτρια φορτίου γράφει μια περίληψη κάθε 30 δευτερόλεπτα, περίπου 260 αιτήματα (σχεδόν 9 ανά δευτερόλεπτο), από τα οποία καμιά εικοσαριά 404 και μερικά εκούσια 500. Αυτοί οι αριθμοί είναι αυτοί που θα ξαναβρείς στον Prometheus με rate() στην ενότητα 2.

  9. Σταμάτημα, και μετά επανεκκίνηση χωρίς να χάσεις τίποτα.

    powershell
    .\labo.ps1 arreter
    text
     Container labo-webhook Stopping
     Container labo-alertmanager Stopping
    
     Container labo-api Stopped
     Container labo-prometheus Stopped
      ✔ conteneurs arrêtés — vos données sont conservées ; .\labo.ps1 demarrer pour reprendre

    Το docker compose ps -a δείχνει τότε δέκα γραμμές Exited· το etat τελειώνει με Labo : 0/10 services, ?/? cibles up, ? alertes actives. (τα ? γιατί ο Prometheus δεν απαντά πλέον). Ξαναεκτέλεσε .\labo.ps1 demarrer: αυτή τη φορά, καμία λήψη, καμία κατασκευή, καμιά τριανταριά δευτερόλεπτα. Στον Prometheus, πληκτρολόγησε up και πέρασε στο Graph με εύρος μιας ώρας: η καμπύλη διακόπτεται κατά το σταμάτημα και συνεχίζει, με το προηγούμενο ιστορικό άθικτο. Ο τόμος prometheus-data είναι που κράτησε τις σειρές.

Αν κολλήσει

  • Το demarrer σταματά σε μια υπηρεσία. Το μήνυμα είναι σαφές: Un service n'a pas démarré. Regardez son journal : .\labo.ps1 journal <service>. Κάνε το. Η πιο συχνή περίπτωση είναι μια θύρα που καταλήφθηκε ανάμεσα στο prerequis και το demarrer (ένα άλλο πρόγραμμα που εκκινήθηκε στο μεταξύ): το Docker αρνείται τότε να δημοσιεύσει τη θύρα, και το ημερολόγιο του container είναι κενό γιατί δεν ξεκίνησε ποτέ. Ξαναεκτέλεσε το prerequis.

  • journal χωρίς όνομα υπηρεσίας. Το .\labo.ps1 journal μόνο του εμφανίζει:

    text
    usage : .\labo.ps1 journal <prometheus|alertmanager|loki|alloy|node-exporter|cadvisor|api|webhook|charge|grafana>

    Τα δέκα έγκυρα ονόματα είναι εκεί· είναι τα ονόματα των υπηρεσιών στο docker-compose.yml, όχι αυτά των containers (api, όχι labo-api). Ομοίως, το .\labo.ps1 casser tout απαντά usage : .\labo.ps1 casser <api|erreurs|lenteur|disque>.

  • Το Grafana απαντά Unauthorized. Αν καλέσεις το API του Grafana χωρίς να είσαι συνδεδεμένος, για παράδειγμα το http://localhost:3000/api/search σε μια ιδιωτική καρτέλα, παίρνεις:

    json
    {"extra":null,"message":"Unauthorized","messageId":"auth.unauthorized","statusCode":401,"traceID":""}

    Είναι φυσιολογικό: οι σελίδες API απαιτούν μια συνεδρία ή έναν κωδικό. Συνδέσου πρώτα στο http://localhost:3000 (admin / aiopsatlas2026), και μετά επαναφόρτωσε.

  • Οι πίνακες ελέγχου Grafana εμφανίζουν «No data». Δύο αίτια, με αυτή τη σειρά: το εργαστήριο τρέχει λιγότερο από δύο λεπτά (περίμενε)· ή το χρονικό εύρος πάνω δεξιά δείχνει σε μια περίοδο όπου το εργαστήριο ήταν σταματημένο (ξαναβάλε «Last 15 minutes» ή «Last 1 hour»).

  • Το etat εμφανίζει Labo : 0/10 services, ?/? cibles up, ? alertes actives. Το εργαστήριο είναι σταματημένο. .\labo.ps1 demarrer.

  • Σε PowerShell, το demarrer εμφανίζει κόκκινες γραμμές NativeCommandError γύρω από το Container labo-api Stopping. Είναι τα μηνύματα προόδου του Docker Compose, γραμμένα στην έξοδο σφαλμάτων· όταν το labo.ps1 εκκινείται το ίδιο από ένα άλλο σενάριο ή με 2>&1, το PowerShell 5.1 τα ντύνει ως σφάλμα. Το εργαστήριο ξεκίνησε κανονικά: έλεγξε με etat.

Να θυμάσαι

Το demarrer κατεβάζει έξι εικόνες, κατασκευάζει τέσσερις τοπικές εικόνες, δημιουργεί ένα δίκτυο και τρεις τόμους, και μετά εκκινεί δέκα containers και περιμένει τους ελέγχους υγείας τους· 44 δευτερόλεπτα στο μηχάνημα του μαθήματος με τις εικόνες ήδη σε cache. Το etat έχει δύο μπλοκ: τα containers (δέκα Up … (healthy)) και την εποπτεία (8/8 στόχοι, ο αριθμός σειρών, οι ειδοποιήσεις, η κατάσταση κάθε διεπαφής)· η ονομαστική τελευταία γραμμή του είναι Labo : 10/10 services, 8/8 cibles up, 0 alertes actives.. Ο Prometheus (9090) έχει τρεις σελίδες: Query με τις καρτέλες Table, Graph, Explain· Alerts· Status → Target health με τους 8 στόχους UP. Το Grafana (3000, admin / aiopsatlas2026) έχει τρεις προ-ρυθμισμένους πίνακες ελέγχου στον φάκελο Labo observabilite και τρεις πηγές δεδομένων, Prometheus ως προεπιλογή· δεν αποθηκεύει καμία μέτρηση το ίδιο. Το API (8000) απαντά στο /sante, /cours/C0001, /metrics, και ένα καθαρό 404 σε ένα άγνωστο μάθημα, με μια κεφαλίδα x-id-requete σε κάθε απόκριση. Ο Alertmanager (9093) και το webhook (8090) είναι κενά σε κανονική λειτουργία. Το journal <service> παίρνει το όνομα της υπηρεσίας, όχι του container. Το arreter κρατά τους τόμους: οι σειρές επιζούν, η καμπύλη up διακόπτεται και μετά συνεχίζει.

Για να πας παρακάτω

  • Prometheus — Expression browser: η σελίδα Query, οι καρτέλες και οι επιλογές της, στην επίσημη τεκμηρίωση.
  • Grafana — Provisioning: πώς οι τρεις πίνακες ελέγχου και οι τρεις πηγές δεδομένων φτάνουν στο Grafana στην εκκίνηση, μέσω των αρχείων του grafana/provisioning/. Γι' αυτό ο φάκελος Labo observabilite σημειώνεται ως «managed by classic file provisioning» στο API.
  • Grafana Alloy — UI διάγνωσης: τι δείχνει το http://localhost:12345, συστατικό προς συστατικό.
  • Docker Compose — docker compose ps, logs, stop: οι εντολές που το labo.ps1 και το labo.sh εκτελούν αλυσιδωτά για σένα· το journal api είναι docker compose logs --tail 100 api.
  • Η καθοδηγούμενη πρακτική που ακολουθεί ξανακάνει αυτόν τον γύρο μονορούφι, μετά σπάει το API για να δεις το λαμπάκι να ανάβει, στο etat, στο Target health, στον Alertmanager και στο webhook, πριν επιδιορθώσεις.