Logstash Konfiguration für Linux Logs: Anleitung

Logstash Konfiguration für Linux Logs: Anleitung

Beim Aufbau einer zentralen Log-Verwaltung stolpere ich immer wieder über dieselbe Frage: Wie konfiguriere ich Logstash für Linux-Logs richtig? Diese Anleitung zeigt Ihnen den kompletten Weg – von der Installation bis zur sicheren Übertragung an Elasticsearch. Ich teile dabei meine Erfahrungen aus über 15 Jahren als Systemarchitekt.

Kurz gesagt :

  • Logstash-Pipeline für Linux-Logs besteht aus Input, Filter und Output, zentrale Konfiguration in /etc/logstash/conf.d/.
  • Installation erfolgt distributionsabhängig per APT (Debian/Ubuntu) oder YUM (RHEL/CentOS), benötigt OpenJDK 17+.
  • Grok-Muster sind essenziell zum Parsen von Syslog-, Auth- und Kernel-Logs, vorab testen mit –config.test_and_exit.
  • Für DSGVO-Konformität: TLS aktivieren, IPs pseudonymisieren und Index-Lebenszyklen festlegen.

En bref: Logstash für Linux-Logs einrichten

  • Logstash sammelt, transformiert und leitet Linux-Logs an Elasticsearch weiter – die Pipeline besteht aus Input, Filter und Output.
  • Die Installation erfolgt je nach Distribution per APT oder YUM, danach konfigurieren Sie Pipelines in /etc/logstash/conf.d/.
  • Grok-Muster sind entscheidend zum Parsen von Syslog, Auth-Log und Kernel-Log – testen Sie sie immer vorab.
  • Für DSGVO-Konformität in Frankreich: TLS aktivieren, IPs pseudonymisieren und Index-Lebenszyklen festlegen.

Warum Logstash für Linux-Logs unverzichtbar ist

Logstash ist das zentrale Werkzeug im Elastic Stack, um Logs aus Linux-Systemen zu sammeln und zu normalisieren. Ohne eine solche Pipeline werden Log-Analysen schnell zur Sisyphusarbeit. Ich habe in Projekten gesehen, wie Teams Stunden mit manuellen grep-Befehlen verlieren – dabei übernimmt Logstash diese Arbeit automatisch. Die Fähigkeit, verschiedene Formate zu parsen und anzureichern, macht es zum Rückgrat jeder Monitoring-Architektur.

Schritt 1: Logstash installieren und vorbereiten

Die Installation von Logstash ist distributionsabhängig, aber unkomplifiziert. Unter Debian/Ubuntu fügen Sie das Elastic-Repository hinzu, unter RHEL/CentOS nutzen Sie das YUM-Repository. Nach der Installation starten Sie den Dienst und aktivieren ihn für den Autostart. Vergessen Sie nicht, die Java-Version zu prüfen – Logstash benötigt OpenJDK 17 oder höher.

Installation unter Debian/Ubuntu

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
sudo apt update && sudo apt install logstash

Installation unter RHEL/CentOS

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo vi /etc/yum.repos.d/logstash.repo
# Inhalt: [logstash-8.x] name=Elastic repository for 8.x packages baseurl=https://artifacts.elastic.co/packages/8.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1
sudo yum install logstash

Nach der Installation aktivieren Sie den Dienst: sudo systemctl enable logstash und sudo systemctl start logstash. Prüfen Sie den Status mit systemctl status logstash – das erspart spätere Überraschungen.

Schritt 2: Erste Pipeline für System-Logs

Erstellen Sie eine Pipeline-Datei unter /etc/logstash/conf.d/, zum Beispiel syslog.conf. Die Grundstruktur umfasst Input (Datei-Pfad), Filter (Grok-Muster, Datum) und Output (Elasticsearch). Testen Sie die Konfiguration immer mit --config.test_and_exit, bevor Sie sie aktivieren.

Grundlegende Pipeline für /var/log/syslog

input {
file {
path => "/var/log/syslog"
start_position => "beginning"
sincedb_path => "/var/lib/logstash/sincedb_syslog"
}
}

filter {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}(?:\[%{POSINT:pid}\])?: %{GREEDYDATA:message}" }
}
date {
match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}

