Learning objectives
By the end of this module, you should be able to:
- Explain burn rate as the speed at which a service consumes its error budget.
- Distinguish page, ticket and dashboard signals based on urgency and actionability.
- Reason about multiwindow burn-rate alerts and low-traffic edge cases.
A page should require timely human action
Paging is expensive and should be reserved for conditions where a human can improve the outcome now. Alerts that are not urgent belong in tickets, reports or dashboards.
Tie the trigger to an SLO or another explicit user-impact/risk condition whenever practical.
Burn rate normalizes error consumption
Burn rate compares the observed bad-event rate with the error rate allowed by the SLO. A burn rate of 1 consumes the budget exactly across the full window; higher values spend it faster.
For a 99.9% objective, the allowed bad-event rate is 0.1%. An observed 1.44% bad-event rate is a 14.4× burn.
Multiple windows improve signal quality
A long window confirms material budget consumption while a short window confirms the problem is still active. This reduces stale pages and helps distinguish fast severe outages from slower reliability erosion.
Use published starting points as guidance, then tune them to traffic volume, risk and sustainable pager load.
Derive burn thresholds from budget consumption
For a full SLO period T, consuming fraction p of the full error budget inside a shorter window w corresponds to burn rate p × T / w when T and w use the same units.
For a 30-day (720-hour) objective: 2% in 1 hour gives 14.4×; 5% in 6 hours gives 6×; 10% in 72 hours gives 1×. These are useful starting points, not immutable constants.
Worked example
Burn-rate calculation
SLO = 99.9% → allowed error rate = 0.1%
Observed error rate = 1.44%
Burn rate = 1.44 / 0.10 = 14.4×
- A 14.4× burn would consume about 2% of a 30-day budget in one hour if sustained.
- The alerting policy should also verify current impact using an appropriate short window.
Core lab · account-free
Lab 05 — Evaluate burn-rate alert candidates
Goal: Calculate burn rates and map them to page, ticket or observe decisions.
Before you start
- No cloud account required.
- Core lab uses bash/Python 3 and local files only.
- Running case study: use the same checkout journey throughout the course unless the lab explicitly says otherwise.
STEP 1Derive thresholds instead of memorizing them
python3 - <<'PY2'
period_hours=30*24
cases=[('page-fast',0.02,1),('page-slow',0.05,6),('ticket',0.10,72)]
for name,budget_fraction,window_hours in cases:
burn=budget_fraction*period_hours/window_hours
print(name,'burn_rate',burn)
PY2
STEP 2Calculate observed burn from event data
python3 - <<'PY2'
slo=0.999
valid=50_000
bad=720
allowed_error=1-slo
observed_error=bad/valid
print('observed_error_pct',round(observed_error*100,3))
print('burn_rate',round(observed_error/allowed_error,1))
print('decision','PAGE' if observed_error/allowed_error >= 14.4 else 'evaluate slower windows')
PY2
STEP 3Add a low-traffic exception note
Now change `bad` to 50, 300 and 1,500. Explain why a single short-window ratio is not enough to determine urgency, especially at low traffic.
Verify
- 14.4, 6 and 1 are interpreted relative to the same allowed error rate.
- The learner separates urgent pages from slower ticket-level budget erosion.
Expected outcome
- Derived 14.4×/6×/1× reference thresholds plus observed burn calculations from learner-editable event counts.
Diagnose / troubleshoot
- If a percentage threshold has no SLO context, convert it to budget consumption.
- If every breach pages, separate urgent response from conditions that can wait for working hours.
Real-world connectionSLO-based alerting protects the error budget while controlling pager noise.
Real-tool practicum · optional but recommended
Optional practicum — validate Prometheus SLO alert rules
Use promtool inside the local Prometheus container and query the recording rules.
Prerequisites
- Docker/Compose available.
- SRE Lab Pack or release source tree.
Resources created
- Prometheus recording/alert rules and local burn-rate series.
Cost / risk
TOOL 1./ops/setup-sre-local-lab.sh
TOOL 2docker exec gnu-sre-prometheus promtool check rules /etc/prometheus/slo-alerts.yml
TOOL 3curl -fsS http://127.0.0.1:9090/api/v1/query --get --data-urlencode 'query=sre_demo:burn_rate:1h'
TOOL 4curl -fsS http://127.0.0.1:9090/api/v1/query --get --data-urlencode 'query=sre_demo:burn_rate:5m'
Verify
- promtool reports SUCCESS and Prometheus exposes the paired 1h/5m burn-rate recording rules used by the demo multiwindow alert.
Cleanup
- ./ops/cleanup-sre-local-lab.sh
Warnings
- Published burn thresholds are starting points; tune to traffic and pager sustainability.
- A syntactically valid rule can still encode a bad reliability policy.
Avoid these traps
Common mistakes
- Paging on every metric anomaly.
- Using a burn-rate threshold without a defined SLO.
- Ignoring low-traffic behaviour where a tiny number of failures creates extreme ratios.
Knowledge check
Can you connect the reliability objective to an engineering decision?
Three concept checks plus one scenario check.
1What does a burn rate of 1 mean?
The service is consuming error budget at exactly the rate allowed by the SLO across the full objective window.
2Why combine a long and short alerting window?
The long window confirms meaningful budget consumption while the short window verifies the problem is still active.
3When should a signal generally page a human?
When it represents urgent, actionable risk or user impact where human intervention can improve the outcome now.
4Scenario: a low-traffic service has one failure in ten requests and triggers a huge burn rate. What should you do before adopting the alert unchanged?
Evaluate low-traffic handling such as longer windows, combining signals or synthetic traffic so isolated events do not create unsustainable pages.