Ein Linux-Protokollierungssystem ist eine Software, die Ereignisse und Aktivitäten auf einem Linux-Betriebssystem erfasst, speichert und verwaltet. Es hilft bei der Überwachung, Fehlerdiagnose und Systemanalyse, indem es Informationen wie Ereignisse aus dem Kernel, Diensten, Anwendungen und Benutzeraktionen über den Betrieb des Systems erfasst. Typische Protokollierungssysteme umfassen Protokolldateien, Dienste zur Protokollverarbeitung, Ereignisstufen und -formate sowie Funktionen zur Filterung und Weiterleitung von Ereignissen. Bekannte Beispiele sind Syslog, Rsyslog und Journald.
-
- Journald ist die Logging-Komponente von Systemd, dem Init-System, das in vielen modernen Linux-Distributionen verwendet wird. Es nutzt Key-Value-Paare und Metadaten, um Protokolle sicher zu speichern und Manipulationen zu verhindern. Journald bietet eine effiziente, moderne Methode zur Protokollierung von Systemereignissen.
- Syslog-ng ist eine erweiterte Version des traditionellen Syslog-Dienstes. Es ermöglicht das Sammeln, Filtern und Weiterleiten von Protokollen aus verschiedenen Quellen. Syslog-ng bietet fortschrittliche Funktionen wie Verschlüsselung, Multiline-Messages und Failover in der kostenpflichtigen Version. Es ist eine leistungsstarke Lösung zur Protokollverwaltung.
- Rsyslog ist ein leistungsstarker Daemon zur Protokollverwaltung auf Unix-ähnlichen Betriebssystemen. Als Weiterentwicklung des klassischen Syslog-Dienstes bietet es erweiterte Funktionen, flexible Konfiguration und Unterstützung für verschiedene Protokollformate. Rsyslog kann Protokolle filtern, transformieren und an entfernte Server weiterleiten, was es zu einer vielseitigen Lösung macht.
- Journald ist die Logging-Komponente von Systemd, dem Init-System, das in vielen modernen Linux-Distributionen verwendet wird. Es nutzt Key-Value-Paare und Metadaten, um Protokolle sicher zu speichern und Manipulationen zu verhindern. Journald bietet eine effiziente, moderne Methode zur Protokollierung von Systemereignissen.
Journald speichert im Gegensatz zu Rsyslog/Syslog-ng Logeinträge nicht in Textdateien, sondern in Binärdateien ab. Das hat Vor- und Nachteile:
Textdatei | Binärdatei | ||
Lesbarkeit | Textdateien enthalten lesbare Zeichen und sind für Menschen leicht verständlich. Dies erleichtert das manuelle Bearbeiten und Lesen der Dateiinhalte. | Binärdateien sind nicht für Menschen lesbar. Es ist schwer zu verstehen, was genau in der Datei gespeichert ist. | |
OS-Abhängigkeit | Textdateien sind in der Regel plattformunabhängig. Sie können von verschiedenen Texteditoren auf verschiedenen Betriebssystemen geöffnet werden. | Binärdateien können auf verschiedenen Betriebssystemen unterschiedliche Repräsentationen haben, was die Portabilität beeinträchtigen kann. | |
Versionskontrolle | Textdateien sind in Versionierungssystemen leichter zu verfolgen und zu verwalten, da Änderungen gut lesbar sind. | Binärdateien sind schwerer zu versionieren, da Änderungen nicht so leicht sichtbar sind wie in Textdateien. | |
Interoperabilität | Textdateien können leicht von verschiedenen Programmen und Skriptsprachen gelesen und verarbeitet werden. | Binärdateien können ohne spezifische Programme nicht gelesen werden. | |
Größe auf Dateisystem | Textdateien können größer sein als binäre Dateien, da sie Zeichen-basiert sind. Dies kann zu erhöhtem Speicherplatzbedarf führen. | Binärdateien sind in der Regel kompakter als Textdateien, da sie auf maschinenlesbaren Codes basieren. Dies spart Speicherplatz. | |
Verarbeitung | Das Parsen von Textdateien kann im Vergleich zu binären Dateien langsamer sein, da Zeichen-basierte Verarbeitung mehr Zeit in Anspruch nehmen kann. | Das Parsen von Binärdateien ist in der Regel schneller, da keine Zeichen-basierte Verarbeitung erforderlich ist. | |
Darstellung | Textdateien sind nicht geeignet, um komplexe Datenstrukturen und nicht-textbasierte Informationen (wie Bilder oder Multimedia) darzustellen. | Binärdateien können komplexe Datenstrukturen speichern, die nicht leicht in Textform dargestellt werden können. | |
——————————- | ——————————————————————————— | ——————————————————————————— |
In vielen Fällen hängt die Wahl zwischen Text- und Binärdateien von der Art der gespeicherten Daten, dem Verwendungszweck und den Anforderungen an die Lesbarkeit, Effizienz und Verarbeitungsgeschwindigkeit ab. Somit ergeben sich unterschiedliche Voraussetzungen für das Logsystem.
Journald | Rsyslog / Syslog-ng | ||
Speicherung der Logeinträge | Binär – Dateibasiert. Logeinträge können ohne den Journald Dienst nicht ausgelesen werden. Defekte in den Dateien man ggf. das gesamte Log unbrauchbar. | Klartext – Dateibasiert. Logeinträge können mit Bordmitteln ausgelesen werden. Verschiedene Logdatein für Apache, SSH etc.. | |
Strukturierte Logausgabe | Logausgaben können direkt über den journald Befehl nach Diensten, Benutzern, Zeiträumen u.ä. ausgeben werden | Logausgaben können nur mit externen Bordmitteln wie grep, sed, awk etc. gefiltert werden | |
——————————- | ——————————————————————————— | ——————————————————————————— |
Binär vs Text
Binärprotokolle ermöglichen eine effiziente Speicherung und schnelle Verarbeitung von detaillierten Informationen. Durch Textprotokolle bleiben wichtige Ereignisse für Menschen lesbar und einfach zu überprüfen. Diese Kombination erlaubt umfassende Analyse, Plattformunabhängigkeit und Leistungsoptimierung. In sicherheitskritischen Umgebungen sorgt die Verwendung beider Formate für effektive Sicherheitsüberprüfungen. Einziger Nachteil ist der Speicherplatzbedarf, da beide Logsysteme ihre Dateien unabhängig voneinander speichern.
Beide Logsysteme bieten die Möglichkeit den maximalen Speicherplatz festzulegen und so das präferierte Logsystem für große Zeiträume zu nutzen und das jeweils andere Logsystem auf kurze Zeiträume zu beschränken.
Ab Debian 12 Bookworm wird Journald statt Rsyslog genutzt. Rsyslog kann allerdings einfach über die Paketverwaltung installiert und zusätzlich zu Journald verwendet werden. Bei gleichzeitiger Verwendung beider Logsysteme sollte Eines auf einen kurzen Zeitraum beschränkt werden. Die Installation und Konfiguration der Logdienste kann wie folgt realisiert werden:
1 2 3 4 5 6 7 8 9 10 11 12 |
# Installation von rsyslog und logrotate sudo apt install -y rsyslog logrotate # journald auf 7 Tage beschränken sed -i 's/#MaxFileSec=.*/MaxFileSec=7days/' /etc/systemd/journald.conf # journald einträge an syslog weiterreichen sed -i 's/#ForwardToSyslog=.*/ForwardToSyslog=yes/' /etc/systemd/journald.conf # Neustart der Log Dienste sudo systemctl restart systemd-journald rsyslog sudo systemctl restart |
-
-
- Text basierter Log ohne Zeiteinschränkung, mit Bordmitteln auswertbar
- Binär basierter Log über 7 Tage, schnell auslesbarer, log für Systemoperationen
-
In o.g. Konfigurationsbeispiel liegt der Focus auf Datenkonsistenz mit rsyslog. Journald wird dabei auf max. 7 Tage begrenzt und rsyslog zeichnet wie gewohnt ohne Zeitbeschränkung auf. Die Logdateien von Rsyslog werden mittels Logrotate komprimiert, benötigen aber mehr Speicher als ein reines Journald. Dafür sind die Logdateien mit Bordmitteln auswertbar.
Tipps und Tricks
Im Folgenden sind einige Befehle zur Darstellung von journalctl aufgelistet:
journalctl | Anzeigen aller Logeinträge mit pager (ähnlich cat /var/log/syslog | less) |
journalctl --no-pager | Anzeigen aller Logeinträge (ähnlich cat /var/log/syslog) |
journalctl -b | Anzeigen von Protokollen aus dem aktuellen Boot |
journalctl -e | Anzeigen von Protokollen, nur letzter Pager |
journalctl -f | Anzeigen und live Logausgabe |
journalctl -n <Zahl> | Anzeigen der letzten <Zahl> Einträge (default ist 10) |
journalctl --list-boots | Zeilenweise Anzeige der einzelnen Bootvorgänge |
journalctl -b -6 | Anzeigen von Daten aus einem Boot (Nummer) |
journalctl -b caf0524a1d394ce0bdbcff75b94444fe | Anzeigen von Daten aus einem Boot (Boot-ID) |
journalctl --since yesterday | Anzeigen von Daten für den gestrigen Tag |
journalctl -u postfix.service | Anzeigen von Daten für den Postfix Dienst |
journalctl -u postfix.service --since today | Anzeigen von Daten für den Postfix Dienst für den heutigen Tag |
journalctl --since "2023-11-15" --until "2023-11-20 01:00" -u postfix@-.service | Anzeigen von Daten zwischen 15.11.2023 bis 20.11.2023 1:00 für den Postfix Dienst |
journalctl -p <err|number> -b | Datenabruf versch. Fehlerklassen: (0: emerg (Notfall) | 1: alert (Alarm) | 2: crit (kritisch) | 3: err (Fehler) | 4: warning (Warnung) | 5: notice (Hinweis) | 6: info (Information) | 7: debug (Fehlersuche) |
sudo journalctl --vacuum-size=<size> | Größenbeschränkung der Logdatein auf <size> (100M | 1G | ...) |
sudo journalctl --vacuum-time=<time> | Zeitbeschränkung der Logdatein auf <time> (1 years | 20 days | ...) |
journalctl --disk-usage | Anzeigen der aktuellen Festplattenbelegung der Logdatein |
------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------- |
by Speefak | manpages.ubuntu.org | www.loggly.com | www.c-rieger.de | www.digitalocean.com