Architecture
The Raspberry Pi runs a native Python textfile collector and Grafana Alloy. Fast host collection runs every 15 seconds; service health, Wi-Fi and configured probes run every minute; cached update metadata is inspected hourly. No package upgrade is triggered by telemetry collection.
Pi /proc + /sys + bounded firmware commands └─ atomic public textfiles → Alloy unix exporter ├─ full host metrics + filtered journal → private Grafana Cloud └─ public names and safe dimensions → HTTPS remote-write gateway └─ decode, validate, rebuild → private VictoriaMetrics └─ fixed-query Fastify API → React / ECharts portalSeparate Starlight repository → GitHub Actions → GitHub PagesVictoriaMetrics has 14-day retention on a dedicated 8 GiB filesystem. The API and ingestion gateway bind to separate loopback ports on the VPS. Only Caddy receives public HTTPS traffic. The database is inside a private Compose network and has no published port.
The public portal measures resource conditions and telemetry freshness. It does not prove application correctness. No business SLO is configured. Historical gaps and incomplete coverage must be interpreted separately from uptime.
The Pi’s Alloy state is a bounded 384 MiB volatile filesystem. Persistent and runtime journal budgets are 96 MiB and 32 MiB. The combined target is at most 512 MiB. Queued data is intentionally lost on reboot or after the short WAL window. This design avoids needing a USB SSD, but does not eliminate microSD wear from the operating system.
See privacy and deployment for the two trust boundaries.