Observability, die um 3 Uhr nachts hilft: Logs, Traces und was wirklich zählt
Produktions-Observability jenseits von Dashboards. Strukturiertes Logging, Correlation IDs, PII-freie Logs, Alert-Fatigue-Prävention, Kostenmanagement und das Observability-Reifegradmodell.
Die drei Säulen sind falsch
Jeder Observability-Vortrag beginnt mit "den drei Säulen: Logs, Metriken und Traces." Dieses Framing ist unvollständig. Es sagt dir, was du sammeln sollst, aber nicht, was du damit machen sollst. Die echte Frage um 3 Uhr nachts ist nicht "habe ich Logs?" Sondern: "Kann ich die eine Log-Zeile finden, die erklärt, warum die Bestellung dieses Kunden fehlgeschlagen ist, über 7 Services hinweg, in unter 2 Minuten?"
Wir betreiben Produktionssysteme mit mehreren Services, Background-Workern, Message Queues und KI-Pipelines. Dieser Artikel behandelt, was tatsächlich hilft, wenn Dinge kaputtgehen. Für OpenTelemetry-spezifische Implementierungsmuster schau dir unseren OpenTelemetry-Guide an. Für KI-spezifische Observability schau in unseren KI-Observability-Guide.
Strukturiertes Logging: Das Format, das dich rettet
Unstrukturierte Logs sind im großen Maßstab nutzlos. console.log('Processing order ' + orderId) wird zu Rauschen in einem System, das 10.000 Log-Zeilen pro Minute produziert.
Strukturierte Logs sind abfragbar, filterbar und alarmierbar:
// Unstrukturiert (nutzlos im großen Maßstab)
console.log('Processing order 12345 for customer sara@beispiel.de');
// Strukturiert (abfragbar, PII-frei)
logger.info('order_processing_started', {
order_id: 'ord_12345',
customer_id: 'cust_abc', // ID, nicht E-Mail
channel: 'web',
tenant_id: 'tenant_acme',
items_count: 3,
total_cents: 15900,
});
Log-Level-Disziplin
| Level | Wann verwenden | Beispiel |
|---|---|---|
error | Etwas ist kaputt und braucht menschliche Aufmerksamkeit | Datenbankverbindung fehlgeschlagen, Zahlung abgelehnt |
warn | Etwas Unerwartetes, aber behandelt | Fallback-Modell verwendet, Cache Miss, Retry erfolgreich |
info | Business-Events, die für Auditing relevant sind | Bestellung erstellt, Benutzer eingeloggt, Import abgeschlossen |
debug | Technische Details für die Entwicklung | SQL-Query ausgeführt, Cache Hit, Config geladen |
Produktion sollte auf info-Level laufen. debug erzeugt zu viel Volumen. error und warn sollten immer ein Review auslösen (wenn nicht Alerts).
Keine PII in Logs
Dein Log-Aggregator (Datadog, CloudWatch, Loki, Elasticsearch) indexiert alles. Wenn Logs E-Mails, Namen oder Telefonnummern enthalten, wird deine Log-Infrastruktur DSGVO-reguliert.
// Schlecht: PII in Logs
logger.info('Email sent to sara.mustermann@beispiel.de about order 12345');
// Gut: Nur IDs
logger.info('notification_sent', {
recipient_id: 'cust_abc',
notification_type: 'order_confirmation',
order_id: 'ord_12345',
channel: 'email',
});
Für die vollständige PII-Schutzarchitektur schau dir unseren Leitfaden zur Vermeidung von Datenlecks an.
Correlation IDs: Einen Request über Services hinweg verfolgen
Ein einzelner Benutzer-Request kann ein API-Gateway, einen Auth-Service, einen Produkt-Service, einen Payment-Service, einen Notification-Worker und einen Search-Indexer berühren. Ohne Correlation ID erfordert das Finden aller Log-Einträge für einen Request das Raten von Timestamps und grep.
// Am Edge generieren (API-Gateway oder erster Service)
const correlationId = crypto.randomUUID();
// Durch jeden Service via Headers weitergeben
const response = await httpClient.post('/api/orders', body, {
headers: { 'X-Correlation-Id': correlationId },
});
// In jeden Log-Eintrag aufnehmen
logger.info('order_created', {
correlation_id: correlationId,
order_id: order.id,
tenant_id: ctx.tenantId,
});
// In jede Nachricht an Queues aufnehmen
await queue.add('send_confirmation', {
orderId: order.id,
correlationId,
});
Beim Debuggen nach Correlation ID abfragen:
correlation_id = "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Jeder Log-Eintrag von jedem Service für diesen Request erscheint. Die gesamte Kette ist sichtbar. Das ist das einzelne wirkungsvollste Debugging-Tool in verteilten Systemen.
Alert Fatigue: Weniger Alerts, bessere Alerts
Der Standard-Ansatz: Auf alles alerten. Error Rate > 0? Alert. Latenz > 500ms? Alert. Queue Depth > 10? Alert. Das Ergebnis: 200 Alerts pro Tag, alle ignoriert.
Alert-Design-Prinzipien
| Prinzip | Schlechter Alert | Guter Alert |
|---|---|---|
| Handlungsfähig | "Fehler aufgetreten" | "Payment-Service Error Rate > 5% seit 10 Minuten, betrifft Checkout" |
| Schwellenwert mit Dauer | "Latenz > 500ms" (feuert bei jedem Spike) | "p95-Latenz > 2s für 5 aufeinanderfolgende Minuten" |
| Business Impact | "CPU > 80%" | "Bestellverarbeitung verzögert: Queue Depth wächst seit 15 Minuten" |
| Keine Duplikate | Gleicher Alert feuert 50 Mal | Alert feuert einmal, enthält Anzahl der Vorkommnisse |
Alert-Stufen
| Stufe | Reaktion | Kanal | Beispiel |
|---|---|---|---|
| P1 Kritisch | Sofort (jemanden aufwecken) | PagerDuty/Telefon | Zahlungsverarbeitung ausgefallen, Risiko von Datenverlust |
| P2 Hoch | Innerhalb 1 Stunde (Geschäftszeiten) | Slack + E-Mail | Error Rate erhöht, degradierte Performance |
| P3 Mittel | Nächster Geschäftstag | Slack | Dead Letter Queue wächst, nicht-kritischer Job fehlgeschlagen |
| P4 Niedrig | Wöchentliches Review | Dashboard | Festplattennutzung steigt, Zertifikat läuft in 30 Tagen ab |
Das Ziel: P1-Alerts feuern weniger als einmal pro Woche. Wenn sie täglich feuern, sind sie entweder falsch konfiguriert oder dein System hat fundamentale Zuverlässigkeitsprobleme.
Kostenmanagement
Observability ist teuer. Log-Ingestion, Metrik-Speicherung, Trace-Aufbewahrung und Dashboard-Hosting summieren sich schnell.
| Komponente | Kostentreiber | Optimierung |
|---|---|---|
| Log-Ingestion | Volumen (GB/Tag) | Debug-Logs in Produktion filtern, verbose Logs sampeln |
| Log-Aufbewahrung | Dauer | 30 Tage hot, 90 Tage warm, Cold archivieren |
| Metriken | Kardinalität (einzigartige Label-Kombinationen) | High-Cardinality-Labels vermeiden (User-IDs, Request-IDs) |
| Traces | Volumen + Aufbewahrung | Tail-based Sampling (Fehler behalten, Routine verwerfen) |
| Dashboards | User Seats + Abfragen | Dashboards konsolidieren, unbenutzte entfernen |
Log-Volumen reduzieren ohne Signal zu verlieren
// Nicht jeden Health Check loggen
if (req.path === '/health' || req.path === '/ready') {
return next(); // Logging überspringen
}
// Verbose Operationen sampeln
if (req.path.startsWith('/api/search') && Math.random() > 0.1) {
ctx.skipLogging = true; // Nur 10% der Such-Requests loggen
}
// Immer Fehler, Business-Events und langsame Requests loggen
logger.info('request_completed', {
path: req.path,
status: res.statusCode,
duration_ms: duration,
// Detaillierte Felder nur für langsame oder fehlerhafte Requests
...(duration > 1000 || res.statusCode >= 400 ? {
query_params: sanitize(req.query),
response_size: res.contentLength,
} : {}),
});
Das Observability-Reifegradmodell
| Level | Fähigkeit | Was du beantworten kannst |
|---|---|---|
| L0: Keine | console.log in Produktion | "Irgendwas ist kaputt" (vielleicht) |
| L1: Logs | Strukturiertes Logging, zentralisiert | "Was ist passiert?" (mit grep) |
| L2: Metriken | Schlüsselmetriken, einfache Dashboards | "Ist das System gerade gesund?" |
| L3: Korrelation | Correlation IDs, Distributed Tracing | "Was ist mit diesem spezifischen Request passiert?" |
| L4: Alerting | Gestufte Alerts, Runbooks | "Etwas geht kaputt und wir wissen sofort Bescheid" |
| L5: Proaktiv | Anomalie-Erkennung, SLO-basierte Alerts, Kosten-Tracking | "Etwas wird gleich kaputtgehen" |
Die meisten Teams sind bei L1-L2. L3 (Correlation IDs) ist die größte einzelne Verbesserung. L4 (gutes Alerting) verhindert Burnout. L5 ist ambitioniert, aber erreichbar.
Häufige Fallstricke
-
Unstrukturierte Logs.
console.logmit String-Konkatenation ist Rauschen im großen Maßstab. Verwende strukturiertes JSON mit typisierten Feldern. -
PII in Logs. Dein Log-Aggregator wird DSGVO-reguliert. Logge IDs, nicht Werte.
-
Auf alles alerten. 200 Alerts pro Tag bedeutet, dass null Alerts gelesen werden. Stufe Alerts nach Schweregrad und Business Impact.
-
High-Cardinality-Metrik-Labels. User-IDs oder Request-IDs als Metrik-Labels erzeugen Millionen von Zeitreihen. Verwende begrenzte Labels (Statuscode, Endpoint, Tenant).
-
Keine Correlation IDs. Ohne sie erfordert das Debuggen eines Requests über 7 Services Timestamp-Raten und Beten.
-
Kein Log-Sampling. Jeden Health Check und Such-Request mit voller Ausführlichkeit zu loggen verdoppelt deine Log-Rechnung. Sample verbose Operationen, logge immer Fehler.
-
Kein Kostenbudget für Observability. Observability-Ausgaben sollten 5-15% der Infrastrukturausgaben betragen. Tracke es. Optimiere es.
-
Dashboards, die keiner anschaut. Wenn ein Dashboard seit 30 Tagen nicht angesehen wurde, lösch es. Dashboard-Wildwuchs kostet Geld und sorgt für Verwirrung.
Wichtige Erkenntnisse
-
Strukturiertes Logging ist nicht verhandelbar. JSON mit typisierten Feldern. Abfragbar, filterbar, alarmierbar. Niemals String-Konkatenation.
-
Correlation IDs sind das wirkungsvollste Debugging-Tool. Generiere sie am Edge, propagiere sie durch jeden Service und jede Queue. Frage nach Correlation ID ab, um die gesamte Request-Kette zu sehen.
-
Keine PII in Logs. Niemals. Logge Kunden-IDs, nicht Kunden-E-Mails. Logge Bestell-IDs, nicht Bestellinhalte. Deine Log-Infrastruktur darf keine Datenschutz-Haftung werden.
-
Weniger Alerts, bessere Alerts. P1-Alerts sollten weniger als einmal pro Woche feuern. Jeder Alert muss handlungsfähig sein. Füge den Business Impact in die Alert-Nachricht ein.
-
Budgetiere deine Observability. Log-Volumen, Metrik-Kardinalität, Trace-Sampling und Aufbewahrungsrichtlinien beeinflussen alle die Kosten. Tracke Observability-Ausgaben als Prozentsatz der Infrastrukturausgaben.
Wir bauen Observability in jedes System ein, das wir deployen, ob KI-Services, Cloud-Infrastruktur oder Custom Software. Wenn du Hilfe mit Produktions-Observability brauchst, sprich mit unserem Team oder fordere ein Angebot an.
Behandelte Themen
Verwandte Guides
OpenTelemetry in der Produktion: Traces, Context und was wirklich zählt
Produktions-OpenTelemetry-Patterns. Context Propagation über Queues und Worker, LLM-Calls tracen, Sampling-Strategien für KI-Workloads, datenschutzkonforme Spans und die Baggage API.
Guide lesenUnternehmenshandbuch zu Agentischen KI-Systemen
Technischer Leitfaden zu agentischen KI-Systemen in Unternehmen. Erfahre mehr ueber Architektur, Faehigkeiten und Anwendungen autonomer KI-Agenten.
Guide lesenAgentic Commerce: Wie du KI-Agenten sicher einkaufen lässt
Wie du gesteuerten, KI-initiierten Handel designst. Policy Engines, HITL-Freigabe-Gates, HMAC-Quittungen, Idempotenz, Tenant-Scoping und das vollständige Agentic Checkout Protocol.
Guide lesenBereit, produktionsreife KI-Systeme zu bauen?
Unser Team ist spezialisiert auf produktionsreife KI-Systeme. Lass uns besprechen, wie wir deinem Unternehmen helfen können.
Gespräch starten