Alert Rules¶
An actionable Atlas alert binds an executable expression to persistence, severity, ownership, a runbook, a protected invariant, and a drill. Static validation can prove that those references exist. Only a firing test can prove that runtime telemetry reaches the intended operator.
Governed Runtime Set¶
The runtime alert contract requires 20 identities across these domains:
| Domain | Protected behavior |
|---|---|
| API health | request availability and /v1/genes latency |
| SLO burn | cheap and standard fast, medium, and slow budget consumption |
| overload | deliberate shedding and cheap-path survival |
| store and cache | download, backend, and cache stability |
| registry and datasets | refresh freshness and usable dataset presence |
| integrity and recovery | ingest, query, disk, restart, and shard correctness |
The contract's severity_tier is the routing authority. The secondary alert
catalog uses different display severities for some entries. For example, the
contract pages cheap and standard fast or medium burn, while the catalog labels
those entries as warnings. Do not derive paging policy from the catalog label.
Three Alert Inventories¶
flowchart TD
Contract["20-alert runtime contract"] --> RuntimeRules["runtime + SLO Prometheus rules"]
Catalog["22-entry navigation catalog"] --> Contract
Catalog --> Unbound["2 API aliases without contract specs"]
Security["security Prometheus rules"] --> Separate["separate routing and drill assurance"]
api.error-rate-high and api.latency-p95-high are catalog-only aliases with
no specification in the 20-alert contract. Security rules for authentication,
authorization, integrity, and tamper conditions are also outside that contract.
They remain important, but they need separate notification and runbook proof.
What Static Verification Checks¶
The supported verifier writes a run-scoped contract report:
cargo run -p bijux-atlas-dev -- ops obs alerts verify \
--allow-write \
--run-id alert-contract-review \
--format json
It parses the main runtime and SLO rule files, checks required alert identities,
and requires severity, subsystem, alert_contract_version, and a runbook
annotation. It does not evaluate PromQL against Prometheus, inspect Alertmanager
routing, deliver a notification, validate the security rule pack, or execute a
drill.
Treat its success as source-contract evidence only.
Selected Trigger Semantics¶
- high 5xx rate pages above 0.5% for 10 minutes;
/v1/genesp95 latency pages above 800 ms for 15 minutes;- cheap-path survival pages below 99.99% during active shedding for five minutes;
- registry refresh warns after age exceeds 10 minutes for 15 minutes;
- store backend error rate pages above 2% for standard and heavy traffic over 10 minutes;
- shard-integrity violation pages after five minutes.
Read the checked-in expression before mitigation. These summaries do not replace label filters, denominators, or persistence windows in Prometheus.
Distinguish Quiet From Blind¶
An inactive alert is meaningful only when its source series, evaluation, and routing path are healthy. Preserve alert state together with the reason it is not firing.
| Observation | Safe interpretation |
|---|---|
| expression evaluates below threshold with fresh source samples. | The bounded condition was not observed during the evaluated window. |
| source series is absent. | Coverage, scrape, label, or workload presence is unknown; this is not a healthy zero. |
| rule is pending. | The threshold is met but the persistence window has not completed. |
| alert is inhibited. | A higher-order condition owns notification; the underlying alert still exists. |
| alert is silenced. | Delivery is intentionally suppressed; service state is unchanged. |
| notification is missing after firing. | Evaluation succeeded but operator delivery is unproven. |
Release decisions must fail closed when a required alert is blind or its notification path is unproven. Record silence and inhibition identities in the same evidence window so a quiet pager cannot be mistaken for a healthy system.
Prove the Alert Path¶
sequenceDiagram
participant Drill
participant Service
participant Prometheus
participant Alertmanager
participant Operator
Drill->>Service: inject bounded condition
Service-->>Prometheus: emit expected metric and labels
Prometheus-->>Alertmanager: pending, then firing
Alertmanager-->>Operator: deliver owned notification
Operator->>Service: follow runbook and remove fault
Service-->>Prometheus: invariant recovers
Prometheus-->>Alertmanager: alert resolves
Retain the rule revision, metric sample, labels, pending and firing timestamps, notification receipt, acknowledgement, runbook action, recovery, and resolved event. Missing delivery or resolution evidence is a monitoring failure even when the expression parsed successfully.
Silences need a narrow matcher, owner, justification, start, expiry, and review trail. An acknowledgement is not a resolution, and a silence is not a repair.
Continue with Telemetry drills for current execution limits, Service Objectives and Error Budgets for burn semantics, and Incident response for containment.