Alert ↔ failure relationships

The model behind estimate set #2 of the threshold tuner (monitoring/threshold_tuning/tune_thresholds.py). For each monitored data point: what failure it predicts, where the failure point actually is, and the safety margin that backs the warning off from it. The tuner encodes these as failure_point / safety per alert.

Evidence grade: D = direct (we've seen the failure), I = inferred from the system's design, S = standard SRE convention.

Live alerts (Prometheus tier0.yml)

AlertData pointRelationship to failureFailure pointMarginGrade
PgDumpDurationDrift7d-median pg_dump durationA dump that can't finish inside its TimeoutStartSec (14h) or collides with the next nightly window → no backup that night. Slow-moving capacity signal, not an acute failure.~14h (50400s) — the systemd timeoutwarn at 50% of it (~7h); but the data-extreme (≈228min) is far tighter, so that winsI
SuiNodeFallingBehindcheckpoint execution lag (s)Node not executing checkpoints → indexer ingests stale/no data. Brief lag (<~min) is normal catch-up; sustained lag = real (tunnel down, node wedged).unrecoverable ≈ 1h behindwarn at 30min (50% of failure)D (WireGuard breaks caused 645min lag this month)
BackupStaleage of last successful backupNo recent restore point. Backups are daily → >24h means a run was missed.48h (2 missed days)warn at 24h (1 missed day)I
PartitionArchiveStaleage of last partition archiveCold-partition offload (the real DB-size governor) stalled. Weekly cadence.14dwarn at ~12d (7d cadence + grace)I
DiskAlmostFull (db)min free fraction0% free → Postgres write failure / crash.0% freewarn at 10% free (standard runway)S
HostMemoryAlmostExhaustedmin MemAvailable0 → OOM-killer reaps Postgres/uvicorn.0 byteswarn at ~500MBS
InstanceDown / PostgresDownup / pg_upBinary. A down target/DB is always an incident.n/an/a — not tunableD

Disabled / reference alerts (sui-monitoring.yml, NOT loaded in prod)

These reference metrics that this Prometheus does not scrape (pre-migration indexer setup: replication-to-Neon, /mt/sp1, sui_indexer_cron_*). They are a disabled reference file — they can't fire. Recommendation: retire them or re-wire their exporters before relying on them. The tuner reports them as metric_absent / dead.

Notes for the next modelling pass (tuner step 6)

duration is a slope/forecast alert: fire when the 7d median's growth rate projects crossing the 14h timeout within N days. Worth adding.

blips; the threshold mostly governs sensitivity to a wedged node.

far from danger); their standard fixed margins are the right relationship and the tuner deliberately leaves them unchanged.