B01. RabbitMQ Ausfall waehrend Bestellannahme
Simulieren / Pruefen:
docker compose stop rabbitmq
curl -X POST http://localhost:8080/api/orders/ORD-OPS-1/accept
select status,count(*) from outbox.events group by status;
Erwartete Analyse:
- Ein Signal zeigt den Fehler.
- Ein zweites Signal bestaetigt die Ursache.
- Ein drittes Signal dient als Gegenprobe nach dem Fix.
Lernwert: Outbox schuetzt Datenbanktransaktion. Event darf nicht verloren gehen.
Runbook-Entscheidung:
1. Ist Kundendatenverlust moeglich?
2. Ist der Fehler lokal, systemisch oder extern?
3. Muss skaliert, neugestartet, gerollbackt oder konfiguriert werden?
4. Welche Metrik beweist die Erholung?
B02. Keycloak nicht erreichbar
Simulieren / Pruefen:
docker compose stop keycloak
curl -i http://localhost:8080/api/orders/ORD-OPS-2
Erwartete Analyse:
- Ein Signal zeigt den Fehler.
- Ein zweites Signal bestaetigt die Ursache.
- Ein drittes Signal dient als Gegenprobe nach dem Fix.
Lernwert: API sollte nicht offen werden, sondern korrekt 401/503 liefern.
Runbook-Entscheidung:
1. Ist Kundendatenverlust moeglich?
2. Ist der Fehler lokal, systemisch oder extern?
3. Muss skaliert, neugestartet, gerollbackt oder konfiguriert werden?
4. Welche Metrik beweist die Erholung?
B03. Payment Provider langsam
Simulieren / Pruefen:
WireMock Delay konfigurieren
curl -i -X POST http://localhost:8080/api/orders/ORD-OPS-3/accept
curl http://localhost:8080/actuator/prometheus | grep payment
Erwartete Analyse:
- Ein Signal zeigt den Fehler.
- Ein zweites Signal bestaetigt die Ursache.
- Ein drittes Signal dient als Gegenprobe nach dem Fix.
Lernwert: Timeout und Circuit Breaker muessen fachlich akzeptierbare Fehler liefern.
Runbook-Entscheidung:
1. Ist Kundendatenverlust moeglich?
2. Ist der Fehler lokal, systemisch oder extern?
3. Muss skaliert, neugestartet, gerollbackt oder konfiguriert werden?
4. Welche Metrik beweist die Erholung?
B04. Outbox Backlog waechst
Simulieren / Pruefen:
insert into outbox.events(aggregate_id,event_type,payload_json,status) values ('x','OrderAccepted','{}','NEW');
select count(*) from outbox.events where status='NEW';
Erwartete Analyse:
- Ein Signal zeigt den Fehler.
- Ein zweites Signal bestaetigt die Ursache.
- Ein drittes Signal dient als Gegenprobe nach dem Fix.
Lernwert: Backlog ist ein Betriebssignal, nicht nur ein Datenbankdetail.
Runbook-Entscheidung:
1. Ist Kundendatenverlust moeglich?
2. Ist der Fehler lokal, systemisch oder extern?
3. Muss skaliert, neugestartet, gerollbackt oder konfiguriert werden?
4. Welche Metrik beweist die Erholung?
B05. Flyway Migration fehlerhaft
Simulieren / Pruefen:
mvn -pl runtime spring-boot:run
select * from flyway_schema_history order by installed_rank desc;
Erwartete Analyse:
- Ein Signal zeigt den Fehler.
- Ein zweites Signal bestaetigt die Ursache.
- Ein drittes Signal dient als Gegenprobe nach dem Fix.
Lernwert: Migrationen muessen nachvollziehbar, versioniert und korrigierbar sein.
Runbook-Entscheidung:
1. Ist Kundendatenverlust moeglich?
2. Ist der Fehler lokal, systemisch oder extern?
3. Muss skaliert, neugestartet, gerollbackt oder konfiguriert werden?
4. Welche Metrik beweist die Erholung?
B06. Grafana zeigt keine Daten
Simulieren / Pruefen:
curl http://localhost:9090/api/v1/targets
curl http://localhost:8080/actuator/prometheus | head
Erwartete Analyse:
- Ein Signal zeigt den Fehler.
- Ein zweites Signal bestaetigt die Ursache.
- Ein drittes Signal dient als Gegenprobe nach dem Fix.
Lernwert: Dashboard-Probleme zuerst ueber Prometheus Targets pruefen.
Runbook-Entscheidung:
1. Ist Kundendatenverlust moeglich?
2. Ist der Fehler lokal, systemisch oder extern?
3. Muss skaliert, neugestartet, gerollbackt oder konfiguriert werden?
4. Welche Metrik beweist die Erholung?