
- Logstash verarbeitet verschiedene Logformate mithilfe von bedingten Filtern, die auf dem Typ des Logs basieren.
- Der Grok-Filter extrahiert Felder aus unstrukturiertem Text, während der JSON-Filter strukturierte Daten direkt parst.
- Der Multiline-Filter fasst mehrzeilige Einträge wie Java-Stacktraces zu einem einzigen Log zusammen.
- Eine saubere Input- und Output-Konfiguration ist entscheidend für die Performance und Zuverlässigkeit der Pipeline.
- Testen Sie Ihre Konfiguration gründlich mit dem integrierten Konfigurationstest, bevor Sie sie in Produktion nehmen.
Warum Logstash für verschiedene Logformate?
In modernen IT-Umgebungen fallen täglich Unmengen an Logdaten an – von Webservern, Anwendungen, Datenbanken und Netzwerkgeräten. Jedes System erzeugt dabei eigene Logformate: Manche verwenden JSON, andere einfache Textzeilen, wieder andere komplexe mehrzeilige Einträge. Ohne eine zentrale Verarbeitung wird die Auswertung schnell zum Albtraum.
Kurz gesagt :
- Logstash verarbeitet verschiedene Logformate über bedingte Filter, die auf dem `type`-Feld basieren.
- Grok extrahiert Felder aus unstrukturiertem Text, JSON-Filter parst strukturierte Daten direkt, Multiline fasst mehrzeilige Einträge wie Stacktraces zusammen.
- Die Pipeline besteht aus Input-, Filter- und Output-Phase; mehrere Logquellen werden über `type`-Tags wie `nginx_access` unterschieden.
- Vor Produktionseinsatz sollte die Konfiguration gründlich mit dem integrierten Konfigurationstest geprüft werden.
Logstash, das Herzstück des Elastic Stack, löst genau dieses Problem. Es nimmt Logs aus beliebigen Quellen entgegen, normalisiert sie und leitet sie an Elasticsearch oder andere Zielsysteme weiter. Der Schlüssel liegt in der richtigen Konfiguration – insbesondere im Umgang mit verschiedenen Logformaten.
Dieser Leitfaden führt Sie Schritt für Schritt durch die Konfiguration von Logstash für unterschiedliche Logformate. Er richtet sich an Systemadministratoren, DevOps-Ingenieure und alle, die ihre Logverarbeitung optimieren möchten – mit praxisnahen Beispielen und Tipps für den französischen Markt.
Grundlagen: Logstash-Pipeline verstehen
Bevor wir in die Konfiguration einsteigen, müssen Sie die Architektur von Logstash verstehen. Eine Logstash-Pipeline besteht aus drei Phasen: Input, Filter und Output. Die Konfiguration erfolgt in einer Konfigurationsdatei (meist unter /etc/logstash/conf.d/), die alle drei Phasen enthält. Für verschiedene Logformate benötigen Sie entweder mehrere Pipelines oder – eleganter – eine einzige Pipeline mit bedingten Filtern.
Praxisbeispiel aus Frankreich: Wenn Sie Logs von mehreren französischen Servern verarbeiten, können Sie in der Konfiguration Standort-Tags wie ‘frankfurt’ oder ‘paris’ hinzufügen, um die Daten später nach Region zu filtern.
Schritt 1: Die Input-Phase für verschiedene Quellen konfigurieren
Der erste Schritt besteht darin, die Logquellen zu definieren. Logstash unterstützt über 200 Input-Plugins. Für verschiedene Logformate sind diese besonders relevant:
input { file { path => "/var/log/nginx/access.log" type => "nginx_access" start_position => "beginning" } file { path => "/var/log/application/*.log" type => "app_log" start_position => "beginning" } beats { port => 5044 type => "filebeat" }
}
Wichtige Parameter: type weist jedem Logformat eine eindeutige Kennung zu, path definiert den Dateipfad (Wildcards sind erlaubt), und start_position bestimmt, ob Logstash von Anfang an oder nur neue Einträge liest.
Tipp: Verwenden Sie aussagekräftige Typen wie nginx_access, apache_error oder java_stacktrace. Das erleichtert später die Filterlogik erheblich.
Schritt 2: Filter für verschiedene Logformate einrichten
Die Filterphase ist das Herzstück der Konfiguration. Hier entscheiden Sie, wie jedes Logformat verarbeitet wird. Die wichtigsten Filter-Plugins sind Grok für Text-Logs, JSON für strukturierte Logs und Mutate für Datentyp-Konvertierungen.
Der Grok-Filter für Text-Logs
Grok ist der Standardfilter für unstrukturierte Text-Logs. Er verwendet vordefinierte Muster, um Felder aus Logzeilen zu extrahieren:
filter { if [type] == "nginx_access" { grok { match => { "message" => "%{IPORHOST:client_ip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:bytes}" } } date { match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] } }
}
Der JSON-Filter für strukturierte Logs
Moderne Anwendungen loggen oft im JSON-Format. Logstash kann diese direkt parsen:
filter { if [type] == "app_log" { json { source => "message" target => "json_data" } date { match => ["json_data.timestamp", "ISO8601"] } }
}
Der Mutate-Filter für Datentyp-Konvertierung
Nach dem Parsing müssen oft Datentypen korrigiert werden:
filter { mutate { convert => { "response_code" => "integer" "bytes" => "integer" } rename => { "json_data.user_id" => "user_id" "json_data.action" => "action" } }
}
Schritt 3: Bedingte Verarbeitung mit If-Else-Logik
Der Schlüssel zur Verarbeitung verschiedener Logformate liegt in der bedingten Logik. Logstash verwendet eine eigene Konfigurationssprache mit If-Else-Bedingungen:
filter { if [type] == "nginx_access" { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } else if [type] == "apache_error" { grok { match => { "message" => "%{APACHEERRORLOG}" } } } else if [type] == "java_app" { multiline { pattern => "^\s+at " negate => false what => "previous" } grok { match => { "message" => "%{TIMESTAMP_ISO8601:log_timestamp} %{LOGLEVEL:log_level} %{JAVACLASS:class} - %{GREEDYDATA:message}" } } } else { drop { } }
}
Diese Logik prüft den Typ jedes Log-Eintrags, wendet den passenden Parser an und verwirft unbekannte Formate (optional).
Hinweis für Frankreich: Wenn Sie Logs von französischen Systemen verarbeiten, achten Sie auf Datumsformate. Französische Systeme verwenden oft ‘jj/mm/aaaa’ statt ‘mm/dd/aaaa’. Passen Sie die Grok-Muster entsprechend an.
Schritt 4: Mehrzeilige Logs mit dem Multiline-Filter behandeln
Stacktraces von Java-Anwendungen oder ausführliche Fehlermeldungen erstrecken sich über mehrere Zeilen. Der Multiline-Filter fasst diese zusammen:
filter { if [type] == "java_app" { multiline { pattern => "^\s+at " negate => false what => "previous" } }
}
Erklärung: pattern erkennt Folgezeilen (hier: Zeilen, die mit ‘at ‘ beginnen), negate => false bedeutet, dass Zeilen, die dem Muster entsprechen, zur vorherigen Zeile hinzugefügt werden, und what => "previous" gibt an, dass die Zeile zur vorherigen gehört.
Ein französisches Unternehmen mit einer Java-basierten E-Commerce-Plattform kann so vollständige Stacktraces in einem einzigen Log-Eintrag erfassen und nach Elasticsearch senden.
Schritt 5: Output-Konfiguration für Elasticsearch
Nach der Verarbeitung müssen die Daten an Elasticsearch gesendet werden. Die Output-Phase ist meist einfach:
output { elasticsearch { hosts => ["localhost:9200"] index => "logs-%{+YYYY.MM.dd}" user => "logstash" password => "${ELASTIC_PASSWORD}" }
}
Wichtige Überlegungen: Verwenden Sie datumsbasierte Indizes für einfache Datenverwaltung, nutzen Sie Umgebungsvariablen für Passwörter, und konfigurieren Sie flush_size und idle_flush_time für optimale Leistung.
Für französische Unternehmen, die sensible Daten verarbeiten, ist die Verschlüsselung der Verbindung (HTTPS) besonders wichtig – insbesondere im Hinblick auf die DSGVO (RGPD).
Schritt 6: Konfiguration testen und Fehler beheben
Bevor Sie die Konfiguration in Produktion nehmen, sollten Sie sie gründlich testen. Die Syntaxprüfung erfolgt mit bin/logstash --config.test_and_exit -f /etc/logstash/conf.d/. Für einen Test mit Beispieldaten verwenden Sie bin/logstash -f /etc/logstash/conf.d/ --debug.
| Fehler | Ursache | Lösung |
|---|---|---|
| grok parse failure | Muster passt nicht | Grok-Muster mit Debugger testen |
| Date parse failure | Falsches Datumsformat | date-Filter anpassen |
| JSON parse error | Ungültiges JSON | JSON-Quelle prüfen |
Tipp für Frankreich: Nutzen Sie den Online-Grok-Debugger (grokdebug.herokuapp.com), um Muster mit echten Log-Beispielen zu testen, bevor Sie sie in die Konfiguration übernehmen.
Häufige Fehler vermeiden: Typische Stolperfallen
Hier sind einige typische Fehler, die ich in meiner Praxis als Systemarchitekt immer wieder sehe – und wie Sie sie umgehen.
Fehler 1: Zu komplexe Grok-Muster
Problem: Übermäßig komplexe reguläre Ausdrücke, die schwer zu warten sind. Lösung: Verwenden Sie vordefinierte Muster wie %{COMBINEDAPACHELOG} oder %{COMMONAPACHELOG} statt eigener Regex.
Fehler 2: Fehlende Datumsverarbeitung
Problem: Ohne date-Filter werden Logs mit dem aktuellen Zeitpunkt statt mit dem Log-Zeitpunkt indiziert. Lösung: Fügen Sie immer einen date-Filter hinzu, der das Original-Datum des Logs verwendet.
Fehler 3: Nicht berücksichtigte Zeitzonen
Problem: Logs aus verschiedenen Zeitzonen (z.B. französische Server in verschiedenen Regionen) führen zu falschen Zeitstempeln. Lösung: Konfigurieren Sie die Zeitzone explizit im date-Filter:
date { match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] timezone => "Europe/Paris"
}
Fehler 4: Fehlende Fehlerbehandlung
Problem: Ungültige Log-Einträge führen zum Abbruch der Pipeline. Lösung: Fügen Sie Fehlerbehandlung hinzu:
filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } tag_on_failure => ["_grok_failure"] } if "_grok_failure" in [tags] { mutate { add_tag => ["_parse_error"] } }
}
FAQ: Häufige Fragen zur Logstash-Konfiguration
Hier beantworte ich die Fragen, die mir in Beratungen am häufigsten begegnen.
Wie viele Logformate kann Logstash gleichzeitig verarbeiten?
Logstash kann theoretisch unbegrenzt viele Formate verarbeiten. In der Praxis sollten Sie jedoch die Anzahl der Filter begrenzen, um die Performance zu erhalten. Für mehr als 10-15 verschiedene Formate empfiehlt sich die Aufteilung in mehrere Pipelines.
Wie gehe ich mit unbekannten Logformaten um?
Definieren Sie einen Fallback-Filter, der unbekannte Formate entweder verwirft oder als Rohdaten speichert:
filter { if [type] == "unknown" { drop { } }
}
Kann ich Logstash-Konfigurationen versionieren?
Ja, speichern Sie Ihre Konfigurationsdateien in einem Git-Repository. Das erleichtert Änderungsnachverfolgung und Rollbacks. Viele französische Unternehmen nutzen dafür GitLab oder GitHub.
Welche Performance-Optimierungen sind wichtig?
Verwenden Sie pipeline.workers und pipeline.batch.size für bessere Durchsatzraten. Nutzen Sie ecs_compatibility für bessere Feld-Namen. Vermeiden Sie übermäßige Regex-Operationen.
Wie integriere ich Logstash mit französischen Monitoring-Lösungen?
Logstash lässt sich problemlos mit Elasticsearch und Kibana kombinieren. Für französische Unternehmen, die lokale Lösungen bevorzugen, gibt es auch Alternativen wie der Elastic Cloud auf OVH oder Scaleway.
Professionelle Log-Verarbeitung mit Logstash
Die Konfiguration von Logstash für verschiedene Logformate ist eine anspruchsvolle, aber lohnende Aufgabe. Mit der richtigen Strukturierung – Input-Typen, bedingte Filter, Multiline-Behandlung und saubere Output-Konfiguration – schaffen Sie eine robuste Grundlage für Ihre Log-Analyse.
Die wichtigsten Erkenntnisse: Verwenden Sie aussagekräftige Typen für jede Logquelle, nutzen Sie bedingte Logik für verschiedene Formate, testen Sie Ihre Konfiguration gründlich vor dem Produktiveinsatz, und planen Sie Fehlerbehandlung und Monitoring ein.
Mit diesen Grundlagen sind Sie bestens gerüstet, um die Log-Daten Ihrer Systeme effizient zu verarbeiten – egal ob Sie eine kleine Anwendung oder eine komplexe Microservices-Architektur betreiben.




