Linux-Logs mit rsyslog verwalten
Linux-Systeme erzeugen kontinuierlich Protokolle vom Kernel, von Diensten und Anwendungen. Eine saubere Verwaltung dieser Logdateien ist entscheidend, um Fehler zu analysieren, Aktivitäten nachzuverfolgen und einen reibungslosen Betrieb sicherzustellen.
rsyslog ist ein weit verbreiteter Logging-Daemon, der Protokolle sammelt, verarbeitet, speichert und bei Bedarf weiterleiten kann. Dank flexibler Konfiguration, Filterregeln und verschiedenen Ausgabemöglichkeiten eignet er sich sowohl für einfache Umgebungen als auch für komplexe Infrastrukturen.
In diesem Leitfaden erfahren Sie, wie Sie rsyslog nutzen, um Logs anzuzeigen, eigene Regeln zu definieren und Protokolle an entfernte Server weiterzuleiten.
Was ist rsyslog und warum ist es wichtig?
rsyslog ist ein modernes Logging-Tool, das in den meisten Linux-Distributionen standardmäßig enthalten ist. Es entstand als erweiterte Variante von syslog und bietet bessere Leistung sowie zusätzliche Funktionen. Im Gegensatz zu klassischen syslog-Diensten unterstützt rsyslog mehrere Eingangsquellen, fortgeschrittene Filterung, regelbasierte Weiterleitung und Remote-Logging. Damit eignet es sich nicht nur für die lokale Logverwaltung, sondern auch zum Aufbau zentralisierter Logging-Systeme, in denen Protokolle vieler Systeme an einer Stelle gesammelt werden.
Zentrale Funktionen von rsyslog
- Modulare Architektur: Eingaben, Filter und Ausgaben werden per Plugin eingebunden.
- Flexible Konfiguration: Regeln können nach Priorität, Quelle, Programmname oder Nachrichteninhalt erstellt werden.
- Remote-Weiterleitung: Versand von Logs über TCP oder UDP an externe Server.
- Unterstützung strukturierter Daten: Verarbeitung von JSON und RFC 5424 für bessere Auswertung.
- Hohe Performance: Multi-Threading ermöglicht die Bearbeitung großer Logmengen.
- Eigene Regeln: Präzise Steuerung, welche Protokolle wo und wie gespeichert werden.
- Mehrere Eingänge: Erfassung von Kernel-, Service-, Anwendungs- und Skript-Logs.
- Strukturierte Ausgaben: Formatierte Protokolle für bessere Lesbarkeit und Analyse.
Wie rsyslog funktioniert: Input, Filter und Output
rsyslog arbeitet nach einem dreistufigen Modell aus Input, Filter und Output:
- Input: Erfassung von Logs über Sockets (imuxsock), Kernelmeldungen (imklog), Dateien (imfile) oder Netzwerkprotokolle (imtcp, imudp).
- Filter: Anwendung von Regeln basierend auf Facility, Schweregrad oder individuellen Ausdrücken.
- Output: Weiterleitung der gefilterten Logs an Dateien, Datenbanken, entfernte Server oder Queues mit anpassbarer Formatierung.
Dieses Modell ermöglicht die flexible Anpassung sowohl für einzelne Server als auch für große Umgebungen.
Häufige Speicherorte für Logdateien unter Linux
Protokolle werden unter /var/log/
gespeichert. Zu den wichtigsten Dateien gehören:
- /var/log/syslog: Allgemeine System- und Anwendungsprotokolle (Debian/Ubuntu).
- /var/log/messages: Allgemeines Systemlog (Red Hat, CentOS, Fedora).
- /var/log/auth.log: Authentifizierungen, Logins, sudo, SSH (für Sicherheitsüberwachung).
- /var/log/kern.log: Kernel-Meldungen, hilfreich bei Hardware- oder Modulproblemen.
- /var/log/dmesg: Kernel-Buffer nach dem Boot, insbesondere Hardware-Initialisierung.
- /var/log/cron.log: Protokollierung geplanter Cron-Jobs.
Logs mit Basisbefehlen unter Linux anzeigen
Bevor rsyslog konfiguriert wird, lassen sich Logdateien mit Standardbefehlen untersuchen:
- cat: Gesamten Inhalt einer Datei ausgeben.
$ cat <LOGFILE_PATH>
- more: Datei seitenweise anzeigen.
$ more <LOGFILE_PATH>
- less: Scrollbare Anzeige, vor- und rückwärts.
$ less <LOGFILE_PATH>
- tail: Zeigt die letzten 10 Zeilen einer Datei.
$ tail <LOGFILE_PATH>
- tail -f: Neue Logeinträge in Echtzeit mitverfolgen.
$ tail -f <LOGFILE_PATH>
- zless / zcat / zgrep: Gelesene oder komprimierte
.gz
-Logs öffnen.
$ zless <GZ_LOGFILE_PATH>
Logs filtern mit grep, awk und sed
Linux stellt mächtige Werkzeuge zur Textverarbeitung bereit, um Logs zu durchsuchen und auszuwerten:
- grep: Sucht nach Begriffen oder Mustern.
$ grep "error" /var/log/syslog
$ grep -i "failed" /var/log/auth.log
- awk: Felder aus strukturierten Logeinträgen extrahieren.
$ awk '{print $1, $2, $5}' /var/log/syslog
- sed: Textbereiche bearbeiten oder extrahieren.
$ sed -n '/Start/,/End/p' /var/log/syslog
$ sed 's/error/ERROR/g' /var/log/syslog
Durch die Kombination dieser Werkzeuge lassen sich effiziente Pipelines erstellen, um Logs zu analysieren und Probleme wie fehlgeschlagene Logins oder Servicefehler aufzuspüren.
rsyslog über /etc/rsyslog.conf konfigurieren
Das Verhalten von rsyslog wird hauptsächlich in der zentralen Konfigurationsdatei /etc/rsyslog.conf
gesteuert. Diese Datei legt fest, wie eingehende Meldungen verarbeitet, gefiltert und weitergeleitet werden – abhängig von Quelle (Facility), Schweregrad (Severity) und Ziel (Action).
Grundformat einer Regel
Eine typische Regel in rsyslog.conf
folgt diesem Aufbau:
FACILITY.LEVEL ACTION
- FACILITY: Quelle der Logmeldung (z. B. auth, cron, daemon, kern, mail, user).
- LEVEL: Schweregrad der Meldung (z. B. debug, info, notice, warning, err, crit, alert, emerg).
- ACTION: Zielort des Logs (z. B. Datei, Remote-Server, Programm).
Häufige Konfigurationsbeispiele
Auth-Logs in separate Datei schreiben:
auth.* /var/log/auth.log
Kernel-Logs separat speichern:
kern.* /var/log/kern.log
Nur kritische Mail-Fehler protokollieren:
mail.crit /var/log/mail_critical.log
Alle Meldungen außer Mail und Auth protokollieren:
*.info;mail.none;authpriv.none /var/log/general.log
Nicht benötigte Logs verwerfen:
*.debug ~
User-Meldungen an die Konsole senden:
user.* /dev/console
Eigene Logging-Regeln hinzufügen
Mit rsyslog lassen sich individuelle Regeln anlegen, um gezielt Ereignisse einzelner Dienste oder Programme zu erfassen. So können Logs getrennt analysiert oder sicherheitskritische Vorgänge im Detail überwacht werden.
SSH-Aktivitäten protokollieren
Neue Konfigurationsdatei in /etc/rsyslog.d/
anlegen:
$ sudo nano /etc/rsyslog.d/10-ssh.conf
Folgende Regel hinzufügen:
authpriv.* /var/log/ssh.log
rsyslog neu starten:
$ systemctl restart rsyslog.service
Logs für eigene Anwendungen sammeln
Neue Konfigurationsdatei erstellen:
$ sudo nano /etc/rsyslog.d/20-myapp.conf
Regel zur Erfassung hinzufügen:
if ($programname == 'myapp') then /var/log/myapp.log
& stop
Dienst neu starten:
$ systemctl restart rsyslog.service
Logs an einen Remote-Server weiterleiten
Die zentrale Sammlung von Logs erleichtert die Überwachung mehrerer Systeme. rsyslog kann Protokolle von einem Client an einen externen Server senden.
Client konfigurieren
Neue Konfigurationsdatei erstellen:
$ sudo nano /etc/rsyslog.d/60-remote.conf
Folgende Regel hinzufügen:
*.* @@192.2.0.3:514
Hinweis: @
für UDP, @@
für TCP. IP-Adresse anpassen.
Server konfigurieren
Datei /etc/rsyslog.conf
auf dem Server bearbeiten:
module(load="imtcp")
input(type="imtcp" port="514")
Optional Logs nach Hostname und Programmname speichern:
$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
rsyslog auf beiden Systemen neu starten:
$ sudo systemctl restart rsyslog
Konfiguration testen
Testmeldung senden:
$ logger -p local0.info "Test message from rsyslog"
Anschließend prüfen, ob die Meldung in der vorgesehenen Logdatei (z. B. /var/log/syslog
oder benutzerdefinierter Pfad) erscheint.
Best Practices für den Einsatz von rsyslog
- Separate Dateien für unterschiedliche Dienste oder Anwendungen nutzen.
- Logdateien mit sicheren Berechtigungen schützen.
- Logrotation aktivieren, um zu große Dateien zu vermeiden.
- Zentrale Protokollierung für mehrere Systeme einsetzen.
- Logs regelmäßig überwachen, um Probleme frühzeitig zu erkennen und zu beheben.
Fazit
In diesem Artikel haben Sie gelernt, wie rsyslog unter Linux konfiguriert wird. Dabei wurden die Struktur der /etc/rsyslog.conf
-Datei erklärt, eigene Regeln für SSH und Anwendungen erstellt, Logs an einen Remote-Server weitergeleitet und die Einrichtung getestet. Durch die Beachtung bewährter Praktiken stellen Sie sicher, dass Ihre Protokollierung zuverlässig, organisiert und sicher bleibt und die Systemverwaltung erleichtert wird.