Observability Reference/Alerting & Incidents

Alert Design & Fatigue

Symptom vs cause alerts, paging criteria, alert routing, inhibition, and the "would I wake up for this?" test.

3/5Overview: 30m

The on-call UX problem

Alerts are notifications to sleepy humans. Bad alerts cause:

  • Fatigue — ignored pages, slow response
  • Burnout — unsustainable rotations
  • Blame culture — fear of deploying

Google SRE: optimize for on-call quality of life, not coverage metrics.

Symptom vs cause

TypeExamplePage?
SymptomCheckout SLO burn rate 14.4×Yes
Symptomp99 latency > 2s for 10 minMaybe (if SLO-linked)
CauseSingle pod CPU > 90%No (investigate via dashboard)
CauseDisk 80% fullTicket (unless imminently critical)

Page on user pain, investigate causes via dashboards and traces.

The three filters (Google SRE)

Every page must be:

  1. Actionable — on-call can do something (rollback, scale, failover)
  2. Urgent — can't wait until morning
  3. Novel — not a known flaky monitor (fix or delete it)

"If I got this at 3am, would I thank the alert?" — if no, fix or remove.

Severity tiers

TierResponseExample
SEV1Immediate all-handsComplete outage, data loss
SEV2On-call + escalationMajor feature degraded
SEV3Business hoursMinor degradation, workaround exists
SEV4BacklogCosmetic, tech debt

Tie severity to customer impact, not internal inconvenience.

Measuring resilience patterns

Circuit breakers, bulkheads, and retry budgets (Distributed Systems topic) need observability, not reimplementation here:

circuit_breaker_state{service="payment", downstream="stripe"} # 0=closed, 1=open, 2=half-open retry_attempts_total{service="payment", result="exhausted"}

Page when SLO burns, not when breaker opens once (that might be correct behavior). Dashboard breaker state during triage.

Alert routing and noise reduction

  • Ownership — service team gets their SLO alerts
  • Inhibition — parent SLO alert suppresses child dependency noise
  • Maintenance windows — silence deploy-related expected blips (carefully)
  • Aggregation — one alert per incident, not per replica

Runbooks

Every page links to a runbook:

  1. What this alert means
  2. First checks (dashboard links, recent deploys)
  3. Escalation path
  4. Known false positives

Runbook in the alert annotation — not a wiki link nobody can find at 3am.

Interview answer

"We page only on SLO burn-rate and explicit capacity emergencies. Cause-level alerts go to Slack. Every monitor has an owner and quarterly audit — delete what we ignore."

Link forward

Incident Response & Postmortems covers what happens after the page fires.

Further Reading

Hands-On Tasks (Optional)

Low-setup exercises — signal-selection drills, local Prometheus/Grafana, or OTel sandbox. No autograding; the goal is production triage fluency.

  • Audit three hypothetical alerts

    For: (1) CPU > 80%, (2) error budget burn rate 14.4× over 1h, (3) pod restart count > 0 — classify each as page/ticket/log-only and rewrite one as a symptom-based alert.

    15m