Read in English · Leer en español · Lire en français
Abschnitt 9.5 von 9.8 · Mittelstufe · 24 Min. Lesezeit
SLIs, SLOs, SLAs und Error Budgets
Videolektion
5 Min. · auf Englisch gesprochen, mit UntertitelnNur anhören (Audio)
Transkript lesen
Willkommen zu Abschnitt neun Punkt fünf. Wie zuverlässig sollte ein Service sein? Diese Lektion macht aus dieser Frage Zahlen, auf die sich Engineers und Product Owner einigen können.
Stellen Sie sich ein Busunternehmen vor, das fast alle Busse pünktlich verspricht. Damit das nützlich ist, muss es sagen, was als pünktlich gilt: innerhalb von zwei Minuten. Es muss sagen, wie es das misst: an jeder Haltestelle. Und was fast alle bedeutet: neunundneunzig von hundert über einen Monat. Verfehlt es das, hört das Fahrplanteam auf, neue Linien auszuprobieren, und kümmert sich zuerst um die Pünktlichkeit. Perfektion ist unmöglich und sehr teuer. Also ist der eine verspätete Bus von hundert ein Spielraum für Baustellen und neue Linien. Software-Zuverlässigkeit funktioniert genau so.
Ein Service Level Indicator, kurz SLI, misst, was Nutzer erhalten. Die beste Form ist ein Verhältnis: gute Ereignisse geteilt durch gültige Ereignisse. Zum Beispiel der Anteil der Checkout-Anfragen, die innerhalb von achthundert Millisekunden erfolgreich sind. Ein Service Level Objective, kurz SLO, ist ein Ziel für diesen Indikator über ein festgelegtes Zeitfenster, etwa neunundneunzig Komma neun Prozent über gleitende achtundzwanzig Tage. Ein Service Level Agreement, kurz SLA, ist ein Vertrag mit Kunden, der Konsequenzen benennt, meist Service-Gutschriften. Viele Services haben SLOs, aber kein SLA. Die Idee, die sie verbindet, ist das Error Budget. Bei einem Ziel von neunundneunzig Komma neun Prozent darf eines von tausend Ereignissen schlecht sein, ohne dass jemand versagt hat. Das ist der Spielraum, um Features auszuliefern und Risiken einzugehen.
Hier sind die drei Begriffe auf einer Skala, für die Checkout-Verfügbarkeit. Das SLO ist das interne Ziel, neunundneunzig Komma neun Prozent. Das SLA, ein Vertrag mit Partnern, ist lockerer angesetzt, bei neunundneunzig Komma fünf. Oberhalb des SLO liegt der Service in seinem Budget. Das SLI dieses Monats liegt bei neunundneunzig Komma neun vier Prozent. Unterhalb des SLO ist das Ziel verfehlt, und die Error-Budget-Policy greift. Erst unterhalb des SLA sind Gutschriften fällig. Setzen Sie das SLO nie gleich dem SLA. Sie würden erst von Problemen erfahren, wenn Sie bereits Geld schulden.
Ein SLI ist nur so nützlich, wie es nah an dem liegt, was Nutzer erleben. Services, die Anfragen beantworten, brauchen Verfügbarkeit, Latenz und manchmal Qualität. Datenpipelines brauchen Aktualität, Korrektheit und Abdeckung. Speicher ergänzt die Dauerhaftigkeit. Schreiben Sie Latenz als Anteil, nicht als Mittelwert: neunundneunzig Prozent der Speisekarten-Anfragen schneller als dreihundert Millisekunden. Und messen Sie nah am Nutzer. Im Anwendungsserver verpassen Sie Anfragen, die ihn nie erreicht haben.
Zählen wir ein Budget. Die Bestell-API der Essenslieferung hat ein SLO von neunundneunzig Komma neun Prozent über dreißig Tage. Das Budget beträgt also null Komma eins Prozent. In Zeit sind das dreiundvierzig Komma zwei Minuten Totalausfall. In Anfragen sind es bei etwa drei Millionen pro Monat dreitausend schlechte Anfragen. Nun dauert ein fehlerhaftes Deployment um drei Uhr nachmittags zwölf Minuten. Bei achthundert Anfragen pro Minute, von denen vierzig Prozent fehlschlagen, sind das dreitausendachthundertvierzig schlechte Anfragen. Das ist mehr als das gesamte Budget. Ein einziger Incident hat den Monat aufgebraucht. Derselbe Incident um drei Uhr morgens, bei fünfzig Anfragen pro Minute, kostet nur zweihundertvierzig: acht Prozent des Budgets. Anfragebasierte Budgets gewichten Ausfälle danach, wie viele Nutzer sie treffen.
Ein Ziel ist eine geschäftliche Entscheidung. Hundert Prozent anzustreben ist für fast alles falsch. Es lässt kein Budget für Änderungen, kostet ein Vermögen und ist ohnehin nicht erreichbar. Eine Error-Budget-Policy legt fest, was geschieht, wenn das Budget aufgebraucht ist. Im Beispiel aus Googles Site Reliability Workbook stoppen alle Änderungen außer dringenden Fixes und Sicherheitsfixes, bis der Service wieder innerhalb seines SLO liegt. Ihr Wert liegt darin, dass sie im Voraus vereinbart ist, sodass ein Freeze eine vorab vereinbarte Regel ist und kein Streit. Und ein Team, das sein Budget nie ausgibt, ist wahrscheinlich zu vorsichtig. Es könnte schneller ausliefern oder mehr Experimente durchführen.
Wie sollten Sie alarmieren? Beobachten Sie die Burn Rate: wie schnell das Budget verbraucht wird. Eine Burn Rate von eins, die gestrichelte Linie, verbraucht das Budget genau am Ende der dreißig Tage. Ein Fast Burn verbraucht einen großen Teil in Stunden. Hier gingen dreißig Prozent in etwa drei Stunden weg. Das sollte jemanden wecken. Ein Slow Burn, hier eine Rate von etwa zwei über fünf Tage, gehört in ein Ticket. Der Standard des Workbook für ein SLO von neunundneunzig Komma neun Prozent alarmiert, wenn zwei Prozent des Budgets in einer Stunde verbraucht werden, eine Burn Rate von vierzehn Komma vier, oder fünf Prozent in sechs Stunden. Ein vollständiger Ausfall alarmiert in unter einer Minute.
Der vollständige Abschnitt rechnet die Burn Rate im Detail durch und behandelt typische Fehler. Als Nächstes, in Abschnitt neun Punkt sechs, geht es um Logs, Metriken und Traces. Bis gleich.
Was Sie wissen müssen
- Ein SLI ist eine nutzerorientierte Messung, am besten ausgedrückt als gute Ereignisse geteilt durch gültige Ereignisse; ein SLO ist ein Ziel dafür über ein Zeitfenster; ein SLA ist ein Vertrag mit Konsequenzen, lockerer angesetzt als das SLO.
- Nützliche SLIs decken für anfragegetriebene Services Verfügbarkeit, Latenz und Qualität ab, für Pipelines Aktualität, Korrektheit und Abdeckung und für Speicher die Dauerhaftigkeit, gemessen so nah am Nutzer, wie es praktikabel ist.
- Das Error Budget ist eins minus das SLO: 99,9 % über 30 Tage erlauben 43,2 Minuten Totalausfall oder 0,1 % der Anfragen, und eine schriftliche Error-Budget-Policy legt fest, was geschieht, wenn es aufgebraucht ist.
- Die Burn Rate ist die beobachtete Fehlerquote geteilt durch die erlaubte Quote; das verbrauchte Budget ist Burn Rate mal Alerting-Fenster geteilt durch SLO-Fenster, sodass eine Burn Rate von 14,4 über eine Stunde 2 % eines 30-Tage-Budgets verbraucht.
- Die Multi-Window-, Multi-Burn-Rate-Alerts des SRE Workbook alarmieren bei 2 % des Budgets in einer Stunde oder 5 % in sechs Stunden und erzeugen ein Ticket bei 10 % in drei Tagen, jeweils bestätigt durch ein kurzes Fenster von einem Zwölftel der Länge.
- Typische Fehler sind Ziele von 100 %, zu viele SLOs, SLIs, die Nutzer nicht erleben, Messen an der falschen Stelle und SLOs ohne Policy oder Alerts dahinter.
Drei Begriffe, eine Idee
Kapitel 2 hat Verfügbarkeitsziele und die Neunen eingeführt (Abschnitt 2.5) und gezeigt, dass 99,9 % über 30 Tage 43,2 Minuten übrig lassen. Dieser Abschnitt macht aus dieser Rechnung eine Betriebsdisziplin. Das Vokabular stammt aus Googles Buch Site Reliability Engineering (Beyer, Jones, Petoff und Murphy, O’Reilly, 2016) und seinem Begleitband The Site Reliability Workbook (2018) und wird heute weit über Google hinaus verwendet.
Ein Service Level Indicator (SLI) ist ein sorgfältig definiertes, quantitatives Maß für einen Aspekt des Service, den Nutzer erhalten. Die nützlichste Form ist ein Verhältnis: gute Ereignisse geteilt durch gültige Ereignisse. Der Anteil der Checkout-Anfragen, die innerhalb von 800 ms eine erfolgreiche Antwort liefern, gemessen am Load Balancer
ist ein SLI. Es reicht von 0 % (nichts funktioniert) bis 100 % (nichts ist kaputt), und die Verhältnisform bedeutet, dass sich jedes SLI auf dieselbe Weise lesen, vergleichen und mit Alerts versehen lässt.
Ein Service Level Objective (SLO) ist ein Ziel für ein SLI über ein festgelegtes Zeitfenster: 99,9 % der Checkout-Anfragen sind gut, gemessen über gleitende 28 Tage.
Es ist ein internes Versprechen, auf das sich das Team, der Product Owner und die Menschen einigen, die von dem Service abhängen. Ein Service Level Agreement (SLA) ist ein Vertrag mit Kunden, der Konsequenzen benennt, meist Service-Gutschriften, wenn ein Niveau verfehlt wird. Viele Services haben SLOs, aber kein SLA; interne Plattformen haben fast nie SLAs.
Die Idee, die alle drei verbindet, ist das Error Budget. Liegt das Ziel bei 99,9 %, dürfen 0,1 % der Ereignisse schlecht sein, ohne dass jemand versagt hat. Diese 0,1 % sind keine Verschwendung; sie sind der Spielraum, den das Team hat, um Risiken einzugehen: Features ausliefern, Migrationen durchführen, mit der Konfiguration experimentieren. Das Budget macht aus einer Diskussion über Gefühle (Ist der Service zuverlässig genug?
) eine Diskussion über Zahlen (Haben wir unser Budget verbraucht?
) und gibt Produkt und Engineering eine gemeinsame Regel dafür, wann man schnell vorangeht und wann man bremst.
SLI, SLO und SLA auf einer Skala
Gute SLIs wählen
Ein SLI ist nur so nützlich, wie es nah an dem liegt, was Nutzer erleben. Das Workbook bietet eine kurze Auswahl, die die meisten Services abdeckt. Anfragegetriebene Services (APIs, Webseiten) brauchen Verfügbarkeit (der Anteil gültiger Anfragen, die erfolgreich bedient werden), Latenz (der Anteil, der schneller als ein Schwellenwert bedient wird) und manchmal Qualität (der Anteil, der ohne Einschränkung bedient wird, etwa eine Speisekarte, die ohne personalisierte Empfehlungen angezeigt wird, weil diese Abhängigkeit ausgefallen war). Datenpipelines brauchen Aktualität (der Anteil der Daten, die vor kürzerer Zeit als ein Schwellenwert aktualisiert wurden), Korrektheit (der Anteil der Ausgabe, der stimmt) und Abdeckung (der Anteil der verarbeiteten Eingabe). Speichersysteme ergänzen Dauerhaftigkeit (der Anteil geschriebener Daten, der noch gelesen werden kann).
Latenz-SLIs werden als Anteile geschrieben, nicht als Mittelwerte: 99 % der Speisekarten-Anfragen schneller als 300 ms
. Das knüpft direkt an die Perzentile aus Abschnitt 2.4 an: Zu sagen, 99 % der Anfragen müssen unter 300 ms liegen, ist dasselbe wie zu sagen, p99 muss unter 300 ms liegen, aber die Anteilsform lässt sich sauber über Zeit und Server addieren (man zählt die guten und die gültigen), Perzentile dagegen nicht. Üblich sind zwei Latenzschwellen, zum Beispiel 90 % unter 200 ms und 99 % unter 800 ms, um sowohl das typische als auch das Tail-Erlebnis zu erfassen.
Wo Sie messen, ist ebenso wichtig wie was Sie messen. Das Workbook trennt die SLI-Spezifikation (das für Nutzer relevante Ergebnis, etwa erfolgreich aufgegebene Bestellungen
) von der SLI-Implementierung (wie Sie es zählen: Serverlogs, Load-Balancer-Metriken, synthetische Probes oder Instrumentierung in der Mobil-App). Wer im Anwendungsserver misst, verpasst Anfragen, die ihn nie erreicht haben, weil DNS, das Content Delivery Network oder der Load Balancer ausgefallen ist. Wer im Client misst, sieht alles, erfasst aber auch schlechte Mobilverbindungen der Nutzer und kommt verspätet an. Die meisten Teams beginnen mit Load-Balancer-Metriken, die günstig und nah am Rand sind, und ergänzen synthetische Probes für Pfade mit wenig Traffic.
Legen Sie genau fest, was als gültig und was als gut zählt, denn die Grenzfälle entscheiden, ob die Zahl etwas bedeutet. Ist ein 404 für eine vertippte URL schlecht? Meist nicht: Es ist eine korrekte Antwort. Ist eine 429-Antwort wegen Rate Limiting schlecht? Das hängt davon ab, ob der Client innerhalb seines vereinbarten Kontingents lag. Sind Health Checks und Lasttests gültige Ereignisse? Nein; schließen Sie sie aus, sonst verwässern sie das Verhältnis. Schreiben Sie diese Regeln neben das SLO.
SLIs für die durchgehenden Beispiele
| Nutzerpfad | SLI-Typ | SLI-Spezifikation (gut / gültig) | Beispiel-SLO |
|---|---|---|---|
| Essenslieferung: Speisekarten durchsuchen | Latenz | Speisekarten-Anfragen, beantwortet in unter 300 ms / alle gültigen Speisekarten-Anfragen | 99 % über 28 Tage |
| Essenslieferung: Bestellung aufgeben | Verfügbarkeit | Bestellanfragen, beantwortet mit Erfolg oder einer korrekten fachlichen Ablehnung / alle gültigen Bestellanfragen | 99,9 % über 28 Tage |
| Essenslieferung: Kurierstandort | Aktualität | Kartenansichten, deren Kurierposition jünger als 30 s ist / alle Kartenansichten | 99 % über 28 Tage |
| Essenslieferung: Auszahlungen an Restaurants | Korrektheit | Auszahlungsläufe, ohne Abweichung abgeglichen / alle Auszahlungsläufe | 99,99 % über ein Quartal |
| Ticketing: Bezahlvorgang beim Vorverkaufsstart | Latenz und Verfügbarkeit | Sitzplatzreservierungen, bestätigt innerhalb von 2 s / alle Reservierungsversuche zugelassener Fans | 99,5 % bei jedem Vorverkaufsstart |
| Ticketing: Zustellung der E-Tickets | Aktualität | Tickets in der App des Fans innerhalb von 5 Minuten nach der Zahlung / alle bezahlten Bestellungen | 99,9 % über 28 Tage |
Das Ziel festlegen
Ein Ziel ist eine geschäftliche Entscheidung, keine technische. Die Kosten jeder weiteren Neun steigen steil, während Nutzer ab einem gewissen Punkt keine Verbesserungen mehr bemerken, weil ihr eigenes Mobilfunknetz, ihr WLAN und ihre Geräte häufiger ausfallen. Googles SRE-Buch sagt es unverblümt: 100 % anzustreben ist für fast alles falsch, weil es kein Budget für Änderungen lässt, ein Vermögen kostet und ohnehin nicht erreichbar ist. Ein Ziel von 100 % macht außerdem jeden einzelnen Ausfall zu einem Policy-Verstoß, was Menschen lehrt, das SLO zu ignorieren.
Gute Ausgangspunkte sind die bisherige Leistung (was hat der Service im letzten Quartal erreicht, und waren die Nutzer zufrieden?), die Ziele der Services, von denen Sie abhängen (Sie können keine 99,99 % auf einer Datenbank mit 99,9 % versprechen, wie Abschnitt 6.1 für Aufrufketten gezeigt hat), und die geschäftlichen Kosten mangelnder Zuverlässigkeit. Für die Essenslieferplattform kosten fehlgeschlagene Bestellungen zur Mittagszeit Umsatz und Kundenvertrauen, daher sind 99,9 % bei der Bestellaufgabe vertretbar; Aktualisierungen der Kurierposition sind weniger kritisch, und 99 % genügen. Beginnen Sie etwas unterhalb der aktuellen Leistung, damit das Team nicht sofort im Verstoß ist, und verschärfen Sie später anhand von Belegen.
Wählen Sie das Zeitfenster bewusst. Ein gleitendes Zeitfenster wie die letzten 28 Tage entspricht der Art, wie Nutzer sich an Ausfälle erinnern (sie vergessen sie nicht am Monatsersten), und 28 Tage enthalten genau vier von jedem Wochentag, was wöchentliche Muster fair hält. Kalendermonate eignen sich für Berichte und Verträge. Ereignisbasierte Services wie ein Ticket-Vorverkaufsstart brauchen unter Umständen ein SLO pro Ereignis, weil eine Stunde Ausfall während des Vorverkaufsstarts weit mehr zählt als eine ruhige Woche.
Error Budgets in Zahlen
Das Error Budget lässt sich in Zeit oder in Ereignissen zählen. Zeitbasierte Budgets passen zu Services, die entweder laufen oder ausgefallen sind; anfragebasierte Budgets sind fairer für Services mit ungleichmäßigem Traffic, weil ein Ausfall um 03:00 weniger Nutzer trifft als einer zur Mittagszeit.
Ausgearbeitetes Beispiel
Ausgearbeitetes Beispiel: das Budget für die Bestellaufgabe
Die Bestell-API der Essenslieferplattform hat ein SLO von 99,9 % guten Anfragen über 30 Tage. Sie verarbeitet in diesem Zeitraum etwa 3 Millionen gültige Bestellanfragen, stark konzentriert auf Mittag- und Abendessen.
| Budget als Anteil | 1 - 0,999 = 0,001 bzw. 0,1 % |
|---|---|
| Budget in Zeit | 0,001 × 30 Tage × 1440 Minuten = 43,2 Minuten Totalausfall |
| Budget in Anfragen | 0,001 × 3.000.000 = 3000 schlechte Anfragen |
| Incident 1: fehlerhaftes Deployment um 15:00 | 12 Minuten × 800 Anfragen pro Minute = 9600 Anfragen; 40 % fehlgeschlagen = 3840 schlechte Anfragen |
| Ergebnis | 3840 ist mehr als das gesamte Budget von 3000 Anfragen: Ein Incident erschöpft den Monat |
| Derselbe Incident um 03:00 | 12 × 50 Anfragen pro Minute × 0,4 = 240 schlechte Anfragen, 8 % des Budgets |
Anfragebasierte Budgets gewichten Ausfälle danach, wie viele Nutzer sie treffen; deshalb können dieselben 12 Minuten 8 % oder mehr als 100 % des Budgets kosten.
Die zeitbasierte Sicht (43,2 Minuten) hätte beide Incidents gleich bewertet, mit 12 × 0,4 = 4,8 Minuten äquivalentem Ausfall, etwa 11 % des Budgets.
Error-Budget-Policies
Ein Budget bedeutet nichts, wenn nichts passiert, sobald es aufgebraucht ist. Eine Error-Budget-Policy ist ein kurzes Dokument, das Engineering, Produkt und Leitung im Voraus vereinbaren und das festlegt, was das Team tun wird. Die Beispiel-Policy im Workbook misst das Budget über die zurückliegenden vier Wochen; überschreitet der Service sein Budget, stoppen alle Änderungen und Releases außer dringenden Fixes (P0-Probleme) und Sicherheitsfixes, bis der Service wieder innerhalb seines SLO liegt. Sie verlangt außerdem ein Postmortem mit mindestens einer Maßnahme höchster Priorität, wann immer ein einzelner Incident mehr als 20 % des Vier-Wochen-Budgets verbraucht, und eskaliert Meinungsverschiedenheiten an den Chief Technology Officer.
Der Wert einer Policy liegt darin, dass sie vereinbart ist, bevor sie greift. Mitten im Release-Endspurt will niemand einfrieren; mit einer unterzeichneten Policy ist der Freeze eine vorab vereinbarte Regel statt eines Streits zwischen einer SRE und einem Produktmanager. Gute Policies legen auch fest, was nicht zulasten des Teams geht: ein unternehmensweiter Netzwerkausfall, eine Abhängigkeit, die selbst eingefroren ist, oder Traffic außerhalb des Geltungsbereichs des SLO, etwa ein Lasttest.
Fachleute sind uneins darüber, wie mechanisch die Policy sein sollte. Manche Teams wenden sie streng an, weil Ausnahmen das Vertrauen in das ganze System untergraben. Andere sehen das Budget als Information für ein Gespräch und argumentieren, dass ein harter Freeze genau die Fixes verzögern kann, die die Zuverlässigkeit wiederherstellen würden. Ein Mittelweg ist verbreitet: riskante Feature-Releases automatisch einfrieren, Zuverlässigkeitsfixes weiter ausliefern und einer benannten Führungskraft erlauben, dokumentierte Ausnahmen zu gewähren. Auch der umgekehrte Fall zählt: Ein Team, das sein Budget nie ausgibt, ist wahrscheinlich zu vorsichtig und könnte schneller ausliefern, mehr Experimente durchführen oder seine Kosten senken.
Burn Rate und Alerting auf SLOs
Alerting auf rohe Fehlerraten (alarmieren, wenn mehr als 1 % der Anfragen 5 Minuten lang fehlschlagen
) ist laut: Kurze Ausreißer wecken nachts Menschen für Probleme, die das SLO nie gefährden würden, während eine stetige Fehlerrate von 0,5 % still den Monat aufbrauchen kann, ohne je die Schwelle zu überschreiten. Die Antwort des Workbook ist, auf die Burn Rate zu alarmieren: wie schnell das Budget verbraucht wird, verglichen mit der Rate, die es genau am Ende des Zeitfensters aufbrauchen würde.
Burn Rate = beobachtete Fehlerquote / erlaubte Fehlerquote. Bei einem SLO von 99,9 % liegt die erlaubte Quote bei 0,1 %, also entspricht eine Fehlerquote von 0,1 % einer Burn Rate von 1 (das Budget reicht genau für das Zeitfenster), 1 % einer Burn Rate von 10 und 100 % (ein Totalausfall) einer Burn Rate von 1000. Der Anteil des Budgets im Zeitfenster, der während eines Alerting-Fensters verbraucht wird, ist Burn Rate x Alerting-Fenster / SLO-Fenster. Bei einem Fenster von 30 Tagen (720 Stunden) verbraucht eine Burn Rate von 14,4 über eine Stunde 14,4 × 1 / 720 = 0,02, also 2 % des Monatsbudgets; bei dieser Rate wäre das ganze Budget nach 720 / 14,4 = 50 Stunden aufgebraucht.
Das Workbook empfiehlt einen Multi-Window-, Multi-Burn-Rate-Alert als sinnvollen Standard für ein SLO von 99,9 %: alarmieren, wenn 2 % des Budgets in einer Stunde (Burn Rate 14,4) oder 5 % in sechs Stunden (Burn Rate 6) verbraucht werden, und ein Ticket eröffnen, wenn 10 % in drei Tagen (Burn Rate 1) verbraucht werden. Jede Bedingung muss über ein langes und ein kurzes Fenster gelten, wobei das kurze Fenster ein Zwölftel des langen ist (jeweils 5 Minuten, 30 Minuten und 6 Stunden). Das lange Fenster stellt sicher, dass das Problem erheblich ist; das kurze stellt sicher, dass es noch andauert, sodass der Alert wenige Minuten nach einem Fix aufhört auszulösen, statt eine Stunde lang rot zu bleiben.
Fast Burn und Slow Burn
SLO = 0.999 # 99.9% of requests good
PERIOD_H = 30 * 24 # 720-hour SLO window
def burn_rate(bad, total, slo=SLO):
"""Observed error ratio divided by the ratio the SLO allows."""
if total == 0:
return 0.0
return (bad / total) / (1 - slo)
def budget_spent(rate, window_h, period_h=PERIOD_H):
"""Fraction of the whole window's budget used in window_h hours."""
return rate * window_h / period_h
def page(w1h, w5m, w6h, w30m):
"""Each argument is (bad, total) for that window."""
fast = burn_rate(*w1h) >= 14.4 and burn_rate(*w5m) >= 14.4
slow = burn_rate(*w6h) >= 6 and burn_rate(*w30m) >= 6
return fast or slow
print(round(burn_rate(bad=288, total=20_000), 1)) # 14.4
print(budget_spent(14.4, window_h=1)) # 0.02, i.e. 2%Die Schwellen legen auch die Erkennungszeit fest. Fällt die Bestell-API vollständig aus (Fehlerquote 100 %, Burn Rate 1000), überschreitet die Ein-Stunden-Fehlerquote 1,44 % nach 0,0144 × 60 = etwa 0,9 Minuten, die Alarmierung erfolgt also in unter einer Minute. Schlagen 2 % der Anfragen fehl (Burn Rate 20), erreicht die Ein-Stunden-Quote 1,44 % nach 0,72 × 60 = etwa 43 Minuten. Schwere Probleme alarmieren schnell; leichte nur, wenn sie anhalten, und genau dieses Verhalten wünscht man sich um drei Uhr morgens.
Services mit wenig Traffic sprengen diese Rechnung: Bei 10 Anfragen pro Stunde ist ein einziger Fehlschlag eine Fehlerquote von 10 % und eine Burn Rate von 100. Die Abhilfen des Workbook sind synthetischer Traffic, der Signal hinzufügt, das Zusammenfassen verwandter Services mit wenig Traffic unter einem SLO, einzelne Fehlschläge durch Wiederholungen und Fallbacks weniger ins Gewicht fallen zu lassen oder ein längeres Zeitfenster zu akzeptieren. Für das Ticketsystem, das zwischen Vorverkaufsstarts fast leerläuft und dann extrem ausgelastet ist, funktionieren SLOs pro Ereignis mit Burn-Rate-Alerts während des Ereignisfensters besser als eine Monatszahl.
SLAs und Service-Gutschriften
Ein SLA verlagert das Ziel vom Engineering ins Vertragsrecht. Es definiert den abgedeckten Service, wie Verfügbarkeit gemessen wird, Ausschlüsse (geplante Wartung, Missbrauch durch Kunden, höhere Gewalt), die Abhilfe und wie ein Kunde sie geltend macht. Die übliche Abhilfe ist eine Service-Gutschrift: ein Prozentsatz der Monatsgebühr, der erstattet wird, gestaffelt danach, wie deutlich das Niveau verfehlt wurde. Gutschriften sind typischerweise klein im Vergleich zum tatsächlichen Schaden des Kunden; deshalb versteht man SLAs besser als Signal für das Vertrauen des Anbieters denn als Versicherung; Kunden, deren Schäden groß wären, brauchen eigene Resilienz, keine größere Gutschrift.
Betrachten Sie ein illustratives SLA, das die Essenslieferplattform Restaurantpartnern für ihre API zur Bestellannahme anbieten könnte: 99,5 % monatliche Verfügbarkeit, mit einer Gutschrift von 10 % auf die Plattformgebühr dieses Monats unter 99,5 % und 25 % unter 99,0 %. Das interne SLO liegt bei 99,9 %. Die Lücke dazwischen ist gewollt: Das Team sollte sein SLO-Budget erschöpfen, seine Policy anwenden und sich erholen, lange bevor der Vertrag gefährdet ist. Setzen Sie das SLO nie gleich dem SLA; Sie würden erst von Problemen erfahren, wenn Sie bereits Geld schulden.
Daraus folgen zwei architektonische Konsequenzen. Erstens kann ein SLA nur ehrlich sein, wenn Sie die SLAs Ihrer eigenen Abhängigkeiten kennen (Cloud-Anbieter, Zahlungsdienstleister, Kartenanbieter) und wissen, wie sie sich kombinieren. Zweitens brauchen SLAs Belege: Die Messmethode im Vertrag muss eine sein, die Sie aus Ihrer eigenen Telemetrie liefern können; das ist eine Anforderung an das Design der Observability.
Häufige Fehler
Zu viele SLOs. Ein Service mit dreißig SLOs hat keines, weil niemand über sie nachdenken oder danach handeln kann. Beginnen Sie mit zwei oder drei pro kritischem Nutzerpfad: meist einem Verfügbarkeits- und einem oder zwei Latenz-SLOs. Das Falsche messen. CPU-Auslastung, Queue-Tiefe und Replikationsverzögerung sind nützliche Ursachen zum Beobachten, aber keine SLIs, weil Nutzer sie nicht direkt erleben. An der falschen Stelle messen. Serverseitige Erfolgsquoten sehen perfekt aus, während das CDN Fehler liefert. Mittelwerte bilden. Ein SLO auf die mittlere Latenz verbirgt den langsamen Tail, über den Nutzer sich beschweren.
Ziele ohne Konsequenzen. Ein SLO ohne Budget-Policy und ohne Burn-Rate-Alerts ist Dashboard-Dekoration. Ziele, die nur Engineers festlegen. Der Product Owner muss zustimmen, weil das SLO Features gegen Zuverlässigkeit abwägt. Nie überarbeiten. Überprüfen Sie SLOs jedes oder jedes zweite Quartal: Beschweren sich Nutzer, während das SLO grün ist, ist das SLI oder das Ziel falsch; wird das Budget nie angetastet, ist das Ziel vielleicht zu locker oder das Team zu vorsichtig. Ein SLO für sehr unterschiedliche Nutzerpfade. Wer das Durchsuchen der Speisekarte und die Zahlung in einem Verhältnis zusammenwirft, lässt reichliche, günstige Anfragen die Fehlschläge bei den seltenen, wertvollen verdecken.
SLOs sind mit dem Rest dieses Kapitels verbunden. Burn-Rate-Alerts sind die symptombasierten Alerts, die unter Observability empfohlen werden; Incidents, die das Budget verbrauchen, fließen in Post-Incident-Reviews ein; und das Antwortmaß eines SLO ist eine natürliche Fitness Function für die Architektur.
Prüfen Sie Ihr Verständnis
Warum wird ein SLI meist als gute Ereignisse geteilt durch gültige Ereignisse geschrieben?
Weil das Verhältnis immer zwischen 0 % und 100 % liegt, sich durch Zählen sauber über Server und Zeit addieren lässt und jedes SLI auf dieselbe Weise gelesen, verglichen und in ein Error Budget umgewandelt werden kann.
Ein SLO von 99,9 % über 30 Tage verzeichnet sechs Stunden lang eine Burn Rate von 6. Welcher Anteil des Budgets wird verbraucht?
6 × 6 / 720 = 0,05, also 5 % des 30-Tage-Budgets.
Warum sollte ein SLA lockerer sein als das interne SLO?
Damit das Team ein aufgebrauchtes Error Budget erkennt und darauf reagiert, lange bevor der Vertrag verletzt wird und Service-Gutschriften fällig werden.
Was leistet das kurze Fenster in einem Multi-Window-Alert?
Es bestätigt, dass das Problem noch andauert, sodass sich der Alert wenige Minuten nach einem Fix zurücksetzt, statt das ganze lange Fenster über aktiv zu bleiben.
Quellen und weiterführende Literatur
Haben Sie eine Frage zu diesem Abschnitt? ArchitectBot, der KI-Lernassistent des Kurses, antwortet zuerst aus dem Kurs.
Fragen: „Unsere Essensliefer-API hat noch keine SLOs. Mit welchen zwei oder drei SLIs sollten wir anfangen, und wie wählen wir ein Ziel, das das Produktteam akzeptiert?“