Rsyslog: Centralized Logging (Artikel 046)
Konfiguration von rsyslog zur lokalen Protokollierung und zum Remote-Relaying. Erfahren Sie, wie Sie einen zentralen Log-Server aufsetzen und Logs sicher übertragen.
# Rsyslog Deep Dive: Das Rückgrat des klassischen Loggings
TL;DR / Management Summary Trotz moderner Stacks wie ELK oder Loki bleibt rsyslog das Arbeitstier auf fast jedem Linux-System. Es ist extrem leichtgewichtig, zuverlässig und kann Logs von tausenden Quellen gleichzeitig verarbeiten. Ein Senior Admin nutzt rsyslog, um lokale Logs zu strukturieren und wichtige Events sofort an einen zentralen, gehärteten Log-Host (SIEM) weiterzuleiten – oft als Fallback, falls systemd-journald versagt.
# 1. Einführung & Architektur
Wie rsyslog arbeitet.
Rsyslog ist modular. Es liest Daten aus Quellen (Inputs), verarbeitet sie (Filter/Templates) und schreibt sie in Ziele (Outputs).
graph LR
A[Source: /dev/log] --> B[Input Module: imuxsock]
C[Source: Kernel] --> D[Input Module: imklog]
E[Remote: TCP/UDP 514] --> F[Input Module: imptcp / imudp]
B/D/F --> G[Processing: Rules & Filtering]
G --> H[Output: /var/log/syslog]
G --> I[Output: Remote Server]
G --> J[Output: Database]
# 2. Grundkonfiguration
Lokales Log-Management.
Die Konfiguration liegt in /etc/rsyslog.conf und /etc/rsyslog.d/*.conf.
# Beispiel: Trennung von Log-Files
Wir wollen, dass alle Mails in ein separates File fließen:
mail.* -/var/log/mail.log
Das - vor dem Pfad bedeutet, dass der Schreibvorgang asynchron erfolgt (Performance-Gewinn).
# 3. Remote Logging: Der Zentral-Server
Logs bündeln.
# Schritt 1: Server-Setup (Empfänger)
Aktivieren Sie UDP und TCP Empfang in der rsyslog.conf:
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
# Schritt 2: Client-Setup (Sender)
Leiten Sie alles an den Server weiter:
# @ = UDP, @@ = TCP
*.* @@192.168.1.50:514
# 4. Day-2 Operations: Log-Rotation & Templates
Ordnung halten.
# Logrotate Integration
Rsyslog schreibt nur, rotiert aber nicht. Das erledigt das Tool logrotate.
Datei: /etc/logrotate.d/rsyslog
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
# Dynamische Templates
Sortieren Sie Logs vom Client automatisch in Unterordner:
$template DynamicFile,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* -?DynamicFile
# 5. Troubleshooting & “War Stories”
Wenn die Logs verloren gehen.
# Story 1: “Der UDP-Verlust”
Symptom: In Hochlast-Phasen fehlen Logs auf dem zentralen Server.
Ursache: UDP ist verbindungslos. Bei Netzwerk-Überlastung werden Pakete einfach verworfen.
Lösung: Stellen Sie auf TCP (@@) um. Falls die Verbindung instabil ist, nutzen Sie Disk-Queues auf dem Client, um Logs lokal zwischenzuspeichern, bis der Server wieder erreichbar ist.
# Story 2: “Log-Loop-Death”
Symptom: Der Server schreibt GB-weise Logs über das Loggen selbst.
Ursache: Eine Regel leitet rsyslog-Meldungen an sich selbst weiter (Rekursion).
Lösung: Nutzen Sie Filter, um rsyslog-eigene Meldungen (:programname, isequal, "rsyslogd") von der Weiterleitung auszuschließen.
# 6. Sicherheit & Hardening
- Verschlüsselung: Senden Sie niemals Logs über das Internet ohne TLS. Nutzen Sie das Modul
lmnsd_gtls. - Rate Limiting: Verhindern Sie DoS-Angriffe durch Log-Flooding:
$SystemLogRateLimitInterval 5$SystemLogRateLimitBurst 1000 - Berechtigungen: Logs enthalten oft sensible Daten. Stellen Sie sicher, dass
/var/lognicht für jeden lesbar ist (chmod 750).
# Anhang: Cheatsheet
| Aufgabe | Befehl / Parameter |
|---|---|
| Config testen | rsyslogd -N1 |
| Dienst neustarten | systemctl restart rsyslog |
| Debug Modus | rsyslogd -dn |
| TCP Host | @@host:port |
| UDP Host | @host:port |
| Logfile leeren | > /var/log/name.log |