output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "linux-syslog-%{+YYYY.MM.dd}"
}
}

Diese Pipeline liest die Syslog-Datei, parst Zeitstempel und Programmname und indiziert die Daten täglich. Ich empfehle, den sincedb_path explizit zu setzen, um Konflikte bei mehreren Pipelines zu vermeiden.

Schritt 3: Linux-Logs mit Grok-Mustern parsen

Grok-Muster sind das Herzstück der Log-Transformation – sie zerlegen unstrukturierte Nachrichten in Felder. Für Linux-Logs gibt es bewährte Muster, die Sie anpassen können. Ich zeige Ihnen die häufigsten und wie Sie eigene Muster definieren.

Häufige Grok-Muster für Linux

Grok-Muster für Linux-Log-Typen
Log-TypGrok-Muster
Syslog%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}: %{GREEDYDATA:message}
Auth-Log%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} sshd\[%{NUMBER:pid}\]: %{DATA:auth_message}
Kernel-Log%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} kernel: \[%{DATA:kernel_time}\] %{GREEDYDATA:kernel_message}

Ein konkretes Beispiel: Für Auth-Logs mit IP-Extraktion nutze ich dieses Filter-Snippet. Es extrahiert Benutzer und IP-Adresse und reichert sie mit GeoIP-Daten an – nützlich für Sicherheitsanalysen.

filter {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} sshd\[%{NUMBER:pid}\]: %{DATA:auth_message} for %{USER:user} from %{IP:client_ip}" }
}
geoip {
source => "client_ip"
target => "geoip"
}
}

Testen Sie Muster immer mit dem Grok-Debugger in Kibana – das spart Zeit. Ich habe schon zu viele Fehlversuche gesehen, weil ein Muster zu strikt war. Nutzen Sie %{GREEDYDATA} am Ende, um unerwartete Formate abzufangen.

Schritt 4: Mehrere Log-Quellen kombinieren

In der Praxis verarbeiten Sie selten nur eine Log-Datei. Verwenden Sie Typen und Tags, um verschiedene Quellen zu unterscheiden und unterschiedliche Filter anzuwenden. Das hält die Pipeline übersichtlich und performant.

Multi-Input mit Tags

input {
file {
path => "/var/log/syslog"
type => "syslog"
tags => ["linux", "system"]
}
file {
path => "/var/log/auth.log"
type => "auth"
tags => ["linux", "security"]
}
file {
path => "/var/log/nginx/access.log"
type => "nginx"
tags => ["web", "access"]
}
}

filter {
if [type] == "auth" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} sshd\[%{NUMBER:pid}\]: %{GREEDYDATA:auth_message}" }
}
} else if [type] == "nginx" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
}

output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "linux-%{type}-%{+YYYY.MM.dd}"
}
}

Diese Konfiguration erstellt separate Indizes pro Typ – das erleichtert spätere Abfragen. Achten Sie darauf, dass die Bedingungen sauber greifen, sonst werden Logs falsch verarbeitet.

Schritt 5: Logstash mit Systemd-Journal verbinden

Moderne Linux-Systeme nutzen systemd-journald für die Protokollierung. Logstash bietet dafür ein spezielles Plugin, das Journal-Einträge direkt liest. Das ist besonders nützlich, wenn Sie keine Datei-basierten Logs haben.

Journal-Input via journald-Plugin

input {
journald {
path => "/var/log/journal"
since => "24h"
tags => ["systemd", "journal"]
}
}

filter {
mutate {
add_field => { "collector" => "systemd-journal" }
}
}

output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "linux-journald-%{+YYYY.MM.dd}"
}
}

Installieren Sie das Plugin mit sudo /usr/share/logstash/bin/logstash-plugin install logstash-input-journald. Der Parameter since legt fest, ab wann Logs gelesen werden – bei 24h erhalten Sie die letzten 24 Stunden.

Schritt 6: Logstash-Leistung optimieren

