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