linux-ubuntu-debian logging rsyslog syslog networking

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/log nicht 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