--- okf: "0.1" type: phase visibility: private status: active updated: 2026-08-03 links: - backlog.md --- ## Plan: Monitoring floty — Prometheus jako źródło prawdy **Data**: 2026-06-22 **Źródło**: sesja 2026-06-22 (`docs/sessions/2026-06-22.md`) **Decyzja**: Prometheus (pull, `up{}`) zastępuje warstwę WYKRYWANIA liveness (node-agent shipper + rsync/ssh + event-store + observer prune/checkpoint + ręczne TTL) — przyczynę nawracających awarii (uid≠1000, ślepy ssh-mount, bloat ~242k eventów, race prune↔checkpoint, NOMINAL-bez-TTL). Osobny fleet-Prometheus pod GitOps, **nie** adopcja domowego instance PIHA. **BEZ** Alertmanagera — alert przez brain-watchdog. Placement: VPS. Granica: zostają supervisor (remediacja), observer/panel, ha-diag-agent, historia incydentów, out-of-band watchdog. > Zastępuje wcześniejszy szkic (blackbox + Alertmanager) z sesji 2026-06-17. **Kroki (priorytetowo)**: 1. Scaffold serwisu `fleet-prometheus` pod GitOps (worktree `task/fleet-prometheus`, wzorzec `services/vikunja/`): compose + `env.example` + `service.yaml` + README + `healthcheck.sh`; rejestracja w `hosts/vps/services.yaml` + `inventory/topology.yaml`; exposure `tailscale-internal`; pusty scrape na start (self + lokalny `node_exporter` VPS). 2. ✅ ZROBIONE (2026-06-26, commit `7d4014e`) — Inwentaryzacja nodów floty `100.x` do scrape. Dodane: piha/solaria/lustro (`node:` label), vps zachowany. Saturn pominięty (workstation), chelsty/chelsty-infra pominięte (node_exporter down z VPS → osobny wpis). 3. Container-layer exporter (cAdvisor lub lekki docker-state) — `node_exporter` nie widzi kontenerów. 4. ✅ ZROBIONE (2026-06-30, commit `d417000`) — Reguły liveness (`up==0 for: 5m`). `rules/liveness.yml`: `NodeDown expr up{node=~"vps|piha"}==0 for 5m severity critical`. Only always-on (vps, piha); solaria/lustro świadomie wykluczone (intermittent → anomaly detection). Deploy: fleet-prometheus Recreated (zmiana compose), reguła inactive=poprawnie. 5. ✅ ZROBIONE (2026-06-30, commit `62d6fc0`) — brain-watchdog: drugie wejście — poll Prometheus `/api/v1/alerts` (`firing`) → Telegram. Architektura A: dwa niezależne tory, mózg NIETKNIĘTY, debounce per-alert (klucz alertname:node w state.json). 12 testów pass. PENDING zamknięty 2026-07-02: poll POTWIERDZONY reconem (obraz zbudowany po `62d6fc0`, `PROMETHEUS_URL` w `.env` i w env kontenera, zero poll failed) — patrz `docs/infra/inventory-verify-2026-07-02.md`. ✅ END-TO-END UDOWODNIONE 2026-07-06 (Etap 0 cutoveru): tor Prometheus → watchdog → Telegram potwierdzony w produkcji testem `AlertTestEtap0` (firing → log polla → Telegram → rollback) — patrz `docs/sessions/2026-07-06.md`. 6. Rotacja tokenu HAOS w domowym prom (plaintext). 7. Przepięcie observer / panel `agents.okit.pl` na Prometheus jako źródło — największy znak zapytania przy cutoverze. 8. Parallel-run obok rury eventowej; cutover dopiero gdy Prometheus-truth się udowodni. ---