Zum Inhalt springen

syslog — rsyslog und syslog-ng

Das syslog-Protokoll (RFC 5424) ist die Grundlage für klassische Log-Dienste. Es standardisiert Format und Transport von Meldungen — mit Facility und Severity als Metadaten (beschrieben im Überblick).

Auf modernen systemd-Systemen läuft journald als primäre Log-Instanz. rsyslog und syslog-ng setzen darüber auf: sie lesen das Journal oder empfangen Meldungen direkt und routen sie in Dateien, andere Server oder Datenbanken.

rsyslog (“rocket-fast system for log processing”) ist der Standard-Syslog-Daemon unter Debian/Ubuntu und RHEL/Fedora. Es ist rückwärtskompatibel mit dem klassischen syslogd, aber erheblich leistungsfähiger.

Terminal-Fenster
/etc/rsyslog.conf # Hauptkonfiguration
/etc/rsyslog.d/*.conf # Zusatzkonfigurationen (empfohlen)

Grundlegende Syntax einer Regel:

facility.severity Ziel

Beispiele aus /etc/rsyslog.conf:

# Alle Kern-Meldungen nach /var/log/kern.log
kern.* /var/log/kern.log
# Authentifizierung nach auth.log
auth,authpriv.* /var/log/auth.log
# Alles ab "warning" nach syslog
*.warn /var/log/syslog
# Notfälle auf alle Terminals
*.emerg :omusrmsg:*
# Alles außer Debug nach /var/log/messages
*.info;mail.none;authpriv.none /var/log/messages
facility.* # alle Severities
*.severity # alle Facilities
facility.=severity # genau diese Severity
facility.!severity # alles außer dieser Severity
/etc/rsyslog.d/mein-dienst.conf
local0.* /var/log/mein-dienst.log

rsyslog kann Logs über das Netzwerk senden — praktisch für zentrale Log-Infrastruktur:

# UDP (schnell, aber Verlust möglich)
*.* @logserver.example.com:514
# TCP (zuverlässig)
*.* @@logserver.example.com:514

Auf dem Empfänger-Server UDP/TCP aktivieren in /etc/rsyslog.conf:

# UDP empfangen
module(load="imudp")
input(type="imudp" port="514")
# TCP empfangen
module(load="imtcp")
input(type="imtcp" port="514")
Terminal-Fenster
sudo systemctl restart rsyslog
sudo systemctl status rsyslog

syslog-ng (next generation) ist eine flexible Alternative zu rsyslog mit einer ausdrucksstärkeren Konfigurationssprache. Es ist Standard unter openSUSE und in einigen anderen Distributionen.

Die Konfiguration in /etc/syslog-ng/syslog-ng.conf folgt einem klaren Muster:

source s_local {
system(); # systemd Journal + lokale Quellen
internal(); # syslog-ng eigene Meldungen
};
destination d_syslog {
file("/var/log/syslog");
};
destination d_auth {
file("/var/log/auth.log");
};
filter f_auth {
facility(auth, authpriv);
};
log {
source(s_local);
filter(f_auth);
destination(d_auth);
};
log {
source(s_local);
destination(d_syslog);
};
destination d_logserver {
network("logserver.example.com" port(514) transport("tcp"));
};
log {
source(s_local);
destination(d_logserver);
};
Terminal-Fenster
sudo systemctl restart syslog-ng
sudo systemctl status syslog-ng

Mit logger können Shell-Skripte direkt ins syslog schreiben:

Terminal-Fenster
logger "Backup gestartet"
logger -p local0.info "Backup gestartet"
logger -p local0.err "Backup fehlgeschlagen!"
logger -t backup "Backup von /home abgeschlossen"
# -t setzt den "Tag" (Programm-Name in der Log-Zeile)

Ergebnis in /var/log/syslog:

Mar 24 10:00:00 server backup: Backup von /home abgeschlossen
rsyslogsyslog-ng
Standard beiDebian, Ubuntu, RHELopenSUSE, manche Embedded
Konfigurationsspracheeinfach (klassisch) + RainerScripteigene Sprache (ausdrucksstark)
Performancesehr hochsehr hoch
Netzwerkjaja
Filterunggutsehr flexibel
Lernkurveflachsteiler