Session logi zostaja w docs/sessions/ (decyzja z etapu 1). Dodany wylacznie blok frontmattera: type: session-log, visibility: private, status: active, updated = data ostatniego commita pliku. Tresc nietknieta — kazdy plik to +9/-0 linii. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
5.5 KiB
| okf | type | visibility | status | updated | links |
|---|---|---|---|---|---|
| 0.1 | session-log | private | active | 2026-06-24 |
Sesja 2026-06-24 — fleet-prometheus etap 1: scaffold + deploy-node hostname fix
Cel
Wdrożenie etapu 1 Prometheus-as-truth dla liveness floty: scaffold serwisu
fleet-prometheus pod GitOps, poprawka krytycznego buga hostname w deploy-node.sh,
uruchomienie kontenera na VPS.
ZROBIONE
Scaffold services/fleet-prometheus/ pod GitOps
prom/prometheus:v3.5.0— pinned (nielatest).- Scrape: self +
fleet-node(node_exporterVPS przezhost.docker.internal:9100). - Retencja: 15d / 2 GB.
mem_limit: 512m,oom_score_adj: 200— ofiara OOM przed control-plane (-900); VPS ma 4 GB RAM + 4 GB swap.- Healthcheck:
wgetin-container (/bin/-/healthy) — obraz mawgetipromtool, nie macurl; zweryfikowane przed commitem. alerting:irule_files:obecne jako puste placeholdery — osobny krok.- Zarejestrowany w
hosts/vps/services.yaml+inventory/topology.yaml. - Ekspozycja:
tailscale-internal.
Bind fix — nasłuch na Tailscale IP, nie 0.0.0.0 (commit 43c47a0)
- Port bind:
${TAILSCALE_BIND_IP}:9090:9090zamiast0.0.0.0. .envzTAILSCALE_BIND_IP=100.95.58.48tworzony ręcznie na każdym hoście (gitignored) —services/fleet-prometheus/.envna VPS już utworzony.- Defense-in-depth: nie polegamy na firewallu VPS poza repo.
Fix krytyczny: deploy-node.sh — rozwiązywanie HOST_DIR przez os_hostname (commity 644f32d + ae739b5)
Root cause: deploy-node.sh ustalał HOST_DIR przez hosts/$(hostname | lower).
VPS ma OS-hostname ubuntu-4gb-hel1-1, a katalog to hosts/vps — mismatch powodował
ciche "No services found" + exit 0 (fałszywe zielone). VPS nigdy nie deployował się
tą ścieżką od początku istnienia skryptu.
Fix:
- Dodano pole
os_hostnamedo wszystkich 6hosts/*/host.yaml(tylko VPS różni się:os_hostname: ubuntu-4gb-hel1-1; pozostałe =hostname). deploy-node.shmapujeHOST_DIRprzezos_hostname == $(hostname)z fallbackiem na starą logikę + twardyexit 1zamiast cichego skip.- Zweryfikowane: mapowanie
ubuntu-4gb-hel1-1 → hosts/vpsdziała, deploy wszedł w pętlę serwisów.
SSH aliasy vps/piha na SOLARII
Dodane do ~/.ssh/config na SOLARII (parity z SATURN) — zamknięty backlog item.
NIEDOKOŃCZONE — następny krok (priorytet)
fleet-prometheus NIE jest jeszcze uruchomiony na VPS
deploy.sh vps --no-gate wszedł po raz pierwszy w pętlę serwisów (hostname fix zadziałał),
ale padł na node-agent:
Container node-agent Recreate
Error: No such container: 1913f743ea38_node-agent
Przyczyna: rozjazd stanu Docker Compose — istniejące serwisy VPS (node-agent,
control-plane, up ~7–14 dni) zostały utworzone inną ścieżką / project-name niż
widzi deploy-node.sh (bo VPS nigdy wcześniej nie deployował się tą ścieżką).
set -e przerwał pętlę na node-agent; fleet-prometheus jest dalej w kolejce
— NIE powstał. node-agent prawdopodobnie wciąż żyje (błąd przy Recreate, nie kill).
Plan domknięcia — Wariant A (uzgodniony):
Postawić fleet-prometheus ręcznie, z pominięciem rozjazdu stanu pozostałych serwisów:
# na VPS:
cd ~/homelab-codex-ws
docker compose \
-f services/fleet-prometheus/docker-compose.yml \
-f hosts/vps/runtime/fleet-prometheus/docker-compose.override.yml \
--env-file services/fleet-prometheus/.env \
up -d
Weryfikacja po uruchomieniu:
ss -tlnp | grep 9090→ musi pokazać100.95.58.48:9090(NIE0.0.0.0).- Kontener
healthy(docker ps). - Oba targety
up:http://100.95.58.48:9090/api/v1/targets.
Dalsze etapy Prometheus-as-truth (osobne sesje)
- Targety floty
100.x(wszystkie nody przez Tailscale). - Reguły liveness:
up==0 for: 5m. - Integracja
brain-watchdog: odpyt/api/v1/alerts→ Telegram. - Rotacja tokenu HAOS w domowym prom (plaintext).
- Przepięcie observer / panel
agents.okit.plna źródło Prometheus.
Nowe tech-debty (dodane do docs/backlog.md)
- Rozjazd stanu Docker Compose na VPS — serwisy
node-agent,control-planei inne stworzone innymproject-nameniżdeploy-node.shoczekuje; Recreate pada na stale container ID. Dotyka żywego control-plane (~7 dni uptime) — ostrożnie, osobna sesja. - Flaky testy control-plane —
test_incident_lifecycle.py::test_run_once_quarantines_bad_eventi::test_run_once_skips_observer_emitted_eventsfailują przez state-leak między przebiegami pytest (moduł-levelEVENTS_DIR/FAILED_EVENTS_DIR/checkpoint, nietmp_path). Kod observera zdrowy. Gate deploy.sh nierzetelny dopóki nie naprawione; musieliśmy użyć--no-gate.
Wnioski
- Hostname-to-directory mismatch był cicho od zawsze:
exit 0bez deployu wyglądał jak sukces. Wzorzecos_hostnamewhost.yaml+ twardyexit 1eliminuje cichą kategorię błędów dla całej floty. - Rozjazd state Compose to dług z epoki przed GitOps-deployment na VPS — teraz widoczny, bo po raz pierwszy realna pętla serwisów na VPS. Dotykać ostrożnie (live control-plane).
--no-gatejako sygnał: gate deploy.sh jest zawodny przez flaky testy — każde ominięcie gate'u powinno być odnotowane i gonione naprawą testu.- Fleet-prometheus wchodzi nowym serwisem (zero state do rozjazdu) → ręczny
docker compose up -djest bezpieczny i wystarczający do domknięcia etapu 1.