Bei hohem Log-Aufkommen müssen Sie die Pipeline-Leistung im Blick behalten. Ich habe in Projekten mit über 100.000 Events pro Sekunde gearbeitet – da zählt jede Millisekunde. Hier sind meine bewährten Optimierungen.

  • Pipeline-Arbeiter erhöhen: Setzen Sie pipeline.workers in logstash.yml auf die Anzahl Ihrer CPU-Kerne – das skaliert die Verarbeitung parallel.
  • Batch-Größe anpassen: Erhöhen Sie pipeline.batch.size (Standard: 125) auf Werte wie 500, um den Durchsatz zu steigern.
  • Sincedb-Dateien verwalten: Nutzen Sie eindeutige Pfade pro Pipeline, um bei Neustarts keine Logs zu verlieren.
  • Grok-Muster cachen: Definieren Sie eigene Muster in einem patterns-Verzeichnis und binden Sie sie ein – das beschleunigt das Parsing.
  • Filter-Reihenfolge optimieren: Platzieren Sie teure Filter wie GeoIP nach einfachen Bedingungen, um unnötige Berechnungen zu vermeiden.

Überwachen Sie die Pipeline mit dem Monitoring-Endpoint: curl -X GET 'http://localhost:9600/_node/stats/pipeline?pretty'. Das zeigt Ihnen Durchsatz und Fehlerraten.

Schritt 7: Logs sicher an Elasticsearch übertragen

Sicherheit ist in Frankreich ein zentrales Thema – insbesondere bei sensiblen System-Logs. Die DSGVO verlangt angemessene technische Maßnahmen. Ich empfehle, TLS zu aktivieren und die Zugangsdaten über Umgebungsvariablen zu verwalten.

TLS-Verschlüsselung aktivieren

output {
elasticsearch {
hosts => ["https://elasticsearch-server:9200"]
ssl => true
cacert => "/etc/logstash/certs/ca.crt"
user => "logstash_internal"
password => "${LOGSTASH_PASSWORD}"
}
}

Beachten Sie die DSGVO-Anforderungen: Pseudonymisieren Sie IP-Adressen, wenn sie nicht benötigt werden, und legen Sie Index-Lebenszyklen fest, um Daten nach Ablauf zu löschen. Die CNIL empfiehlt, Logs nicht länger als nötig aufzubewahren.

Schritt 8: Fehlerbehebung und Monitoring

Auch mit guter Konfiguration treten Probleme auf. Ich habe die häufigsten Fehler in einer Tabelle zusammengefasst – mit Lösungen, die sich in der Praxis bewährt haben.

Häufige Logstash-Probleme und Lösungen
ProblemMögliche UrsacheLösung
Keine Logs in ElasticsearchFalscher Pfad oder fehlende BerechtigungenPrüfen Sie ls -la /var/log/ und die Logstash-Logs
Grok-Muster matchen nichtFormatweiche bei Log-EinträgenNutzen Sie den Grok-Debugger in Kibana
Hohe CPU-LastZu viele Filter ohne BedingungenOptimieren Sie die Filter-Reihenfolge
Verzögerte Log-ÜbertragungZu kleine Batch-GrößeErhöhen Sie pipeline.batch.size

Zusätzlich sollten Sie das Monitoring aktivieren – entweder über X-Pack oder das Kibana-Dashboard. Das gibt Ihnen frühzeitig Hinweise auf Engpässe.

Häufige Fehler und wie Sie sie vermeiden

Aus meiner Beratungspraxis kenne ich sechs Fehler, die immer wieder auftreten. Vermeiden Sie diese, um Zeit und Nerven zu sparen.

  • Falsche Dateipfade: Überprüfen Sie immer die tatsächlichen Pfade unter /var/log/ – auf RHEL heißt es secure statt auth.log.
  • Sincedb-Konflikte: Verwenden Sie eindeutige sincedb_path-Dateien für jede Pipeline, sonst überschreiben sich die Positionen.
  • Grok-Muster zu strikt: Nutzen Sie %{GREEDYDATA} am Ende, um unerwartete Formate abzufangen.
  • Keine Zeitstempel-Normalisierung: Ohne date-Filter werden Logs mit dem aktuellen Zeitpunkt indiziert – das verfälscht Analysen.
  • Fehlende Speicherplatz-Reserven: Elasticsearch benötigt ausreichend Heap-Speicher; planen Sie mindestens 50% freien RAM ein.
  • Sicherheitslücken: Aktivieren Sie immer TLS und Authentifizierung, insbesondere in Cloud-Umgebungen.

