Define your first SLO
Attach a service level objective to a metric and read the error budget.
A Service Level Objective (SLO) wraps an existing metric in a
target: a percentage of a rolling window during which the metric
must report healthy. The gap between the target and the actual
healthy time is tracked as an error budget. When the metric
reports unhealthy, the budget burns. When it recovers, the burn
stops. The budget surfaces on status pages and in webhook events.
Prerequisites
- A reporting metric. If one is not in place, complete Define your first metric first.
Steps
Create a service
Services group related SLOs and render as a row on status pages. In
the console, open Services, then New service. Name it after
the system the SLOs describe, for example checkout-api. The
description field is optional.
Define the SLO
Open the service, then SLOs, then New SLO.
Configure:
- Metric: the metric defined in the previous quickstart page.
- Target: percentage of the window the metric must remain
healthy. A common starting value is
99.9. - Window: rolling window in days. A common starting value is
30. - Public: enables rendering on customer-facing status pages.
Save the SLO.
Choosing a target
The right target depends on the system's achieved availability
over the prior 90 days. If that data is not available, start with
99.5% and tighten once the SLO has accumulated a few weeks of
history. A target tighter than reality burns budget on noise and
loses signal value.
Read the burn timeline
Open the SLO. The detail page reports:
- Error budget remaining: percent of the window's allowance
still available. At
99.9% / 30 days, the allowance is roughly 43 minutes. Below 100% indicates the metric has been unhealthy for some of the window. - Latest burn event: the current or most recent unhealthy stretch, including its start, end (or marker indicating still open), and percent of the budget burned.
- History: prior burn events in the window, with duration and budget cost.
The evaluator runs every 5 minutes. If the metric flipped to unhealthy during the previous quickstart page, a burn event is visible here.
Subscribe to webhook events
If the organisation's plan includes outbound webhooks, open Webhooks, then New subscription. The events relevant to SLOs are:
slo.burn_started: an SLO crossed below its target. The payload includes theslo_id,service_id,started_at, and the currenterror_budget_burned_pct.slo.burn_resolved: the SLO recovered. The payload includes the matchingburn_event_idand thefinal_budget_remaining_pct.
Wire deliveries to PagerDuty, Slack, or any HTTPS endpoint that accepts JSON. Endpoint quotas vary by plan.
Calculation
Each evaluator tick reads the metric's last status, updates the moving window, and recomputes:
good_samples = samples that count as healthy, within the window
total_samples = all samples, within the window
budget_total = total_samples * (1 - target / 100)
budget_burned = total_samples - good_samples
budget_remaining_pct = 100 * (1 - budget_burned / budget_total)
The window never reaches back before the SLO was created, so deleting and recreating an SLO resets its epoch.
Every non-healthy sample burns budget. degraded and no_data
samples both count against the allowance, not just unhealthy. A
no_data sample counts as good only when the metric's no-data
treatment folds it to healthy.
A window with no samples at all is governed by the SLO's
unknown-data policy, and under the default policy (down) it burns
too. Silence is not free. See
SLOs and error budgets
for the other two policies.
The budget reads collecting rather than a number until the SLO has 24 hours of in-window observation, and again whenever the metric is stale: a currently-blind metric makes no budget claim in either direction.
Per-customer overrides
Customers can carry per-SLO target overrides. See Customer scopes for the model.
Next
- Publish your first status page
- Webhook payload reference covers
slo.burn_startedandslo.burn_resolvedpayload shapes.