ubuntuusers.de

journalctl

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/terminal.png systemd verwendet standardmäßig ein zentrales Protokoll bzw. Journal, in das von journald alle Logmeldungen geschrieben werden. Zur Abfrage des Journals dient der Kommandozeilen-Befehl journalctl.

Installation

Da systemd ab Ubuntu 15.04 integraler Bestandteil des Systems ist (und dieses ohne systemd nicht lauffähig ist), sind alle benötigten Komponenten bereits installiert.

Benutzung

Die allgemeine Syntax von journalctl lautet[1]:

journalctl [OPTIONEN] 

Sind mehrere Journal-Dateien vorhanden, führt journalctl diese für die Ausgabe automatisch zusammen.

Hinweis:

Um alle Einträge des Journals zu sehen, muss der aufrufende Nutzer Mitglied der Gruppe adm oder systemd-journal sein. Ansonsten sieht man lediglich Einträge, die den eigenen Nutzer betreffen, aber keine Einträge des Systems und anderer Nutzer.

Ruft man journalctl ohne Optionen auf, so sieht man alle Einträge im Journal, die zur Zeit vom System gespeichert sind.

Bei der Anzeige wird standardmäßig der Pager less verwendet, d.h. die Ausgabe hält automatisch an, wenn die maximale Zeilenanzahl des Bildschirms erreicht ist:

  • Mit der Leertaste          blättert man eine Seite weiter,

  • mit oder zeilenweise zurück oder vor.

  • Möchte man journalctl beenden, so drückt man einfach Strg + C .

  • Alle weiteren Möglichkeiten (z.B. Suche, zurück blättern) von less sind natürlich ebenfalls möglich.

Außerdem wird die Ausgabe eingefärbt. So sind Logeinträge der Priorität "Error" rot, die der Priorität "Warning" und "Notice" weiß und die der niedrigen Prioritäten wie "Info" und "Debug" grau.

Wenn man einen anderen Pager oder auch gar keinen verwenden möchte, hat man mehrere Möglichkeiten:

  • Man filtert selbst, z.B.:

    journalctl [OPTIONEN] | cat 

    journalctl [OPTIONEN] | grep SUCHMUSTER 
  • Man verwendet die Option --no-pager.

  • Man setzt die Umgebungsvariable SYSTEMD_PAGER:

    SYSTEMD_PAGER=more journalctl [OPTIONEN] 

Jede Zeile im Log hat einen Aufbau wie im Folgenden gezeigt:

Jan 16 21:28:38 RECHNERNAME NetworkManager[706]: <info>  monitoring kernel firmware directory '/lib/firmware'.

Zum Beginn der Zeile stehen Datum und Uhrzeit, gefolgt vom Rechnernamen, dem "Identifier", dem Loglevel und der Logmeldung an sich.

journalctl kennt eine Vielzahl von Optionen, um die angezeigten Logmeldungen zu filtern:

Optionen von journalctl
Option Erklärung
-e, --pager-end Springt direkt ans Ende des Journals, d.h. die neuesten Einträge werden angezeigt.
-r, --reverse Sortiert die Logeinträge in umgekehrter Reihenfolge, d.h. die neuesten werden zuerst angezeigt.
-f, --follow Springt direkt ans Ende des Journals und zeigt neue Einträge "live" an. Der Follow-Modus kann mit Strg + C verlassen werden.
-b, --boot Zeigt alle Logeinträge seit dem letzten Booten an.
--since=DATUM Zeigt alle Logeinträge ab dem Datum DATUM an. Datum hat folgendes Format "JJJJ-MM-TT HH:MM:SS", also z.B. "2016-01-17 12:00:00".
--since=yesterday Zeigt alle Logeinträge ab 00:00:00 Uhr des Vortages an.
--until=DATUM Wie --since DATUM, nur dass Logeinträge bis zum Datum DATUM angezeigt werden.
-k, --dmesg Zeigt nur Logmeldungen des Kernels an.
-u UNITNAME, --unit UNITNAME Zeigt nur Logmeldungen der Unit UNITNAME an. Es kann ein kompletter Unitname oder ein Muster angegeben werden. So würde z.B. journalctl -u an* nur Logeinträge von Units anzeigen, deren Name mit an beginnt.
-t IDENTIFIER, --identifier IDENTIFIER Zeigt nur Logeinträge an, die den Identifier IDENTIFIER zugeordnet sind.
-p PRIORITÄT, --priority PRIORITÄT Zeigt Logeinträge bis zur Priorität PRIORITÄT an. Mögliche Werte sind: emerg, alert, crit, err, warning, notice, info und debug. Alternativ können die Prioritäten als Zahl angegeben werden. 0 entspricht emerg, 1 entspricht alert usw.
-o verbose Zeigt zu jedem Logeintrag alle verfügbaren Metadaten an. Dadurch wird die Ausgabe sehr detailliert - und sehr lang.

