Files
homelab-infra/docs/archive/2026-05/CODEX_KOMODO_5XX_2026-05-31.md
T
2026-05-31 22:53:10 +02:00

5.3 KiB

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.