Lexikon · L

Log-Aggregation

Das Zusammenführen von Logs vieler Hosts, Container und Services in einem zentralen, durchsuchbaren Speicher.

Von Obseria-RedaktionAktualisiert

Definition

Log-Aggregation bezeichnet das Sammeln von Log-Einträgen aus vielen Quellen wie Servern, Containern, Anwendungen und Cloud-Diensten und ihre Zusammenführung in einem zentralen System. Unterwegs werden Logs geparst, mit Metadaten angereichert und normalisiert, damit sie an einem Ort durchsucht, mit Metriken und Traces korreliert, aufbewahrt und analysiert werden können.

Was Log-Aggregation ist

Ein einzelner Request erzeugt in einem modernen System Logzeilen auf dem Load Balancer, im Ingress Controller, in drei Microservices und in der Datenbank, verteilt auf Dutzende Nodes, die eine Stunde später womöglich nicht mehr existieren. Die Log-Aggregation führt diese Zeilen zusammen. Statt sich per ssh auf einzelne Maschinen zu verbinden und mit grep zu suchen, fragen Engineers einen zentralen Speicher ab, der Logs aller Quellen mit einheitlichen Zeitstempeln und Metadaten enthält.

Aggregation ist die Grundlage für alles, was Teams mit Logs tun: Suche im Incident, Alerting auf Muster, Sicherheitsanalysen, Audit-Anforderungen und die Korrelation mit Metriken und Traces.

Die Pipeline der Log-Aggregation

  1. Sammeln. Ein Agent auf jedem Host liest Logdateien, Container-Ausgaben, journald oder Syslog. In Kubernetes verfolgt typischerweise ein Agent pro Node die Dateien, die die Container-Runtime unter /var/log/pods schreibt. Anwendungen können Logs auch direkt per OTLP senden.
  2. Parsen. Rohzeilen in Felder zerlegen: JSON dekodieren, reguläre Ausdrücke oder Grok-Muster für unstrukturierte Formate anwenden und Mehrzeiligkeit behandeln, damit ein Java-Stacktrace ein Eintrag wird statt vierzig.
  3. Anreichern. Kontext ergänzen wie Service-Name, Kubernetes-Namespace, Pod, Node, Cloud-Region und idealerweise Trace- und Span-IDs.
  4. Filtern und transformieren. Debug-Rauschen und Health-Check-Zeilen verwerfen, personenbezogene Daten maskieren, sehr gesprächige Quellen sampeln.
  5. Puffern und versenden. Bündeln, komprimieren und an das Backend senden, mit Plattenpuffer und Backpressure, wenn das Ziel langsam ist.
  6. Speichern und erschließen. Logs gemäß einer Richtlinie zur Datenaufbewahrung für Suche und Analyse vorhalten.

Verbreitete Collectoren sind Fluent Bit, Fluentd, Vector, Logstash und der OpenTelemetry Collector mit seinem Filelog Receiver.

Speichermodelle

ModellFunktionsweiseAbwägung
VolltextindexBaut beim Ingest einen invertierten Index über den Log-InhaltSchnelle freie Suche; Indexierungsaufwand und Speicher-Overhead wachsen mit dem Volumen
Nur Label-IndexIndexiert wenige Labels, speichert Inhalte in komprimierten ChunksGünstiger Ingest; Inhaltssuchen scannen mehr Daten, Labels brauchen niedrige Kardinalität
Indexfreies LakehouseSpaltenorientierter Speicher auf Object Storage, Schema-on-Read, massiv parallele ScansKein Index zu verwalten oder zu bezahlen; Abfragetempo hängt von der Scan-Engine ab

Warum das wichtig ist

Ohne Aggregation verschwinden Logs kurzlebiger Container, sobald ein Pod neu eingeplant wird, und das Incident-Team verliert genau die Belege, die es braucht. Zentrale Logs ermöglichen außerdem übergreifende Fragen, etwa welche Services in den letzten zehn Minuten Verbindungsfehler zu einer bestimmten Datenbank protokolliert haben, und erfüllen regulatorische Anforderungen an Audit-Trails und Aufbewahrung.

Die Pipeline skalieren

