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
bash

Die 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
bash

Nach 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.
bash

Alte 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
bash

Alternativ 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
bash

Was 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.

  1. Aktueller Boot: Mit journalctl -b werden alle Protokolleinträge angezeigt, die seit dem letzten Neustart gesammelt wurden.
  2. 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.
  3. 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
bash

Filtern 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"
bash

Die Kombination der beiden Befehle kann auch einen kürzeren Zeitpunkt filtern:

journalctl --since 09:00 --until "1 hour ago"
bash

Alternativ 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"
bash

Journalctl 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
bash

Filtern 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
bash

Filtern 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
bash

Die 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
bash

Mit 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
bash

Filtern 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
bash

Alternativ 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
bash

Mit der nun bekannten ID können die Journaleinträge gefiltert werden:

journalctl _UID=33 --since today
bash

Um 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
bash

Filtern 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
bash

Kernel-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
bash

Dabei 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
bash

Erweitern können Sie die Anzeige dagegen dem Flag -a:

journalctl -a
bash

Journalctl 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
bash

Ausgabeformate 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" :
bash

Folgende 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
bash

Die Anzahl der Einträge, die Ihnen angezeigt werden, kann dabei individuell eingestellt werden, z. B. auf 20:

journalctl -n 20
bash

Webhosting auf dedizierter Hardware von IONOS!

Vertrauen Sie auf flexibel skalierbares und zuverlässiges Webhosting auf dedizierter Hardware inklusive persönlichem Berater.

Schnell
Einfach
Sicher