Ich habe diese Fehler selbst gemacht – zum Beispiel die Sincedb-Konflikte, als ich zwei Pipelines parallel betrieb. Seitdem setze ich konsequent eindeutige Pfade.

FAQ – Häufige Fragen zur Logstash-Konfiguration

Wie kann ich Logstash für mehrere Server zentral konfigurieren?

Nutzen Sie Konfigurationsmanagement-Tools wie Ansible oder Puppet, um die Logstash-Konfigurationen auf allen Servern zu verteilen. Alternativ können Sie Logstash-Pipelines über die Elastic Agent-Integration zentral verwalten – das reduziert den Aufwand erheblich.

Was kostet Logstash für Unternehmen in Frankreich?

Logstash ist als Open-Source-Software kostenlos nutzbar. Für den Elastic Cloud Service zahlen Sie je nach Datenvolumen – in Frankreich beginnen die Preise bei etwa 45 € pro Monat für kleine Umgebungen. Enterprise-Funktionen wie erweitertes Monitoring sind kostenpflichtig.

Wie lange sollte ich Linux-Logs aufbewahren?

Für die DSGVO-Konformität sollten Sie Logs nicht länger als nötig speichern. Die ANSSI empfiehlt für sicherheitsrelevante Logs eine Aufbewahrungsdauer von mindestens 6 Monaten, für andere Logs oft 3–12 Monate. Legen Sie Index-Lebenszyklen entsprechend fest.

Kann Logstash auch Windows-Ereignisprotokolle verarbeiten?

Ja, über den Winlogbeat-Input oder das logstash-input-winlog-Plugin. Die Konfiguration unterscheidet sich jedoch von Linux-Logs – ich empfehle, dafür separate Pipelines zu verwenden.

Wie debugge ich Grok-Muster effizient?

Nutzen Sie den Grok-Debugger in Kibana unter „Dev Tools“ oder den Online-Grok-Debugger. Fügen Sie Beispiel-Logs ein und testen Sie die Muster interaktiv – das ist schneller als Trial-and-Error.

Was ist der Unterschied zwischen Logstash und Filebeat?

Filebeat ist ein leichtgewichtiger Agent, der Logs sammelt und an Logstash oder Elasticsearch sendet. Logstash übernimmt die schwerere Transformation. In modernen Setups kombinieren Sie oft beide – Filebeat auf den Servern, Logstash zentral.

Fazit: Logstash für Linux-Logs – Ihr Weg zur zentralen Log-Verwaltung

Mit dieser Anleitung haben Sie die Grundlagen für eine robuste Logstash-Konfiguration für Linux-Logs. Sie können nun System-Logs sammeln, parsen und sicher an Elasticsearch weiterleiten. Denken Sie daran: Starten Sie klein und erweitern Sie die Pipeline schrittweise. Testen Sie jede Änderung mit –config.test_and_exit, bevor Sie sie produktiv schalten. Und behalten Sie die Sicherheit im Blick – insbesondere bei sensiblen Log-Daten. Für französische Unternehmen ist die Einhaltung der DSGVO und der ANSSI-Empfehlungen entscheidend. Mit den hier vorgestellten Techniken sind Sie gut vorbereitet, um eine DSGVO-konforme und sichere Log-Verwaltung aufzubauen. Als nächsten Schritt empfehle ich, Kibana-Dashboards einzurichten und Alerting zu konfigurieren – damit Sie proaktiv auf Anomalien reagieren können.

Anna Berger
Anna Berger
IT-Sicherheitsanalystin und Tech-Journalistin

Schon als Kind war ich fasziniert von der Logik hinter Computern und der unendlichen Welt der Daten. Was als spielerische Neugier mit dem Zerlegen alter PCs begann, entwickelte sich schnell zu einer tiefen Leidenschaft für die Informatik. Heute sehe ich es als meine Berufung, komplexe digitale Themen greifbar zu …

Tous les articles de Anna Berger →

Laisser un commentaire