journalctl kennt noch eine ganze Reihe weitere Optionen. Eine vollständige Übersicht mit Erklärung über alle Optionen liefert der Aufruf von journalctl -h oder die Dokumentation 🇬🇧.

Ältere Logs abfragen

Standardmäßig ist unter Ubuntu das dauerhafte speichern des Journal aktiviert. Man sich mit journalctl auch gezielt ältere Journaldateien anzeigen lassen. Dazu dient die Option -b BOOTNUMMER bzw. --boot=BOOTNUMMER. Der neuste (=der aktuelle) Systemstart hat dabei die Nummer 0 (null), der vorherige die Nummer -1 usw.

Alle ältere Journaldateien lassen sich über den Befehl:

journalctl --list-boots 

anzeigen.

Logs benutzerabhängig abfragen

Gibt es zusätzlich zur Journal-Datei des Systems zusätzlich eine Journal-Datei pro Benutzer, kann man die Einträge der eigenen Logdatei über die Option --user abrufen.

Beispiele

Gefiltert nach Priorität

Verwendung der Option -p.

Alle Meldungen mit Kennzeichnung error, critical, alert oder emergency anzeigen:

journalctl -p err -b 

Gefiltert nach Unit

Verwendung der Option -u.

Es ist erlaubt mehrere Units gleichzeitig anzugeben:

journalctl -u home.mount -u networking.service 

Um eine Unit live zu verfolgen:

journalctl -f -u apache 

Gefiltert nach Datum

Verwendung der Optionen --since und --until.

Dabei ist die Verwendung absoluter Zeiten im YYYY-MM-DD HH:MM:SS-Format erlaubt, als auch Wörter wie yesterday, 1 hour ago etc. Eine Übersicht findet sich in der Manpage von systemd.time. Der --until-Parameter ist optional.

journalctl --since "2023-07-01" --until "2 minutes ago" 

Problembehebung

Logmeldungen mit einem Live-/Rettungssystem auslesen

Falls im fraglichen (z.B. defekten) System die persistente Speicherung für das Journal aktiviert war , können die Logs von außen mit einem Live- oder Rettungssystem mit strings und egrep ausgelesen werden. Alternativ kann man journalctl der Option -D oder --directory= den Pfad zur Journaldatei angeben. Wenn man z.B. die Festplatte eines defekten Systems unter /mnt/hd1/ eingebunden hat und dort die Logdatei an normaler Stelle liegt, sollte man dieses mit

journalctl -D /mnt/hd1/var/log/journal/UUID_DES_VERZEICHNISSES/ 

betrachten können.

Logdaten belegen zu viel Speicherplatz

Wenn sich zu viele Logdaten ansammeln und die /-Partition "vollläuft", droht die Gefahr, dass das System dann nicht mehr startet.

Den von den Journalen belegten Speicherplatz zeigt dieser Befehl an:

journalctl --disk-usage 

Beispielhafte Ausgabe:

Archived and active journals take up 168.0M in the file system.

Man kann dann den aktuell belegten Speicherplatz teilweise durch Löschen von Journale wieder freigeben, das ist nach Zeit oder Größe steuerbar:

  • Der Befehl

    sudo journalctl --vacuum-time 90d 

    löscht alles, was mehr als die angegebene Dauer (im Beispiel 90 Tage) zurück liegt.

  • Der Befehl

    sudo journalctl --vacuum-size 100M 

    löscht, angefangen von den ältesten Einträgen, alles bis nur noch die angegebenen Menge (im Beispiel 100MB) an Journalen verbleibt.

Die beiden Angaben darf man auch kombinieren und es sind auch die üblichen anderen Maßeinheiten verwendbar.

Für eine dauerhafte Größenbegrenzung siehe systemd/journald (Abschnitt „Konfiguration“).

  • Dokumentation 🇬🇧 des systemd-Journals

  • Erklärung 🇬🇧, welche Metadaten im systemd-Journal mit gespeichert werden

Diese Revision wurde am 29. September 2024 10:23 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System, systemd