SLA / Uptime History
License: paid tier and above. See Licensing.
Every member health transition (up→down, down→up) is recorded, so you can report uptime % over a window and see exactly when — and for how long — a member was down, without needing a separate monitoring stack.
How It Works
health probe flips state ──▶ health_history table (rqlite), one row per node
│
GET .../uptime and GET .../incidents replay the rows on demand
│
uptime% = healthy time ÷ window, cluster-level OR across nodes
incidents = points where the OR-combined state actually changed
There's no separate collection process — the same health-manager callback that already updates live status (internal/health → coreSink) also writes a health_history row, but only on an actual transition, not on every probe. That keeps the table small: a stable member with zero incidents in 30 days contributes at most one row (its last known state before the window).
Multi-node clusters: each node probes independently and records its own view. Uptime is computed with OR semantics — a member counts as healthy at any instant if at least one node considered it healthy then, matching how health.Manager.IsHealthy already treats an unprobed member as healthy by default (optimistic until proven otherwise).
Rows older than the retention window are pruned automatically after every write; default is 30 days, configurable via health.historyRetentionDays.
View Uptime and Incidents
WebUI
Open SLA / Uptime under Infrastructure. Pick a pool to see a table of 24h/7d/30d uptime % per member, and an incidents list (with a 24h/7d/30d toggle) showing each down/recovery event with a timestamp. A member's slide- over panel in the topology view also shows its 30-day uptime badge.
CLI
gslbctl sla uptime --pool pool-abc123 --period 7d
gslbctl sla incidents --pool pool-abc123 --period 30d--period accepts Nh or Nd (e.g. 24h, 7d, 30d); defaults to 7d.
API
curl "https://<api-host>:<port>/api/v1/pools/<pool-id>/uptime?period=7d" \
-H "Authorization: Bearer $TOKEN"
curl "https://<api-host>:<port>/api/v1/pools/<pool-id>/incidents?period=7d" \
-H "Authorization: Bearer $TOKEN"Permissions
Gated by the same pool:read permission as pool status (viewer and up) — there's no separate permission, since this is read-only historical data about pools you can already see.
Notes
- Uptime % for a window with no recorded transitions at all is 100% — a member that has never been seen unhealthy has nothing to subtract.
- Incidents collapse multi-node noise: if several nodes flip within milliseconds of each other, only the resulting cluster-level (OR-combined) state change is reported as one incident, not one per node.
- History collection runs regardless of license tier — only the
uptime/incidentsendpoints (and the WebUI/CLI surfaces built on them) require a paid license, so upgrading immediately shows already-collected history rather than starting from zero. - Not managed via Terraform — this is read-only historical/diagnostic data, not a declarative resource (same precedent as Config Snapshots and the Query Tracer).