Slo Implementation

by wshobson46891e7e60daNo licenseListed Oct 8, 2026Updated Oct 8, 2026

Define and implement Service Level Indicators (SLIs) and Service Level Objectives (SLOs) with error budgets and alerting. Use when establishing reliability targets, implementing SRE practices, or measuring service performance.

Instructions onlyDevOps & Cloud
AI-generated overview

Defines SLIs, SLOs and error budgets with Prometheus rules and burn-rate alerting for service reliability.

What it does
Provides a framework for defining Service Level Indicators, Service Level Objectives and error budgets, including availability, latency and durability SLI examples. It supplies SLO target tables, error budget policies, Prometheus recording rules, burn-rate alert rules and Grafana dashboard query examples. A companion reference file holds additional templates and worked examples.
When to use it
Use when establishing reliability targets, implementing SRE practices, or measuring user-perceived service performance. It fits teams creating SLO-based alerts, tracking error budgets, or setting availability and latency objectives.
Requirements
Instructions only; no scripts are shipped. Applying the examples assumes a Prometheus-compatible metrics stack and, for dashboards, Grafana. The skill references a companion file at references/details.md.

SLO Implementation

Framework for defining and implementing Service Level Indicators (SLIs), Service Level Objectives (SLOs), and error budgets.

Purpose

Implement measurable reliability targets using SLIs, SLOs, and error budgets to balance reliability with innovation velocity.

When to Use

  • Define service reliability targets
  • Measure user-perceived reliability
  • Implement error budgets
  • Create SLO-based alerts
  • Track reliability goals

SLI/SLO/SLA Hierarchy

SLA (Service Level Agreement)  ↓ Contract with customersSLO (Service Level Objective)  ↓ Internal reliability targetSLI (Service Level Indicator)  ↓ Actual measurement

Defining SLIs

Common SLI Types

1. Availability SLI
promql
# Successful requests / Total requestssum(rate(http_requests_total{status!~"5.."}[28d]))/sum(rate(http_requests_total[28d]))
2. Latency SLI
promql
# Requests below latency threshold / Total requestssum(rate(http_request_duration_seconds_bucket{le="0.5"}[28d]))/sum(rate(http_request_duration_seconds_count[28d]))
3. Durability SLI
# Successful writes / Total writessum(storage_writes_successful_total)/sum(storage_writes_total)

Setting SLO Targets

Availability SLO Examples

SLO %Downtime/MonthDowntime/Year
99%7.2 hours3.65 days
99.9%43.2 minutes8.76 hours
99.95%21.6 minutes4.38 hours
99.99%4.32 minutes52.56 minutes

Choose Appropriate SLOs

Consider:

  • User expectations
  • Business requirements
  • Current performance
  • Cost of reliability
  • Competitor benchmarks

Example SLOs:

yaml
slos:  - name: api_availability    target: 99.9    window: 28d    sli: |      sum(rate(http_requests_total{status!~"5.."}[28d]))      /      sum(rate(http_requests_total[28d]))
  - name: api_latency_p95    target: 99    window: 28d    sli: |      sum(rate(http_request_duration_seconds_bucket{le="0.5"}[28d]))      /      sum(rate(http_request_duration_seconds_count[28d]))

Error Budget Calculation

Error Budget Formula

Error Budget = 1 - SLO Target

Example:

  • SLO: 99.9% availability
  • Error Budget: 0.1% = 43.2 minutes/month
  • Current Error: 0.05% = 21.6 minutes/month
  • Remaining Budget: 50%

Error Budget Policy

yaml
error_budget_policy:  - remaining_budget: 100%    action: Normal development velocity  - remaining_budget: 50%    action: Consider postponing risky changes  - remaining_budget: 10%    action: Freeze non-critical changes  - remaining_budget: 0%    action: Feature freeze, focus on reliability

SLO Implementation

Prometheus Recording Rules

yaml
# SLI Recording Rulesgroups:  - name: sli_rules    interval: 30s    rules:      # Availability SLI      - record: sli:http_availability:ratio        expr: |          sum(rate(http_requests_total{status!~"5.."}[28d]))          /          sum(rate(http_requests_total[28d]))
      # Latency SLI (requests < 500ms)      - record: sli:http_latency:ratio        expr: |          sum(rate(http_request_duration_seconds_bucket{le="0.5"}[28d]))          /          sum(rate(http_request_duration_seconds_count[28d]))
  - name: slo_rules    interval: 5m    rules:      # SLO compliance (1 = meeting SLO, 0 = violating)      - record: slo:http_availability:compliance        expr: sli:http_availability:ratio >= bool 0.999
      - record: slo:http_latency:compliance        expr: sli:http_latency:ratio >= bool 0.99
      # Error budget remaining (percentage)      - record: slo:http_availability:error_budget_remaining        expr: |          (sli:http_availability:ratio - 0.999) / (1 - 0.999) * 100
      # Error budget burn rate      - record: slo:http_availability:burn_rate_5m        expr: |          (1 - (            sum(rate(http_requests_total{status!~"5.."}[5m]))            /            sum(rate(http_requests_total[5m]))          )) / (1 - 0.999)

SLO Alerting Rules

yaml
groups:  - name: slo_alerts    interval: 1m    rules:      # Fast burn: 14.4x rate, 1 hour window      # Consumes 2% error budget in 1 hour      - alert: SLOErrorBudgetBurnFast        expr: |          slo:http_availability:burn_rate_1h > 14.4          and          slo:http_availability:burn_rate_5m > 14.4        for: 2m        labels:          severity: critical        annotations:          summary: "Fast error budget burn detected"          description: "Error budget burning at {{ $value }}x rate"
      # Slow burn: 6x rate, 6 hour window      # Consumes 5% error budget in 6 hours      - alert: SLOErrorBudgetBurnSlow        expr: |          slo:http_availability:burn_rate_6h > 6          and          slo:http_availability:burn_rate_30m > 6        for: 15m        labels:          severity: warning        annotations:          summary: "Slow error budget burn detected"          description: "Error budget burning at {{ $value }}x rate"
      # Error budget exhausted      - alert: SLOErrorBudgetExhausted        expr: slo:http_availability:error_budget_remaining < 0        for: 5m        labels:          severity: critical        annotations:          summary: "SLO error budget exhausted"          description: "Error budget remaining: {{ $value }}%"

SLO Dashboard

Grafana Dashboard Structure:

┌────────────────────────────────────┐│ SLO Compliance (Current)           ││ ✓ 99.95% (Target: 99.9%)          │├────────────────────────────────────┤│ Error Budget Remaining: 65%        ││ ████████░░ 65%                     │├────────────────────────────────────┤│ SLI Trend (28 days)                ││ [Time series graph]                │├────────────────────────────────────┤│ Burn Rate Analysis                 ││ [Burn rate by time window]         │└────────────────────────────────────┘

Example Queries:

promql
# Current SLO compliancesli:http_availability:ratio * 100
# Error budget remainingslo:http_availability:error_budget_remaining
# Days until error budget exhausted (at current burn rate)(slo:http_availability:error_budget_remaining / 100)*28/(1 - sli:http_availability:ratio) * (1 - 0.999)

Additional patterns and templates

More detailed templates and worked examples live in references/details.md. Read that file for the full pattern library.

Source and attribution

Source:wshobson/agentsinplugins/observability-monitoring/skills/slo-implementationat commit46891e7

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal