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:
@@ -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.
|
||||||
Reference in New Issue
Block a user