Observabilidade
Logs
Métricas
Tracing
OpenTelemetry
Prometheus
Grafana
Cloud
DevOps

Beobachtbarkeit in verteilten Systemen: Protokolle, Metriken und Ablaufverfolgung

Beobachtbarkeit in verteilten Systemen: Protokolle, Metriken und Ablaufverfolgung

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

  1. Strukturierte Protokolle, Ereignisaufzeichnungen im JSON-Format, die Abfragen erleichtern.
  2. Metriken, numerische Werte im Zeitverlauf (Latenz, Fehlerrate, CPU-Auslastung).
  3. 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.name und environment in 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