- Authors

- Name
- Phillip Pham
- @ddppham
TL;DR
- SLIs (Service Level Indicators) messen, was Nutzer tatsaechlich erleben -- Latenz, Verfuegbarkeit und Durchsatz sind die drei wichtigsten
- SLOs (Service Level Objectives) definieren das interne Qualitaetsziel: "99.9% der Requests unter 200ms" ist konkreter als "System muss schnell sein"
- Error Budgets geben Teams ein messbares Budget fuer Fehler -- solange Budget vorhanden ist, darf deployed werden
- Burn-Rate-Alerts ersetzen statische Schwellwerte und warnen, wenn das Error Budget zu schnell aufgebraucht wird
- Tools wie Sloth und Pyrra generieren PrometheusRules automatisch aus SLO-Definitionen
Kubernetes SLA Management: SLOs, SLIs und Error Budgets
Die Frage "Wie verfuegbar ist unser Service?" klingt einfach, ist aber in Kubernetes-Umgebungen ueberraschend schwer zu beantworten. Uptime-Monitoring auf Node-Ebene reicht nicht aus, wenn ein Pod alle 10 Minuten neu startet und dabei 2% der Requests verliert.
Dieser Guide zeigt, wie Plattform-Teams und SREs sinnvolle SLIs definieren, daraus SLOs ableiten und Error Budgets als Steuerungsinstrument nutzen.
SLA vs. SLO vs. SLI: Die Unterscheidung
SLI (Service Level Indicator)
└── Was wird gemessen?
└── Beispiel: "Anteil der HTTP-Requests mit Status 2xx und Latenz unter 200ms"
SLO (Service Level Objective)
└── Welches Ziel setzen wir intern?
└── Beispiel: "99.9% der Requests erfuellen den SLI ueber ein 30-Tage-Fenster"
SLA (Service Level Agreement)
└── Was versprechen wir vertraglich?
└── Beispiel: "99.5% Verfuegbarkeit, sonst Gutschrift"
Error Budget
└── Wie viel Fehler sind erlaubt?
└── Bei 99.9% SLO: 0.1% = 43.2 Minuten pro 30 Tage
Wichtige Regel: Das SLO muss strenger sein als das SLA. Wenn das SLA 99.5% verspricht, sollte das interne SLO bei 99.9% liegen -- damit bleibt ein Puffer.
Sinnvolle SLIs fuer Kubernetes-Services definieren
| SLI-Typ | Was wird gemessen | Typische Quelle |
|---|---|---|
| Verfuegbarkeit | Anteil erfolgreicher Requests | Ingress Controller, Service Mesh |
| Latenz | Antwortzeit (p50, p95, p99) | Application Metrics, Ingress |
| Durchsatz | Requests pro Sekunde | Application Metrics |
SLI-Recording-Rules als PromQL
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: sli-recording-rules
namespace: monitoring
spec:
groups:
- name: sli-availability
interval: 1m
rules:
- record: sli:availability:ratio_rate5m
expr: |
sum by (service) (
rate(http_requests_total{code!~"5.."}[5m])
)
/
sum by (service) (
rate(http_requests_total[5m])
)
- record: sli:latency:ratio_rate5m
expr: |
sum by (service) (
rate(http_request_duration_seconds_bucket{le="0.2"}[5m])
)
/
sum by (service) (
rate(http_request_duration_seconds_count[5m])
)
Fuer einen umfassenden Einstieg in Kubernetes Monitoring und die Grundlagen von Prometheus empfehlen wir unseren Monitoring und Observability Guide.
SLOs definieren und Error Budgets berechnen
SLO-Definitionen fuer typische Mittelstands-Services
Service-Kategorie | Verfuegbarkeits-SLO | Latenz-SLO (p99) | Error Budget (30d)
--------------------|--------------------|--------------------|-------------------
Kunden-Frontend | 99.95% | 300ms | 21.6 min
API-Gateway | 99.9% | 200ms | 43.2 min
Backend-Services | 99.9% | 500ms | 43.2 min
Batch-Processing | 99.5% | - | 3.6 Stunden
Interne Tools | 99.0% | 1000ms | 7.2 Stunden
Error-Budget-Policy
Budget > 50%:
├── Normaler Feature-Entwicklungs-Modus
├── Deployments jederzeit moeglich
└── Experimentelle Changes erlaubt
Budget 20-50%:
├── Erhoehte Vorsicht bei Deployments
├── Rollback-Plan fuer jedes Deployment Pflicht
└── Keine experimentellen Changes
Budget < 20%:
├── Feature-Freeze: Nur Bug-Fixes und Reliability-Work
├── Jedes Deployment braucht SRE-Approval
└── Post-Incident-Reviews fuer alle Incidents
Budget aufgebraucht (0%):
├── Kompletter Deployment-Freeze
├── Alle Ressourcen auf Stabilitaet
└── Eskalation an Engineering-Leitung
SLO-basiertes Alerting mit Burn-Rate
Klassische Alerts ("CPU ueber 80%") erzeugen Alert-Fatigue. Burn-Rate-Alerts sind praeziser: Sie warnen nur, wenn das Error Budget zu schnell verbraucht wird.
Burn-Rate = Tatsaechliche Fehlerrate / Erlaubte Fehlerrate
Beispiel bei 99.9% SLO (erlaubte Fehlerrate: 0.1%):
- Aktuelle Fehlerrate 0.1% -> Burn Rate = 1.0 (normal)
- Aktuelle Fehlerrate 0.5% -> Burn Rate = 5.0 (5x schneller als erlaubt)
- Aktuelle Fehlerrate 1.0% -> Burn Rate = 10.0 (Budget in 3 Tagen aufgebraucht)
Alert-Schwellwerte (Google SRE Empfehlung):
├── Burn Rate 14.4x ueber 1h -> Page (sofort reagieren)
├── Burn Rate 6x ueber 6h -> Page (dringend)
└── Burn Rate 3x ueber 1d -> Ticket (bald reagieren)
Burn-Rate-Alerts als PrometheusRule
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: slo-burn-rate-alerts
namespace: monitoring
spec:
groups:
- name: slo-burn-rate
rules:
- record: slo:error_ratio:rate1h
expr: |
1 - (
sum by (service) (rate(http_requests_total{code!~"5.."}[1h]))
/
sum by (service) (rate(http_requests_total[1h]))
)
- alert: SLOBurnRateCritical
expr: |
slo:error_ratio:rate1h{service="order-api"} > (14.4 * 0.001)
and
slo:error_ratio:rate5m{service="order-api"} > (14.4 * 0.001)
for: 2m
labels:
severity: critical
slo: availability
annotations:
summary: "SLO Burn Rate kritisch fuer {{ $labels.service }}"
description: "Error Budget wird mit 14.4x Geschwindigkeit verbraucht."
- alert: SLOBurnRateWarning
expr: |
slo:error_ratio:rate6h{service="order-api"} > (6 * 0.001)
and
slo:error_ratio:rate1h{service="order-api"} > (6 * 0.001)
for: 15m
labels:
severity: warning
slo: availability
annotations:
summary: "SLO Burn Rate erhoet fuer {{ $labels.service }}"
description: "Error Budget wird mit 6x Geschwindigkeit verbraucht."
Sloth: SLO-Management automatisieren
Sloth generiert automatisch die komplexen PrometheusRules aus einfachen SLO-Definitionen.
# Sloth installieren via Helm
helm repo add sloth https://slok.github.io/sloth
helm repo update
helm install sloth sloth/sloth \
--namespace monitoring \
--set commonPlugins.enabled=true
SLO-Definition mit Sloth
apiVersion: sloth.slok.dev/v1
kind: PrometheusServiceLevel
metadata:
name: order-api-slos
namespace: monitoring
spec:
service: "order-api"
labels:
team: commerce
tier: critical
slos:
- name: "availability"
objective: 99.9
description: "99.9% der Requests muessen erfolgreich sein"
sli:
events:
errorQuery: |
sum(rate(http_requests_total{service="order-api",code=~"5.."}[{{.window}}]))
totalQuery: |
sum(rate(http_requests_total{service="order-api"}[{{.window}}]))
alerting:
name: OrderAPIAvailability
labels:
team: commerce
pageAlert:
labels:
severity: critical
ticketAlert:
labels:
severity: warning
Wie Observability-Stacks in der Praxis aufgebaut werden, erfahren Sie in unserem Artikel zum Observability Stack.
SLO-Reporting und Dashboards
Woechentlicher SLO-Report per CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: slo-weekly-report
namespace: monitoring
spec:
schedule: "0 8 * * 1" # Montags um 08:00 Uhr
jobTemplate:
spec:
template:
spec:
containers:
- name: reporter
image: curlimages/curl:latest
env:
- name: PROMETHEUS_URL
value: "http://prometheus-server.monitoring:9090"
- name: SLACK_WEBHOOK
valueFrom:
secretKeyRef:
name: slack-webhook
key: url
command:
- /bin/sh
- -c
- |
BUDGET=$(curl -s "$PROMETHEUS_URL/api/v1/query?query=slo:error_budget_remaining:ratio" | \
jq -r '.data.result[] | "\(.metric.service): \(.value[1] | tonumber * 100 | round)%"')
curl -X POST "$SLACK_WEBHOOK" \
-H 'Content-type: application/json' \
-d "{\"text\": \"*Woechentlicher SLO Report*\n\`\`\`\n${BUDGET}\n\`\`\`\"}"
restartPolicy: OnFailure
Team-Accountability und Incident-Integration
SLO-Ownership-Modell
| Service | SLO-Owner | Verfuegbarkeits-SLO | Latenz-SLO (p99) |
|---|---|---|---|
| Order API | Team Commerce | 99.9% | 200ms |
| Payment Gateway | Team Finance | 99.95% | 150ms |
| Search Service | Team Discovery | 99.5% | 500ms |
| Batch Import | Team Data | 99.0% | - |
Alertmanager-Routing fuer SLO-Alerts
# Alertmanager-Konfiguration (Auszug)
route:
group_by: ['alertname', 'service', 'slo']
routes:
- match:
severity: critical
slo: availability
receiver: 'pagerduty-slo'
- match:
severity: warning
slo: availability
receiver: 'slack-slo-warnings'
receivers:
- name: 'pagerduty-slo'
pagerduty_configs:
- service_key_file: /etc/alertmanager/pagerduty-key
- name: 'slack-slo-warnings'
slack_configs:
- channel: '#slo-warnings'
title: 'SLO Warning: {{ .GroupLabels.service }}'
Fuer einen tieferen Einblick in Health Checks und Probes, die Ihre SLIs direkt beeinflussen, lesen Sie unseren Health Checks und Probes Guide.
OpenTelemetry fuer praezise SLIs
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
name: sli-collector
namespace: monitoring
spec:
mode: deployment
config: |
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
processors:
batch:
timeout: 10s
exporters:
prometheus:
endpoint: 0.0.0.0:8889
resource_to_telemetry_conversion:
enabled: true
service:
pipelines:
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheus]
Wie OpenTelemetry in Kubernetes integriert wird, beschreibt unser Artikel zu OpenTelemetry fuer Kubernetes.
Checkliste: SLO-Management einfuehren
- SLIs fuer alle kritischen Services definiert (Verfuegbarkeit + Latenz)
- SLOs pro Service festgelegt und dokumentiert
- Error-Budget-Policy mit dem Team vereinbart
- Sloth oder Pyrra installiert und konfiguriert
- Burn-Rate-Alerts in Prometheus aktiv
- Alertmanager-Routing fuer SLO-Alerts konfiguriert
- Grafana-Dashboard mit Error-Budget-Uebersicht
- Woechentlicher SLO-Report automatisiert
- SLO-Ownership pro Service zugewiesen
- Deployment-Freeze-Policy bei aufgebrauchtem Error Budget
Fazit
SLO-basiertes Management ersetzt das Bauchgefuehl durch messbare Qualitaetsziele. Statt "der Service fuehlt sich langsam an" gibt es "wir haben noch 67% Error Budget und die Latenz-SLO liegt bei 99.2%". Das schafft eine gemeinsame Sprache zwischen Entwicklung, Operations und Business.
Der wichtigste erste Schritt: Fangt mit einem Service an. Definiert einen Verfuegbarkeits-SLI, setzt ein SLO, richtet Burn-Rate-Alerts ein. Wenn das funktioniert, erweitert auf weitere Services. Ein einfaches SLO, das gemessen wird, ist besser als ein komplexes SLO-Framework, das nie live geht.
Sie moechten SLO-Management fuer Ihre Kubernetes-Plattform einfuehren? Wir unterstuetzen Sie bei der Definition sinnvoller SLIs, der Einrichtung von Burn-Rate-Alerts und dem Aufbau einer SRE-Kultur. Kontaktieren Sie uns fuer ein unverbindliches Erstgespraech.
Kubernetes-Beratung gesucht?
Wir helfen deutschen Unternehmen bei der Kubernetes-Implementierung, Migration und Optimierung. DSGVO-konform und praxiserprobt.
📖 Verwandte Artikel
Weitere interessante Beiträge zu ähnlichen Themen
SLA, SLO, SLI: Kubernetes-Verfügbarkeit messen
SLAs, SLOs und SLIs für Kubernetes-Services definieren und mit Prometheus messen. Mit Error-Budget-Berechnung und SLO-Template für Production-Workloads.
Prometheus PCA Zertifizierung für Kubernetes Monitoring
Die Prometheus Certified Associate (PCA) Zertifizierung bietet eine fundierte Validierung von Kubernetes Monitoring-Kenntnissen mit Prometheus. Erfahren Sie, wie diese offizielle CNCF-Zertifizierung deutschen Unternehmen hilft, ihre Observability-Strategien zu professionalisieren und die Betriebsstabilität ihrer Cloud-nativen Infrastrukturen zu gewährleisten – essenziell für ein zuverlässiges Kubernetes Monitoring in Deutschland.
Kubernetes Alerting: Prometheus-Regeln richtig setzen
Prometheus Alerting für Kubernetes richtig aufbauen: Alert-Hierarchie, symptombasierte Regeln und Routing zu Slack oder PagerDuty ohne Alert Fatigue.
Chaos Engineering: Kubernetes-Resilienz mit Litmus
LitmusChaos auf Kubernetes installieren und Chaos-Experimente durchführen. Pod-Delete, Netzwerk-Latenz und Node-Drain testen deine Cluster-Resilienz.
Distributed Tracing: Jaeger auf Kubernetes einrichten
Jaeger für Distributed Tracing auf Kubernetes einrichten mit dem Jaeger Operator. OpenTelemetry-Instrumentation in Go und Python, Trace-Propagation zwischen Microservices und praktische Analyse von Latenz-Problemen.