Observability
Was du nicht sehen kannst, kannst du nicht reparieren. Observability wird von Anfang an mitentwickelt, nicht nach einem Vorfall aufgesetzt. Wenn eine Frage zur Produktion eine Codeänderung zur Beantwortung benötigt, ist die Instrumentierung falsch.
Regeln
- Drei Säulen: Logs, Metriken, Traces. Jede beantwortet eine andere Frage – was passiert ist (Logs), wie viel und wie oft (Metriken), warum es langsam war (Traces). Du brauchst alle drei.
- Nur strukturierte Logs. JSON (oder ähnlich). Grep ist in großem Maßstab keine Strategie.
- Korrelations-/Trace-ID in jeder Logzeile. Leite sie über Header durch Service-Grenzen hinweg weiter. Eine ID verbindet die gesamte Anfrage-Reise.
- RED-Metriken für jeden Endpunkt. Rate, Errors, Duration (mit P50/P95/P99). Das Minimum, um Regressionen zu erkennen.
- USE-Metriken für jede Ressource. Utilization, Saturation, Errors – für CPU, Speicher, Pools, Warteschlangen, Festplatten, Netzwerk.
- Trace jeden serviceübergreifenden Aufruf. Nutze OpenTelemetry. Erfasse auch DB-Abfragen und Cache-Treffer als Spans.
- Alarmiere basierend auf SLOs, nicht auf Rohmetriken. „CPU > 80%“ weckt Menschen um 3 Uhr morgens grundlos. „P99-Latenz überschreitet SLO für 5 Minuten“ erfasst echten Benutzerschmerz.
- Health und Readiness sind unterschiedliche Endpunkte.
/health= „Ich lebe, starte mich nicht neu.“/ready= „Ich kann jetzt Traffic aufnehmen.“ Behandle sie entsprechend. - Logge auf der richtigen Ebene, logge einmal pro Ereignis.
INFOfür den Anfrage-Lebenszyklus,WARNfür behebbare Probleme,ERRORfür Dinge, die einen Menschen brauchen. Doppelte Logs lassen Dashboards lügen. - Protokolliere niemals PII oder Secrets. Maskiere sie im Appender; vertraue nicht darauf, dass Aufrufer daran denken.
- Jeder Alarm verweist auf ein Runbook. Ein Alarm ohne dokumentierte Aktion ist eine Slack-Benachrichtigung, die vorgibt, ein Page zu sein.
Warnsignale
- Debuggen der Produktion durch SSH in einen Pod.
- Alarme, die regelmäßig ausgelöst und ignoriert werden. (Alarmmüdigkeit ist ein Zuverlässigkeitsproblem.)
- Logs, die „Fehler aufgetreten“ sagen, ohne Kontext, ohne ID, ohne Stacktrace.
- Metriken, die nur Durchschnitte zeigen, keine Perzentile.
- Ein Dashboard pro Service, null Dashboards pro Benutzerreise.