---
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
   `kb/subsystems/fleet-inventory-verify.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.

---

