RousselTMLEARNING

Observabilité

Générer ses SLO Prometheus avec Sloth

Décrire un SLO en quelques lignes avec Sloth et générer automatiquement règles d'enregistrement multi-fenêtres et alertes burn rate, en CLI ou sur Kubernetes, avec ses dashboards Grafana.

1. Le principe #

Décrire, générer, charger.

Pourquoi Sloth #

Fonctionnement de Sloth
Une vingtaine de lignes de spécification produisent des dizaines de règles cohérentes.

Sloth est un générateur open source : à partir d'une spécification de SLO, il produit les règles d'enregistrement des SLI pour toutes les fenêtres, les métadonnées (objectif, budget restant) et les alertes multi-fenêtres multi-taux de la méthode Google.

2. Écrire une spécification #

Le format prometheus/v1.

Exemple #

version: "prometheus/v1"
service: "checkout"
labels:
  owner: "equipe-paiement"
slos:
  - name: "requests-availability"
    objective: 99.9
    description: "Requêtes de l'API checkout sans erreur 5xx."
    sli:
      events:
        error_query: sum(rate(http_requests_total{service="checkout",code=~"5.."}[{{.window}}]))
        total_query: sum(rate(http_requests_total{service="checkout"}[{{.window}}]))
    alerting:
      name: CheckoutHighErrorRate
      labels:
        category: availability
      annotations:
        summary: "Budget d'erreur de checkout consommé trop vite"
        runbook_url: https://wiki.example.org/runbooks/checkout
      page_alert:
        labels: { severity: critical }
      ticket_alert:
        labels: { severity: warning }

Le gabarit {{.window}} est remplacé par chaque fenêtre (5m, 30m, 1h, 2h, 6h, 1d, 3d, 30d).

sloth validate -i slos/
sloth generate -i slos/checkout.yml -o rules/checkout-slo.yml
# ou avec Docker
docker run --rm -v $PWD:/w ghcr.io/slok/sloth generate -i /w/slos/checkout.yml -o /w/rules/checkout-slo.yml

Ce qui est généré #

MétriqueSignification
slo:sli_error:ratio_rate5m ... ratio_rate30dTaux d'erreur par fenêtre
slo:objective:ratioObjectif (0,999)
slo:error_budget:ratioBudget (0,001)
slo:current_burn_rate:ratioBurn rate actuel
slo:period_error_budget_remaining:ratioBudget restant sur la période

Toutes portent les labels sloth_service, sloth_slo et sloth_id.

3. Sur Kubernetes et dans Grafana #

Opérateur et dashboards.

Opérateur #

En mode Kubernetes, Sloth surveille des ressources PrometheusServiceLevel et crée les PrometheusRule correspondantes pour le Prometheus Operator :

apiVersion: sloth.slok.dev/v1
kind: PrometheusServiceLevel
metadata:
  name: checkout
  namespace: paiement
spec:
  service: checkout
  slos:
    - name: requests-availability
      objective: 99.9
      sli:
        events:
          errorQuery: sum(rate(http_requests_total{service="checkout",code=~"5.."}[{{.window}}]))
          totalQuery: sum(rate(http_requests_total{service="checkout"}[{{.window}}]))
      alerting:
        name: CheckoutHighErrorRate
        pageAlert: { labels: { severity: critical } }
        ticketAlert: { labels: { severity: warning } }
Bonne Pratique : Sloth publie deux dashboards Grafana (identifiants 14348 pour le détail d'un SLO et 14643 pour la vue d'ensemble) qui exploitent directement les métriques générées.

Articles liés

SRE : SLI, SLO et SLA expliqués simplement

Les fondamentaux de l'ingénierie de la fiabilité (SRE) : différence entre SLI, SLO et SLA, choix des indicate…

Le budget d'erreur : décider avec les SLO

Calculer et suivre un budget d'erreur, rédiger une politique de budget d'erreur et l'utiliser pour arbitrer e…

Mesurer des SLI avec Prometheus

Implémenter des SLI de disponibilité et de latence avec Prometheus : métriques nécessaires, requêtes de ratio…

Pour aller plus loin