# 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; ; 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.