Kleine Setups senden Logs direkt von den Node-Agents an das Backend. Mit wachsendem Volumen ergänzen die meisten Teams eine Gateway-Schicht: einen horizontal skalierten Pool von Collectoren, der Daten aller Agents empfängt und zentrale Verarbeitung übernimmt, etwa das Maskieren personenbezogener Daten, das Routing an verschiedene Ziele und Rate Limiting. Manche Architekturen setzen zusätzlich eine dauerhafte Message Queue wie Kafka zwischen Erfassung und Speicherung, um Lastspitzen abzufangen und Daten erneut einspielen zu können. Unabhängig vom Aufbau braucht jede Stufe begrenzte Puffer und eine klare Regel für den Fall von Backpressure: blockieren, auf die Platte auslagern oder die am wenigsten wertvollen Daten zuerst verwerfen.

Beispiel: Container-Logs anreichern

Ein beispielhafter Ausschnitt einer OpenTelemetry-Collector-Konfiguration, der Kubernetes-Container-Logs verfolgt, das Format der Container-Runtime parst und Pod-Metadaten ergänzt:

receivers:
  filelog:
    include: [ /var/log/pods/*/*/*.log ]
    operators:
      - type: container
processors:
  k8sattributes: {}
  batch: {}
service:
  pipelines:
    logs:
      receivers: [filelog]
      processors: [k8sattributes, batch]
      exporters: [otlp]

Best Practices

  • Strukturiert loggen. Strukturiertes Logging als JSON oder OpenTelemetry Log Records erspart das meiste fehleranfällige Parsen.
  • Trace-Kontext mitschreiben. Eine trace_id in jeder Logzeile führt von einem langsamen Trace direkt zu den zugehörigen Logs.
  • UTC und präzise Zeitstempel verwenden und die ursprüngliche Ereigniszeit statt der Ingest-Zeit behalten.
  • Am Rand filtern. Entscheiden Sie in der Pipeline, was gespeichert werden soll; verrauschte Logs früh zu verwerfen oder zusammenzufassen, ist der wirksamste Kostenhebel.
  • Sensible Daten maskieren, bevor sie Host oder Pipeline verlassen, nicht erst nach dem Speichern.
  • Die Pipeline selbst überwachen: verworfene Einträge, Pufferauslastung und Verzögerung von Ende zu Ende.

Typische Fehler

Typische Probleme sind unbegrenztes Debug-Logging in Produktion, mehrzeilige Stacktraces, die in einzelne Einträge zerfallen, fehlende Service-Namen, durch die sich Logs nicht zuordnen lassen, und nicht synchronisierte Uhren zwischen Hosts. Häufig wird zudem alles in eine teure indexierte Speicherschicht geschickt und die Aufbewahrung dann aus Kostengründen auf wenige Tage verkürzt. Damit fehlt die Historie, die man für schleichende Probleme braucht.

Wie Obseria unterstützt

Obseria Log Analytics speichert Logs in Obseria Lake, einem indexfreien Lakehouse mit Schema-on-Read, sodass neue Felder ohne Reindexierung durchsuchbar sind. Obseria Pipeline filtert, reichert an und maskiert personenbezogene Daten beim Ingest; gefilterte Daten kosten nur die Ingestion. Logs werden automatisch mit Traces und Topologie verknüpft und lassen sich mit OQL oder SQL abfragen.

Häufig gestellte Fragen

Log-Aggregation ist das Sammeln und Zentralisieren von Logs. Log-Management ist weiter gefasst und umfasst neben der Aggregation auch Speicherung, Aufbewahrung, Zugriffskontrolle, Suche, Analyse und Archivierung.

In Containern ist es üblich, nach stdout und stderr zu schreiben und einen Node-Agent die Logs sammeln zu lassen; das hält Anwendungen einfach. Logs per OTLP aus dem SDK zu senden ist ebenfalls sinnvoll und erhält Struktur und Trace-Kontext. Puffern und Retries sollte trotzdem ein lokaler Collector übernehmen.

Filtern und sampeln Sie verrauschte Quellen in der Pipeline, verwerfen Sie Health-Check- und Debug-Logs in Produktion, wandeln Sie sich wiederholende Logs in Metriken um und nutzen Sie Speicherschichten, deren Aufbewahrungsdauer zum Wert des jeweiligen Log-Typs passt.

Sind Anwendungen mit OpenTelemetry instrumentiert, tragen Log-Einträge die aktive Trace-ID und Span-ID. Das Backend kann dann alle Logs eines Traces anzeigen und von einer Logzeile zum auslösenden Request springen.

Setzen Sie das Wissen in die Praxis um

Testen Sie Obseria 14 Tage kostenlos, mit OpenTelemetry und ohne proprietäre Agenten.