Observer
Observer

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

Steps

  1. 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.

  2. 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.

  3. 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 once per minute. If the metric flipped to unhealthy during the previous quickstart page, a burn event is visible here.

  4. 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 the slo_id, service_id, started_at, and the current error_budget_burned_pct.
    • slo.burn_resolved: the SLO recovered. The payload includes the matching burn_event_id and the final_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:

budget_burned   = total seconds in unhealthy status, within the window
budget_total    = window_seconds * (1 - target / 100)
budget_remaining_pct = 100 * (1 - budget_burned / budget_total)

Statuses other than unhealthy (degraded, no_data, unknown) do not burn budget. Brief degraded flickers therefore do not consume the allowance on their own.

Next

Was this page helpful?