In Microservices-Umgebungen ist es wichtig zu wissen, was in der Anwendung passiert. Beobachtbarkeit geht über die einfache Überwachung hinaus, sie ermöglicht es Ihnen, Ihrem System Fragen zu stellen und zuverlässige Antworten zu erhalten.
Drei Säulen der Beobachtbarkeit
- Strukturierte Protokolle, Ereignisaufzeichnungen im JSON-Format, die Abfragen erleichtern.
- Metriken, numerische Werte im Zeitverlauf (Latenz, Fehlerrate, CPU-Auslastung).
- Distributed Tracing, Verfolgung von Anfragen, die mehrere Dienste umfassen.
Umsetzungsstrategie
- Zentralisieren Sie Protokolle mit Elastic Stack (Filebeat → Logstash → Elasticsearch → Kibana) oder verwalteten Diensten wie CloudWatch Logs.
- Metriken nach Prometheus exportieren und in Grafana anzeigen.
- Instrumentencode mit OpenTelemetry, Senden von Spans an Jaeger oder Zipkin.
Beobachtbarkeits-Checkliste
- JSON-Logger konfigurieren (z. B.: Winston, Bunyan).
- Stellen Sie
service.nameundenvironmentin allen Protokollen ein. - Standardmetriken exportieren (
process_cpu_seconds_total,process_resident_memory_bytes). - Instrumentieren Sie HTTP-Clients und -Server mit OpenTelemetry.
- Erstellen Sie Latenz-, Fehlerraten- und Durchsatz-Dashboards.
- Definieren Sie SLA-Warnungen (z. B. Latenz > 500 ms, Fehler > 1 %).
- Dokument-ID-Korrelation (
trace_id,span_id).
JSON-Logger-Beispiel (Node.js)
const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), defaultMeta: { service: process.env.SERVICE_NAME, environment: process.env.NODE_ENV }, transports: [new winston.transports.Console()] }); module.exports = logger;
Beispiel für eine benutzerdefinierte Metrik mit Prometheus (Node.js)
const client = require('prom-client'); const requestDuration = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Duração das requisições HTTP em segundos', labelNames: ['method', 'route', 'status_code'] }); app.use((req, res, next) => { const end = requestDuration.startTimer({ method: req.method, route: req.path }); res.on('finish', () => end({ status_code: res.statusCode })); next(); });
Tracing-Beispiel mit OpenTelemetry (Node.js)
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node'); const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base'); const { JaegerExporter } = require('@opentelemetry/exporter-jaeger'); const provider = new NodeTracerProvider(); provider.addSpanProcessor(new SimpleSpanProcessor(new JaegerExporter({ endpoint: process.env.JAEGER_ENDPOINT }))); provider.register();
Fazit
Die Implementierung von Observability erfordert Disziplin, bringt aber unmittelbare Vorteile: Früherkennung von Fehlern, Reduzierung der MTTR (Mean Time To Recovery) und Vertrauen bei der Skalierung kritischer Systeme.
Wie überwachen Sie Ihre Dienste? Teilen Sie Ihre Lieblingstools!
Lesen Sie auch
- Beobachtbarkeit mit OpenTelemetry: Metriken, Protokolle und verteiltes Tracing
- Beobachtbarkeit über Protokolle hinaus: Was OpenTelemetry in der Praxis verändert
- Worker: Debugging, Protokolle und Workers Tail – Beobachtbarkeit am Edge ohne Protokollserver
- Anwendungsarchitektur: Vollständiger Leitfaden für skalierbare Systeme
- Site Reliability Engineering-Metriken: Definieren und Überwachen von SLIs, SLOs und SLAs
- Edge Computing-Architektur: Strategien für die verteilte Verarbeitung
