Observability-Lab: Prometheus und Grafana, mit einer Alarmregel, die Lernende selbst schreiben
In diesem Lab erhält jede lernende Person einen kleinen Webserver zum Überwachen und die Werkzeuge, die ihn überwachen: einen Exporter, der die Statusseite des Servers in Metriken umwandelt, Prometheus, das sie alle fünf Sekunden einsammelt, und Grafana, bereits angemeldet und bereits mit Prometheus verbunden. Die Lernenden stellen Fragen in PromQL, zeichnen ein Panel, schreiben dann eine Alarmregel, bringen den Server absichtlich zum Absturz und beobachten, wie der Alarm von „pending“ zu „firing“ wechselt.
Es wurde von uns aus vier öffentlichen Images entworfen, es gibt also nichts Verwundbares anzugreifen: nur ein System zum Beobachten. Es ist kein Angriffs-Lab. Die Lab-Kopie hat keine Verbindung ins Internet und keine zu anderen Lernenden.
Was die Lernenden lernen
Wofür Monitoring da ist und wie seine Teile zusammenpassen: ein Programm, das Zahlen veröffentlicht, ein Exporter für Software, die das nicht tut, ein Collector, der sie per Zeitgeber abruft und speichert, und ein Dashboard, das sie zeichnet. Die Lernenden stellen Fragen in PromQL, etwa nginx_up und die Rate der Anfragen über eine Minute, sowohl auf der Prometheus-Seite als auch mit curl gegen seine API, und erstellen aus derselben Abfrage ein Grafana-Panel. Im Mittelpunkt des Labs steht eine Alarmregel: Die Lernenden schreiben sie in eine Regeldatei, laden Prometheus neu, sehen sie als inaktiv aufgeführt, bringen den Server zum Absturz, beobachten, wie der Alarm auf „pending“ und dann auf „firing“ geht, und sehen ihn verschwinden, wenn sie den Server wieder in Ordnung bringen. Das Lab passt zu Einheiten über DevOps, Betrieb, Cloud und Systeme; prüfen Sie die Einheit Ihrer eigenen Prüfungsorganisation für den genauen Wortlaut.
Im Browser ausführen
Der Webserver ist der Dienst namens app, sein Exporter ist exporter, und das Terminal des Labs erreicht Prometheus als prometheus und Grafana als grafana. Ein docker-Befehl im Terminal kann die Dienste des Labs ansehen, betreten, stoppen, starten und neu starten und ihre Logs lesen: Er kann nichts erstellen, pullen oder entfernen. Die Konfiguration und die Regeln von Prometheus sowie die Grafana-Dashboards der lernenden Person liegen auf benannten Volumes, sie sind also nach dem Stoppen und erneuten Starten des Labs noch da. Die Messwerte werden nicht gespeichert, ein neu gestartetes Lab beginnt daher mit einem leeren Diagramm.
- Container-Seite öffnen. Öffnen Sie in der Leiste „Entwickeln“ und wählen Sie „Einen Container ausführen“. Die Seite kann jeder öffnen, und das Git-Lab und das SQL-Lab starten ohne Konto. Alle anderen Labs brauchen ein kostenloses Konto: Erstellen Sie eines, melden Sie sich an und klicken Sie dann auf „Starten“.
- Lab suchen. Die Karte „Beispiel-Labs“ listet alle Beispiele auf. Suchen Sie Observability: Prometheus and Grafana.
- Auf „Starten“ klicken. „Starten“ führt das Lab unverändert mit einem einzigen Klick aus. „Zuerst die Datei bearbeiten“ öffnet die Compose-Datei, damit Sie sie vor dem Start ändern können.
- Öffnen. Auf der Seite des Labs hat die Lab-Leiste zwei Links, Prometheus und Grafana, bereits angemeldet und mit Prometheus verbunden. Führen Sie in Prometheus nginx_up aus. Im Terminal neben dem Lab stellt curl http://prometheus:9090/api/v1/query?query=nginx_up dieselbe Frage. Um eine Regel zu schreiben, führen Sie docker exec -it prometheus sh aus und legen Sie in /etc/prometheus/rules eine Datei ab, deren Name auf .yml endet. Laden Sie mit curl -X POST http://prometheus:9090/-/reload neu, führen Sie dann docker stop app aus und beobachten Sie die Seite Alerts. docker start app bringt den Server wieder in Ordnung.
Was Lernende abgeben sollen
Die Regel selbst, einen Screenshot, wie sie auf der Prometheus-Seite Alerts auslöst, und ein Grafana-Panel, das dasselbe Signal zeigt. Für das Verständnis ein bis zwei Sätze dazu, was die Regel abfragt, warum sie zehn Sekunden wartet, bevor sie auslöst, und was eine Person in Bereitschaft tun würde, wenn sie das sähe. Für anspruchsvollere Arbeiten verlangen Sie eine zweite Regel für ein anderes Signal, etwa die Anfragerate.
Nichts wird automatisch bewertet. Die Grenzen des Labs sollte man ausdrücklich nennen: Der Alarm lässt sich beobachten, aber nichts wird benachrichtigt, weil es keine E-Mail und keinen Chat gibt, die er erreichen könnte.
Eine Basics-Lektion zu diesem Lab
Observability Basics ist eine kleine Lektion, die in diesem Lab durchgearbeitet wird, mit erklärten Schritten und einer Schaltfläche „Ausführen“, die ihren Befehl in das Terminal der lernenden Person tippt. Sie stellt Prometheus eine Frage, schreibt vom Terminal aus eine Alarmregel, stoppt den Webserver und zeigt, wie der Alarm auf „pending“ und dann auf „firing“ geht, und startet ihn wieder. Ein Panel zu zeichnen bleibt den Lernenden überlassen.
Ein kostenloses persönliches Konto bekommt die Lektion im Modul Basics auf der Startseite, jede Einrichtung kann sie aus dem Basics-Ordner der Bibliothek kopieren, und eine neue Einrichtung beginnt mit ihr in einem Modul namens Lab Basics (Sample). Sie ist absichtlich klein: Sie zeigt Lehrkräften, was eine in einem Lab durchgearbeitete Lektion ist, und das Lab erledigt den Rest. Kopieren Sie sie in ein eigenes Modul, um sie zu ändern.
Der Code auf GitHub
Die Compose-Datei führt vier öffentliche Images aus, jedes auf eine Version festgelegt und unverändert: nginx (BSD-2-Clause), den NGINX Prometheus Exporter und Prometheus (beide Apache-2.0) und Grafana (AGPL-3.0). Keines wird von uns verteilt. Die Konfiguration, die jedes braucht, schreibt sein eigener Entrypoint, und die von Prometheus nur beim ersten Start, sodass nicht zurückgesetzt wird, was eine lernende Person ändert. Der Test des Repositorys spielt das Lab als lernende Person durch, einschließlich einer Regel, die auslöst, und eines Stopps und Starts, unter denselben Grenzen, die die Plattform anwendet. Der Plugin-Katalog und die Update-Prüfungen von Grafana sind ausgeschaltet, weil das Lab keinen Weg ins Internet hat.
Als Aufgabe stellen
Schreiben Sie in die Aufgabe, welche Regel zu schreiben ist und was abgegeben werden soll.
- Lab erstellen. Fügen Sie in Ihrem Modul eine Aufgabe hinzu und wählen Sie die Karte „Container-Lab“, dann „In einem GitHub-Repository“. Geben Sie https://github.com/mitsurutech/lab-observability mit dem Branch main an. Die Compose-Datei ist standardmäßig compose.yaml. Forken Sie das Repository zuerst, wenn Sie es ändern möchten.
- Veröffentlichen und ausprobieren. „Veröffentlichen“ legt den Commit fest, den Sie gesehen haben. Eine spätere Änderung im Repository verändert also kein Lab, das Sie bereits gestellt haben. Starten Sie zuerst Ihre eigene Kopie.
- Zuweisen. Weisen Sie es wie jede Aufgabe zu, auf Wunsch mit Fälligkeitsdatum, und schreiben Sie in die Aufgabe, was zu tun ist und was abgegeben werden soll.
- Abgaben bewerten. Öffnen Sie die Kopie einer lernenden Person und die abgegebene Arbeit, bewerten Sie sie und geben Sie sie mit einer Begründung zur Überarbeitung zurück, wenn mehr nötig ist.
Häufige Fragen
- Kann ein Alarm eine E-Mail oder eine Nachricht senden?
- Nein. Das Lab hat keinen Weg ins Internet und keinen Mailservice, ein Alarm ist also auf der Seite Alerts und in der API zu sehen, wird aber nirgendwohin gesendet. Das sollten Sie einer Klasse sagen: Die Regel ist der Teil, den die Lernenden schreiben, und wohin sie gesendet wird, ist ein eigener Baustein, Alertmanager, den dieses Lab nicht enthält.
- Was, wenn eine lernende Person die Prometheus-Konfiguration kaputt macht?
- Die Datei wird einmal beim ersten Start geschrieben und gehört danach den Lernenden, ein Neustart setzt sie also nicht zurück. Wenn ein Neuladen fehlschlägt, etwa wegen eines Fehlers in einer Regeldatei, gibt der Neuladen-Befehl den Grund aus, und Prometheus behält die Regeln, die es vorher hatte. Um mit dem Original zu beginnen, entfernen Sie die Datei .lab-seeded in /etc/prometheus und starten Sie den Dienst neu, oder beginnen Sie mit einer frischen Kopie.
- Bewertet das Observability-Lab die Alarmregel automatisch?
- Nein. Nichts wird automatisch bewertet. Bitten Sie die Lernenden daher, die Regel abzugeben, dazu einen Screenshot, wie sie auf der Prometheus-Seite Alerts auslöst, und ein Grafana-Panel, das dasselbe Signal zeigt. Ein Satz dazu, warum die Regel zehn Sekunden wartet, bevor sie auslöst, zeigt, ob sie es verstanden haben.