Was ist und kann Journalctl?
Mit Journalctl lassen sich unter Linux Systemprotokolle effizient verwalten und analysieren. Das Tool bietet Funktionen zur Überwachung von Systemaktivitäten, Fehlersuche, Echtzeitprotokollverfolgung, detaillierten Einblick in die Protokolldaten und ist unverzichtbar, wenn es darum geht, Systemprobleme effektiv zu diagnostizieren.
Was ist Journalctl?
Journalctl ist ein leistungsfähiges Dienstprogramm zum Abfragen und Anzeigen von Ereignisprotokollen bzw. Logfiles unter Linux. Es ist ein zentraler Bestandteil der System- und Dienstverwaltungs-Suite systemd, die in vielen modernen Linux-Distributionen wie Ubuntu, Fedora und Arch Linux standardmäßig verwendet wird. Der Name „journalctl“ setzt sich aus den Begriffen „journal“ (Protokoll) und „ctl“ (Control) zusammen, was auf seine Funktion als Tool zur Kontrolle und Analyse von Protokollen hinweist.
Journalctl ermöglicht den Zugriff auf das Systemprotokoll, das von systemd-journald verwaltet wird. Das Systemprotokoll ist eine zentrale Sammlung von Meldungen und Ereignissen, die während des Betriebs des Linux-Systems auftreten. Im Gegensatz zu herkömmlichen textbasierten Protokollen bietet Journalctl eine strukturierte und effiziente Möglichkeit, Protokolldaten in Echtzeit zu durchsuchen, zu filtern und anzuzeigen. Dies kann dabei helfen, Probleme zu diagnostizieren oder den Systemstatus zu überwachen.
Dazu speichert Journalctl die Protokolldateien im Binärformat, denn binäre Protokolldateien sind kompakter und effizienter als ihre textbasierten Äquivalente. Dies ermöglicht angesichts der großen Menge an protokollierten Daten eine schnellere und effizientere Suche nach bestimmten Ereignissen oder Informationen innerhalb der Protokolldateien. Zusätzlich bieten binäre Protokolldateien, aufgrund ihrer Struktur und Verschlüsselung, eine höhere Sicherheit gegenüber textbasierten Protokollen, da binäre Formate die Manipulation von Protokolldaten erschweren.
Speicherplatz für Protokolldateien anpassen
Mit Journalctl lässt sich der Speicherplatz, den die Protokolldateien auf der Festplatte belegen, begrenzen und konfigurieren. Dies geschieht über die Einstellungen des systemd-journald-Dienstes. Die Konfigurationseinstellungen sind in der Datei /etc/systemd/journald.conf
gespeichert. Darin finden Sie folgende Einträge:
-
SystemMaxUse
: Begrenzt den Speicherplatz für Protokolle im Systemverzeichnis. -
RuntimeMaxUse
: Begrenzt den Speicherplatz für Protokolle im temporären Verzeichnis.
Zum Einstellen der Speicherplatzbegrenzung fügen Sie die folgenden Zeilen hinzu oder ändern diese je nach Bedarf:
[Journal]
SystemMaxUse=50M
RuntimeMaxUse=50M
bashDie Werte aus diesem Beispiel (50M) lassen sich beliebig ändern. Dabei können Sie auch verschiedene Einheiten wie K
(Kilobytes), M
(Megabytes), G
(Gigabytes) oder T
(Terrabytes) verwenden. Nachdem Sie die Konfigurationsdatei bearbeitet haben, muss systemd-journald neu gestartet werden, damit die Änderungen wirksam werden:
sudo systemctl restart systemd-journald
bashNach diesen Schritten ist systemd-journald so konfiguriert, dass der Speicherplatz für Protokolldateien begrenzt ist. Stellen Sie sicher, dass die gewählte Begrenzung ausreichend ist, um wichtige Protokolldaten zu speichern, aber nicht zu viel Festplattenspeicher verbraucht. Beachten Sie, dass ältere Protokolle automatisch gelöscht werden, wenn das Limit erreicht ist.
Ermitteln der Festplattenbelegung
Bevor Sie den Speicherplatz für Protokolldateien anpassen, können Sie zunächst prüfen, wie viel Speicherplatz aktuell durch Journal belegt wird. Dies ist mit dem Flag --disk-usage
möglich:
journalctl --disk-usage
Journals take up 8.0M on disk.
bashAlte Protokolleinträge löschen
Nimmt Journal zu viel Speicherplatz ein, lassen sich alte Protokolleinträge einfach wieder löschen. Dazu stehen zwei Möglichkeiten zur Verfügung:
Mit --vacuum-size
lässt sich Ihr Journal durch Angabe einer Größe verkleinern. In diesem Fall werden alte Einträge entfernt, bis der gesamte auf der Festplatte belegte Journal-Speicherplatz die gewünschte Größe erreicht hat.
sudo journalctl --vacuum-size=1G
bashAlternativ lässt sich Journal durch die Angabe einer Sperrzeit mit der Option --vacuum-time
verkleinern. Dabei werden alle Einträge, die über die angegebene Zeit hinausgehen, gelöscht. Falls Sie z. B. Protokolleinträge aus dem letzten Jahr behalten wollen, können Sie Folgendes eingeben:
sudo journalctl --vacuum-time=1years
bashWas kann Journalctl?
Eine der leistungsstarken Funktionen von Journalctl ist die Möglichkeit, Log-Einträge nach verschiedenen Kriterien zu filtern. Diese Funktion ermöglicht es, gezielt nach relevanten Informationen zu suchen und so Probleme schneller zu identifizieren. Im Folgenden stellen wir Ihnen einige der gebräuchlichsten Filteroptionen von Journalctl vor.
Protokolle anzeigen
Durch Eingabe des Befehls journalctl
werden die Protokolleinträge für das aktuelle System in umgekehrter chronologischer Reihenfolge angezeigt. Geben Sie journalctl -f
oder journalctl --follow
ein, um sich die Einträge in Echtzeit anzeigen zu lassen. Neue Einträge werden automatisch in der Reihenfolge ihres Eintreffens angezeigt.
Je nachdem, wie lange systemd bereits auf Ihrem System läuft, wird Ihnen wahrscheinlich eine unüberschaubare Menge an Daten angezeigt werden, die zehn- oder hunderttausende Zeilen lang sein können. Um schneller zu finden, was Sie suchen, lassen sich die Protokolle mit verschiedenen Linux-Befehlen weiter filtern.
Filtern nach Zeit
Mit Journalctl lassen sich Protokolle nach einem bestimmten Zeitpunkt filtern, um diese effizienter nach relevanten Informationen durchsuchen zu können.
Filtern nach Bootvorgängen
Das Filtern von Protokollen nach Bootvorgängen ist besonders nützlich, um bestimmte Systemereignisse zu einem bestimmten Zeitpunkt oder während eines bestimmten Bootszenarios zu überprüfen. Dies erleichtert die Diagnose von Problemen, da sich die Protokolleinträge dadurch auf einen bestimmten Systemzustand oder eine bestimmte Konfiguration eingrenzen können.
-
Aktueller Boot: Mit
journalctl -b
werden alle Protokolleinträge angezeigt, die seit dem letzten Neustart gesammelt wurden. -
Vergangene Bootvorgänge: Mit der Option
-b
, gefolgt von einer Zahl, können Sie sich die Protokolleinträge für einen bestimmten vorherigen Bootvorgang anzeigen lassen. Wenn Sie z. B.journalctl -b 1
eingeben, wird der vorherige Bootvorgang angezeigt. -
Liste aller verfügbaren Bootvorgänge: Der Befehl
journalctl --list-boots
zeigt eine Liste der verfügbaren Bootvorgängen mit ihren jeweiligen IDs an. Sie können die gewünschte Boot-ID verwenden, um die Protokolle für einen bestimmten Bootvorgang anzuzeigen.
Während bei einigen Linux-Distributionen das Speichern von vergangenen Bootvorgänge standardmäßig aktiviert ist, muss diese Funktionen bei anderen erst aktiviert werden. Dazu können Sie ein Verzeichnis erstellen, in dem das Protokoll gespeichert werden soll, indem Sie sudo mkdir -p /var/log/journal
eingeben.
Alternativ können Sie dazu die Journal-Konfigurationsdatei mit sudo nano /etc/systemd/journald.conf
bearbeiten. Danach setzen Sie unter [Journal]
die Option Storage=
auf persistent
, um die persistente Protokollierung zu aktivieren:
. . .
[Journal]
Storage=persistent
bashFiltern nach Zeitfenstern
Manchmal kann es notwendig sein, Protokolleinträge für einen bestimmten Zeitraum anzuzeigen. Journalctl bietet dazu die Optionen --since
und --until
, mit denen sich die Einträge auf einen bestimmten Zeitraum einschränken lassen. Nutzen Sie dazu das Zeitformat YYYY-MM-DD HH:MM:SS
. Der Befehl, um sich z. B. alle Protokolleinträge zwischen dem 1. Januar 2023 um 12:00 Uhr und dem 2. Januar 2023 um 12:00 Uhr anzeigen zu lassen, sieht dementsprechend wie folgt aus:
journalctl --since "2023-01-01 12:00:00" --until "2023-01-02 12:00:00"
bashDie Kombination der beiden Befehle kann auch einen kürzeren Zeitpunkt filtern:
journalctl --since 09:00 --until "1 hour ago"
bashAlternativ besteht die Möglichkeit, Teile des obigen Formats wegzulassen. So lassen sich z. B. alle Einträge ab einem bestimmten Zeitpunkt anzeigen:
journalctl --since "2023-11-16 15:25:00"
bashJournalctl versteht auch relative Werte wie z. B. die Wörter yesterday
(gestern), today
(heute) oder tomorrow
(morgen). Um Einträge von gestern anzuzeigen, geben Sie Folgendes ein:
journalctl --since yesterday
bashFiltern nach Nachrichteninteresse
Das Filtern von Protokolleinträgen nach Nachrichteninteresse mit Journalctl ist ebenfalls äußerst nützlich, da es die gezielte Suche nach relevanten Informationen und die Konzentration auf bestimmte Aspekte der Systemprotokolle ermöglicht. Dadurch lassen sich unter anderem eine effiziente Fehlerdiagnose, eine Früherkennung von Sicherheitsproblemen und eine schnelle Leistungsüberwachung durchführen.
Filtern nach Priorität
Um die Protokolle mit Journalctl nach bestimmten Nachrichteninteressen zu filtern, können Sie die Prioritäten der Protokolleinträge nutzen. Dazu können Sie den Namen der jeweiligen Priorität oder deren entsprechenden numerischen Wert verwenden. Je niedriger die Nummer, desto wichtiger ist die Meldung:
- 0: emerg (Notfall)
- 1: alert (Alarm)
- 2: crit (kritisch)
- 3: err (Fehler)
- 4: warning (Warnung)
- 5: notice (Hinweis)
- 6: info (Information)
- 7: debug (Fehlersuche)
Meldungen mit einer bestimmten Priorität lassen sich mit der Option -p
filtern. Durch folgenden Befehl werden beispielsweise nur Protokolleinträge mit der Priorität „err“ (Error) und höher angezeigt:
journalctl -p err
bashFiltern nach Einheit
Das Filtern von Protokollen nach Einheiten mit Journalctl ist besonders nützlich, wenn Sie sich auf spezifische Dienste oder Prozesse konzentrieren wollen. Diese lassen sich mit der Option -u
filtern. Um sich z. B. die Protokolleinträge für den Apache-Webserver anzeigen zu lassen, können Sie Folgendes eingeben:
journalctl -u apache2
bashDie Suche lässt sich mit den bereits bekannten relativen Zeitwerten weiter verfeinern. Falls Sie wissen wollen, ob der Dienst heute bereits ausgeführt wurde, können Sie Folgendes eingeben:
journalctl -u apache2 --since today
bashMit Journalctl lassen sich auch Datensätze aus verschiedenen Einheiten zusammenführen. Ist Ihr Nginx-Prozess z. B. mit einer PHP-FPM-Einheit verbunden, lassen sich die Einträge von beiden in chronologischer Reihenfolge zusammenführen. Der Befehl dazu lautet:
journalctl -u nginx.service -u php-fpm.service --since today-u apache2 --since today
bashFiltern nach Prozess, Benutzer oder Gruppen-ID
Mit Journalctl lassen sich Protokolleinträge auch nach Prozess, Benutzer oder Gruppen-ID filtern. Sofern Sie die genaue PID des Prozesses kennen, nach dem Sie suchen wollen, lässt sich dieser mit der Option_PID
filtern. Ist die PID z. B. 8088, lautet der Befehl:
journalctl _PID=8088
bashAlternativ können Sie sich mit den Filtern _UID
oder _GID
alle Einträge anzeigen lassen, die von einem bestimmten Benutzer oder einer Gruppe protokolliert wurden. Hat Ihr Webserver z. B. den Namen „www-data“, lässt sich die Benutzer-ID wie folgt finden:
id -u www-data
33
bashMit der nun bekannten ID können die Journaleinträge gefiltert werden:
journalctl _UID=33 --since today
bashUm zu sehen, für welche Gruppen-IDs Einträge angefertigt wurden, können Sie die Option -F
verwenden. Diese zeigt Ihnen alle Werte, die für das Feld „Gruppen-ID“ gespeichert sind:
journalctl -F _GID
32
99
102
133
81
84
100
0
124
87
bashFiltern nach Komponentenfeld
Die Filterung nach dem Komponentenfeld ist äußerst nützlich, um den Fokus auf spezifische Anwendungen, Dienste oder Prozesse zu lenken. Das Komponentenfeld wird normalerweise von verschiedenen Diensten oder Software-Komponenten genutzt, um spezifische Informationen in den Protokollen zu identifizieren. Durch diese Art der Filterung lassen sich die Protokolleinträge gezielt auf eine bestimmte Komponente, Anwendung oder Serviceeinheit eingrenzen. Um z. B. die Einträge, die die ausführbare Datei bash
enthalten, zu filtern, müssen Sie folgenden Befehl eingeben:
journalctl /usr/bin/bash
bashKernel-Meldungen anzeigen
Das Filtern von Protokolleinträgen nach Kernel-Meldungen mit Journalctl ist eine effektive Methode, um spezifische Informationen über den Kernel-Betrieb in einem Linux-System zu analysieren. Kernelmeldungen können Hinweise auf Hardware-Probleme, Treiberkonflikte oder andere Systemereignisse liefern.
Kernel-Meldungen, die in der Ausgabe dmesg
zu finden sind, können ebenfalls aus dem Journal gefiltert werden. Sie lassen sich mit den Flags -k oder
–dmesg ` anzeigen:
journalctl -k
bashDabei werden standardmäßig die Kernel-Meldungen des aktuellen Bootvorgangs angezeigt. Die Meldungen eines alternativen Bootvorgangs können mit den bereits bekannten Boot-Auswahl-Flags gefiltert werden. Wenn Sie z. B. die Kernel-Meldungen der letzten fünf Bootvorgänge sehen wollen, geben Sie Folgendes ein:
journalctl -k -b -5
bashÄndern der Journalanzeige in Journalctl
Die Anpassung der Anzeige in Journalctl ermöglicht es Benutzern, Protokolle gezielter zu durchsuchen und relevante Informationen schneller zu extrahieren. So können durch die gezielte Anzeige von Protokolldaten über einen bestimmten Zeitraum oder in Echtzeit z. B. Fehler und Probleme im System schnell erkannt werden.
Kürzen oder Erweitern der Ausgabe
Sie können individuell anpassen, wie Journalctl Daten anzeigt. Dazu lässt sich die Ausgabe entweder verkürzen oder erweitern. Journalctl zeigt den gesamten Eintrag standardmäßig im Pager an und lässt die Einträge rechts am Bildschirm auslaufen. Die Ausgabe lässt sich mit der Option --no-full
kürzen:
journalctl --no-full
bashErweitern können Sie die Anzeige dagegen dem Flag -a
:
journalctl -a
bashJournalctl auf Standardausgabe setzen
In Journalctl wird die Protokollausgabe standardmäßig durch einen Pager, z. B. less
, angezeigt. Das hat den Vorteil, dass die Ausgabe Schritt für Schritt betrachtet werden kann und es einfacher ist, durch lange Protokolldateien zu navigieren. Manchmal kann es jedoch notwendig sein, die Protokolle direkt auf der Standardausgabe anzuzeigen. Das ist wie folgt möglich:
journalctl --no-pager
bashAusgabeformate einstellen
Wenn nötig, gibt es verschiedene Optionen, um das Ausgabeformat der Protokolle in Journalctl anzupassen. Dazu kann die Option -o
mit dem jeweiligen Formatbezeichner verwendet werden. So lassen sich die Protokolleinträge z. B. in JSON ausgeben:
journalctl -b -u nginx -o json
{ "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" :
bashFolgende Formate können in Journalctl verwendet werden:
- cat: Zeigt nur das Meldungsfeld an.
- export: Dieses Binärformat eignet sich zum Übertragen oder Sichern.
- json: Standard-JSON mit einem Eintrag pro Zeile.
- json-pretty: Für eine bessere Lesbarkeit formatiertes JSON.
- json-sse: Eingehüllte JSON-formatierte Ausgabe, die das Hinzufügen von vom Server gesendeten Ereignissen ermöglicht.
- short: Standardausgabe im syslog-Stil.
- short-iso: Standardformat zum Anzeigen von ISO-8601 Wallclock-Zeitstempeln.
- short-monotonic: Standardformat mit monotonen Zeitstempeln.
- short-precise: Standardformat mit Mikrosekundengenauigkeit.
- verbose: Zeigt jedes für den jeweiligen Eintrag verfügbare Journalfeld an.
Aktive Prozessüberwachung
In der aktiven Prozessüberwachung mit Journalctl wird das Befehlszeilenprogramm tail
verwendet, um Protokolle in Echtzeit zu verfolgen und nur die letzten Einträge anzuzeigen. Dies erleichtert die Echtzeitüberwachung von Systemereignissen und die schnelle Reaktion auf auftretende Probleme.
Anzeigen aktueller Protokolle
Die Option -n
kann verwendet werden, um eine bestimmte Anzahl von Datensätzen anzuzeigen. Dabei funktioniert die Option genau wie tail -n
. Mit folgendem Befehl werden standardmäßig die letzten 10 Einträge angezeigt:
journalctl -n
bashDie Anzahl der Einträge, die Ihnen angezeigt werden, kann dabei individuell eingestellt werden, z. B. auf 20:
journalctl -n 20
bash- Flexibel: Hosting, das jedem Website-Traffic standhält
- Verlässlich: Inklusive 24/7-Support und persönlicher Beratung
- Sicher: Kostenloses SSL-Zertifikat, DDoS-Schutz und Backups