docs: Codex-Prompt fuer Komodo-5xx Root-Cause-Suche

Selbst-enthaltener Stafettenstab nach Glance-Ausschluss (130s-Stop-Test):
Polling-Rate unveraendert mit Glance down. Restkandidaten dokumentiert
(Posture-Check, Periphery, Komodo-Self-Check, LAN-Geraet) plus konkrete
Testreihenfolge und Fix-Erwartung.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-31 10:56:58 +02:00
parent 0c08d68d2b
commit 10ef703a4e
+123
View File
@@ -0,0 +1,123 @@
# Codex-Prompt: Komodo 5xx-Spam Root-Cause
Stand: 2026-05-31
Auftraggeber: Operator
Vorarbeit: Claude (auto-mode), siehe Ermittlungsstand unten.
## Auftrag
`HomelabTraefik5xx` feuert dauerhaft fuer `service="komodo@docker"`. Quelle
finden, fixen, dokumentieren. Bitte einmal **bis zum Ende** durchziehen, nicht
nur eine Hypothese pruefen.
## Vor Arbeitsbeginn lesen
- `CLAUDE.md`
- `docs/WORKFLOW.md`
- `monitoring/prometheus/alerts.yml`
- `docs/ALERT_RULES.md`
- `ops/komodo/docker-compose.yml`
- `traefik/docker-compose.yml`
- `monitoring/prometheus/prometheus.yml` (Blackbox-Targets)
- `monitoring/blackbox/blackbox.yml`
- `ops/glance/config/glance.yml` (5 Komodo-URL-Stellen, **NICHT** die Quelle — siehe Ermittlung)
## Ermittlungsstand (bereits geklaert)
### Was gemessen wurde
- Traefik-Access-Log: Source-IP ist **eure WAN-IP `217.249.121.39`** (Hairpin
aus dem Heimnetz). User-Agent leer (`"-"`).
- Muster: `GET /` 200 **alle 15s** + `GET /user` **500** alle 30s, plus
gelegentlich `POST /auth/login/GetLoginOptions` 200 und
`POST /read/GetCoreInfo` 500.
- Prometheus `sum by (code) (increase(traefik_service_requests_total{service="komodo@docker"}[5m]))`:
`200`=22, `500`=14 (Werte vom 2026-05-31 08:11 UTC).
- `docker logs komodo-core` ist still — keine internen Errors, nur normale
Execute-Requests. Komodo wirft den 500 also vermutlich auf Auth-Pfad
(`/user` ohne gueltige Session sollte `401` sein, nicht `500`). Das ist ein
Komodo-Bug-on-Top, **aber nicht die Frage**.
### Ausgeschlossene Kandidaten (durch Test)
- **Browser-Tabs** — User hat alle Komodo-Tabs zugemacht, Polling laeuft
weiter.
- **PWA auf Handy** — User hat keine.
- **Uptime-Kuma** — Container existiert nicht mehr.
- **Homepage** — entfernt.
- **Glance** — Test 2026-05-31 ~08:35 UTC: 130s gestoppt, 5xx-Rate
unveraendert (2/60s Baseline → 4/130s waehrend Stop). Trotz 5 Komodo-URL-
Eintraegen in `ops/glance/config/glance.yml` (search-shortcut Zeile 40,
bookmark Zeilen 131/768, monitor-Widget Zeile 237 mit `check-url:
http://komodo-core:9120`, docker-containers-Widget Zeile 725). Glance ist
raus.
### Noch nicht getestete Kandidaten
- **Posture-Check / cert-token-check.sh** (`services/posture-check/`) — koennte
periodisch Komodo-HTTPS pingen. 15s-/30s-Kadenz waere ungewoehnlich fuer
einen Cron-Job, aber pruefen.
- **Blackbox-Exporter** — pollt laut `monitoring/prometheus/prometheus.yml`
`https://komodo.kaleschke.info` alle 15s. Das erklaert den `GET / 200`-
Anteil sauber. Erklaert aber NICHT den `GET /user 500` 30s-Takt.
- **Komodo Periphery** — auf `komodo_net` und `frontend_net`. Sollte mit
Core via internes Netz reden, koennte aber per Misconfig die Public-URL
treffen. Logs noch nicht eingesehen.
- **Komodo Core selbst** mit `KOMODO_HOST=https://komodo.kaleschke.info`
evtl. Self-Check via Public-URL.
- **Ein Gerat im LAN**, das wir noch nicht auf dem Schirm haben (zweiter
Rechner mit altem Tab, Smart-TV, etc.).
### Was nicht geht
- `tcpdump` fehlt auf dem Host.
- `conntrack` zeigt die Hairpin-Pakete nicht (NAT-Pre-Routing).
## Naechste Schritte (Vorschlag)
1. **Blackbox-Exporter ausschliessen**: Targets in `prometheus.yml` zeigen,
dass Blackbox NUR `https://komodo.kaleschke.info` pollt (also `/`, kein
`/user`). Bestaetigen.
2. **Posture-Check pruefen**: `services/posture-check/cert-token-check.sh`
lesen, Kadenz und Endpunkte protokollieren. Falls dort `/user` oder ein
30s-Loop drin ist → Treffer.
3. **Periphery isolieren**: Periphery 2 min stoppen, Traefik-Log gegen-
checken. `docker stop komodo-periphery; sleep 130; <log-check>; docker
start komodo-periphery`. Vorsicht: Periphery-Down heisst Komodo-Deploy
funktioniert nicht — also nur kurz, kein Deploy in dem Fenster.
4. **Komodo-Core isolieren**: Wenn 1-3 nichts ergeben, Komodo-Core selbst 2 min
stoppen. Wenn Polling weiterlaeuft, ist der Client ausserhalb der Komodo-
Stack (LAN-Geraet). Wenn es aufhoert, polled Komodo Core sich selbst.
5. **LAN-Aufnahme via Komodo-Container**: Falls Container-Stack ausgeschlossen,
im komodo-core-Container per `ss -tnp state syn-recv` waehrend einer
typischen Polling-Sekunde mitschauen. Source-IP/Port der eingehenden
Connection liefert den Hairpin-Origin am genauesten.
## Fix-Erwartung
Sobald Quelle bekannt:
- **Wenn Container im Stack**: Config so anpassen, dass die Anfrage intern
laeuft (kein Public-Hostname), inkl. Doku.
- **Wenn LAN-Geraet**: User informieren, was es ist; wenn moeglich Geraet
reparieren (Tab schliessen, App deinstallieren). Kein Repo-Change noetig.
- **Wenn nicht abstellbar**: separate Frage, ob `HomelabTraefik5xx` fuer
`service="komodo@docker"` mit einem Exclude versehen werden soll — aber nur
als letzter Ausweg. Default ist: Quelle fixen.
## Doku am Ende
- Eintrag in `docs/MIGRATION_LOG.md`: Datum, Symptom, Root-Cause, Fix,
Smoke-Test.
- Falls eine Glance-/Periphery-/sonstige Config-Aenderung noetig wird:
Standard-Loop (Commit → Push → Komodo-Deploy → Smoke), Co-Authored-By-Tag
mitgeben.
## Regeln (nicht verhandelbar)
- Git → Push → Komodo. Keine direkten Komodo-Edits.
- Stop/Start-Tests sind okay, aber nur kurz (≤ 3 min) und mit
Wiederanlauf-Schritt im selben Block.
- Secrets nicht ausgeben.
- Bei zwei gescheiterten Versuchen: stop, Pflichtmatrix aus
`docs/GITOPS_DRIFT_RUNBOOK.md`, Operator fragen.