Zum Inhalt springen

Journalctl: Unterschied zwischen den Versionen

Aus Foxwiki
KKeine Bearbeitungszusammenfassung
 
(122 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''journalctl''' - Abfragen des Systemd-Journals
'''journalctl''' - Abfragen des Systemd-Journals


= Syntax =
== Beschreibung ==
journalctl [OPTIONEN…] [ÜBEREINSTIMMUNGEN…]
[[journalctl]] dient der Abfrage von Inhalten des Journals von [[Systemd]] wie von [[Systemd/Journald | Journald]] geschrieben


= Anwendungen =
; [[systemd]] bringt ein eigenes Logging-Framework namens [[journald]] mit
== Ohne Argumente ==
* Dass die Log-Dateien binär gespeichert werden, um sie länger und fälschungssicher – so zumindest der Anspruch der systemd-Entwickler – speichern zu können, ist jedoch ein großer Kritikpunkt der Linux-Community
alle gesammelten Protokolle ungefiltert angezeigen
* Allerdings hat [[journald]] Charme und bringt außer der Umgewöhnung auch einige Vorteile mit, wie beispielsweise, dass Fehler in den Log-Dateien in Rot markiert werden und so eher auffallen
journalctl


== Systemd-Unit angeben ==
; Journal abfragen
journalctl -u apache2.service
Mit dem Wechsel von herkömmlichen init-Skripten zu <code>systemd</code> wurde ein eigenes Protokolliersystem eingeführt, das als ''Journal'' bezeichnet wird
* Alle Systemereignisse werden in das Journal geschrieben, sodass kein <code>syslog</code>-basierter Service ausgeführt werden muss


== Treffer angeben ==
Das Journal selbst ist ein Systemservice und wird mit <code>systemd</code> verwaltet
Einträge, bei denen ein Feld auf den Ausdruck passt, anzeigen
* Die vollständige Bezeichnung des Service lautet <code>systemd-journald.service</code>
journalctl _SYSTEMD_UNIT=avahi-daemon.service
* Hier werden Protokolldaten in strukturierten, indizierten Journalen erfasst und gespeichert
  journalctl _SYSTEMD_CGROUP=/user.slice/user-42.slice/session-c1.scope
* Die Daten basieren dabei auf den Protokollinformationen aus dem Kernel, von den Benutzerprozessen, aus der Standardeingabe und aus den Fehlern von Systemdiensten
 
; Der Dienst systemd-journald ist standardmäßig aktiviert
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo systemctl status systemd-journald
</syntaxhighlight>
<syntaxhighlight lang="bash" highlight="" line>
systemd-journald.service - Journal Service
Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)
Active: active (running) since Mon 2014-05-26 08:36:59 EDT; 3 days ago
  Docs: man:systemd-journald.service(8)
  man:journald.conf(5)
Main PID: 413 (systemd-journal)
Status: "Processing requests..."
CGroup: /system.slice/systemd-journald.service
  └─413 /usr/lib/systemd/systemd-journald
[...]
</syntaxhighlight>
 
== Installation ==
<syntaxhighlight lang="bash" highlight="1" line copy>
</syntaxhighlight>
 
== Aufruf ==
<syntaxhighlight lang="bash" highlight="1" line copy>
</syntaxhighlight>
 
=== Optionen ===
Häufig verwendete, nützliche Optionen, mit denen Sie das Standardverhalten von <code>journalctl</code> optimieren
* Alle Schalter sind auf der man-Seite zu <code>journalctl</code> (<code>man 1 journalctl</code>) beschrieben
 
{| class="wikitable sortable options big"
|-
! Option !! Beschreibung
|-
| -f || Zeigt lediglich die jüngsten Protokollmeldungen an und gibt neue Protokolleinträge aus, sobald sie zum Journal hinzugefügt werden
 
|-
| -e || Gibt die Meldungen aus und springt an das Ende des Journals, sodass im Pager die aktuellen Einträge sichtbar sind
 
|-
| -r || Gibt die Meldungen des Journals in umgekehrter Reihenfolge aus (die jüngsten Einträge zuerst)
 
|-
| -k || Zeigt nur Kernel-Meldungen an
* Dies entspricht der Feldzuordnung <code>_TRANSPORT=kernel</code> (siehe [https://documentation.suse.com/de-de/sles/12-SP5/html/SLES-all/cha-journalctl.html#journalctl-filtering-fields Abschnitt 15.3.3, „Filtern nach Feldern“])
|-
| -u || Zeigt nur Meldungen für die angegebene <code>systemd</code>-Einheit an
* Dies entspricht der Feldzuordnung <code>_SYSTEMD_UNIT=''UNIT''
# journalctl -u apache2
[...] Jun 03 10:07:11 pinkiepie systemd[1]: Starting The Apache Webserver.
Jun 03 10:07:12 pinkiepie systemd[1]: Started The Apache Webserver
|}
 
; Tipp: Meldungen für eine bestimmte ausführbare Datei
Sollen alle Journaleinträge für eine bestimmte ausführbare Datei angezeigt werden, geben Sie den vollständigen Pfad zu dieser Datei an
 
  journalctl /usr/lib/systemd/systemd
 
=== Parameter ===
=== Umgebungsvariablen ===
=== Exit-Status ===
{| class="wikitable options col1center big"
|-
! Wert !! Beschreibung
|-
| 0 || Erfolg
|-
| >0  || Fehler
|}
 
== Anwendung ==
<syntaxhighlight lang="bash" highlight="1" line copy>
</syntaxhighlight>
 
Rufen Sie beispielsweise journalctl ohne weitere Parameter auf, bekommen Sie einen interaktiven Auszug aller Log-Dateien, so wie sie früher in /var/log/syslog oder /var/log/messages
landeten
* Hier können Sie auch durch Eingabe eines großen »F« in den Follow-Modus wechseln
* Mit dem Parameter -f oder --follow wird Ihnen das Log analog zu einem tail -f angezeigt
* Wenn Sie die letzten 20 Log-Einträge anschauen wollen, benutzen Sie -n 20 oder --lines=20
* Der Parameter --reverse zeigt die Einträge in umgekehrter Reihenfolge an
 
Einträge eines bestimmten Zeitraums grenzen Sie durch --since und --until ein
* Dabei wird ein Datum in der Form "2018-07-30 18:17:16" ausgewertet
* Ohne Datum wird der heutige Tag angenommen, ohne Sekunden wird 0 (null) angenommen, Sonderausdrücke wie yesterday, today, tomorrow oder now sind möglich
 
Einer der wichtigsten Parameter ist -u oder --unit=, womit nur die Log-Dateien einer einzelnen Unit oder eines Satzes an Units ausgegeben werden
 
; Log-Auszug des SSH-Daemons
Log-Einträge des SSH-Daemons vom 5.&nbsp;Juni 2023 zwischen 13:00 Uhr und 14:00 Uhr
 
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo journalctl --since="2023-06-05 13:00" --until="2023-06-05 14:00" --unit=sshd.service
</syntaxhighlight>
<syntaxhighlight lang="bash" highlight="" line>
-- Logs begin at Mo 2023-06-05 07:19:24 CEST, end at Mo 2023-06-05 15:56:51 CEST. --
Jun 05 13:07:24 centos sshd[13128]: reverse mapping checking getaddrinfo for \
1-2-3-4.a.b [1.2.3.4] failed - POSSIBLE BREAK-IN ATTEMPT!
Jun 05 13:07:24 centos sshd[13130]: reverse mapping checking getaddrinfo for \
1-2-3-4.a.b [1.2.3.4] failed - POSSIBLE BREAK-IN ATTEMPT!
Jun 05 13:07:24 centos sshd[13128]: Connection closed by 1.2.3.4 [preauth]
Jun 05 13:07:24 centos sshd[13130]: Connection closed by 1.2.3.4 [preauth]
</syntaxhighlight>
 
Die Logs von [[journald]] werden nach einem Neustart gelöscht
* Wenn Sie das nicht wollen, sollten Sie das Verzeichnis /var/log/journal anlegen und das Signal SIGUSR1 an den journald-Prozess senden
* Damit werden die Logs in dem angegebenen Verzeichnis persistiert, sodass sie maximal zehn Prozent der Größe des Dateisystems belegen
* Weitere Konfigurationen nehmen Sie in der Datei /etc/systemd/journald.conf vor
 
=== Filtern der Journalausgabe ===
Wenn Sie <code>journalctl</code> ohne Schalter aufrufen, wird der gesamte Inhalt des Journals angezeigt (die ältesten Einträge an erster Stelle)
* Die Ausgabe kann mit bestimmten Schaltern und Feldern gefiltert werden
 
==== Filtern nach Bootnummer ====
[[journalctl]] kann die Meldungen nach einem bestimmten System-Bootvorgang filtern
* Zum Anzeigen einer Liste mit allen verfügbaren Bootvorgängen führen Sie Folgendes aus
 
journalctl --list-boots -1
0 97ed2cd99124a2391d2cffab1b566f0 Mon 2014-05-26 08:36:56 EDT—Fri 2014-05-30 05:33:44 EDT
1 56019a44a774a0bb0148a92df4af81b Fri 2014-05-30 05:34:09 EDT—Fri 2014-05-30 06:15:01 EDT
 
* Die erste Spalte enthält den Boot-Offset: <code>0</code> für den aktuellen Bootvorgang, <code>-1</code> für den vorangegangenen Bootvorgang, <code>-2</code> für den davor erfolgten Bootvorgang usw
* Die zweite Spalte zeigt die Boot-ID, gefolgt von den Zeitstempeln für Beginn und Ende des Zeitraums, über den das System nach dem Bootvorgang aktiv war
 
; Alle Meldungen für den aktuellen Bootvorgang anzeigen
journalctl -b
 
Wenn Sie die Journalmeldungen für den vorangegangenen Bootvorgang abrufen möchten, hängen Sie einen Offset-Parameter an
 
Im folgenden Beispiel werden die Meldungen für den vorangegangenen Bootvorgang ausgegeben
journalctl -b -1
 
Alternativ können Sie die Bootmeldungen nach der Boot-ID auflisten
 
Verwenden Sie hierzu das Feld _BOOT_ID
journalctl _BOOT_ID=156019a44a774a0bb0148a92df4af81b
 
==== Filtern nach Zeitraum ====
Sie können die Ausgabe von <code>journalctl</code> durch Angabe des Start- oder Enddatums filtern
* Für Datumsangaben gilt das Format „2014-06-30 9:17:16“
* Wenn Sie keine Uhrzeit angeben, wird Mitternacht (0:00 Uhr) angenommen
* Wenn die Sekundenangabe fehlt, wird „:00“ angenommen
* Wenn Sie kein Datum angeben, wird das aktuelle Datum angenommen
* Statt eines numerischen Ausdrucks können Sie die Schlüsselwörter „gestern“, „heute“ oder „morgen“ angeben
* Diese Wörter bezeichnen Mitternacht am Tag vor dem aktuellen Tag, am aktuellen Tag bzw
* am Tag nach dem aktuellen Tag
* Das Schlüsselwort „now“ (jetzt) verweist auf die aktuelle Uhrzeit am heutigen Tag
* Auch relative Zeitangaben mit dem Präfix <code>-</code> oder <code>+</code> sind möglich
* Diese Zeitangaben verweisen dann entsprechend auf eine Uhrzeit vor oder nach der aktuellen Uhrzeit
 
Nur neue Meldungen ab jetzt anzeigen und Ausgabe entsprechend aktualisieren
journalctl --since "now" -f


== Felder vergleichen ==
Alle Meldungen ab der letzten Mitternacht bis 3:20 Uhr anzeigen
Falls zwei verschiedene Felder verglichen werden, werden nur Einträge, die auf beide Ausdrücke gleichzeitig passen, angezeigt:
  journalctl --since "today" --until "3:20"
  journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097


Falls sich zwei Treffer auf das gleiche Feld beziehen, werden alle Einträge, die auf einer der zwei Ausdrücke passen, angezeigt:
==== Filtern nach Feldern ====
journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service
Sie können die Ausgabe des Journals nach bestimmten Feldern filtern
* Die Syntax für ein abzugleichendes Feld lautet <code>FELDNAME=FILTERKRITERIUM</code>, beispielsweise <code>_SYSTEMD_UNIT=httpd.service</code>
* Wenn Sie mehrere Filterkriterien in einer einzigen Abfrage angeben, werden die Ausgabemeldungen noch stärker gefiltert
* Eine Liste der Standardfelder finden Sie auf der man-Seite <code>man 7 systemd.journal-fields</code>


Falls der Trenner »+« verwandt wird, können zwei Ausdrücke mit einem logischen ODER verbunden werden.
; Meldungen anzeigen, die von einer bestimmten Prozess-ID erzeugt wurden


Folgendes Beispiel wird alle Nachrichten vom Avahi-Diensteprozess mit der PID 28097 sowie alle Nachrichten vom D-Bus-Dienst (von einem beliebigen Prozess)
  journalctl _PID=1039
anzeigen:
  journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097 + _SYSTEMD_UNIT=dbus.service


Um alle Felder, die von und über die Unit ausgegeben werden, anzuzeigen, sollte die Option -u/--unit= verwandt werden.
; Meldungen anzeigen, die zu einer bestimmten Benutzer-ID gehören


journalctl -u name expandiert zu einem komplexen Filter ähnlich zu
journalctl _UID=1000
    _SYSTEMD_UNIT=Name.service
      + UNIT=Name.service _PID=1
      + OBJECT_SYSTEMD_UNIT=Name.service _UID=0
      + COREDUMP_UNIT=Name.service _UID=0 MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1


(siehe systemd.journal-fields(5) für eine Erklärung dieser Muster).
; Meldungen aus dem Kernel-Ring-Puffer anzeigen (entspricht der Ausgabe von <code>dmesg</code>)


Zeigt alle Protokolle, die vom D-Bus-Programm erzeugt wurden:
journalctl _TRANSPORT=kernel


    journalctl /usr/bin/dbus-daemon
; Meldungen aus der Standard- oder Fehlerausgabe des Services anzeigen


Zeigt alle Kernelprotokolle vom vorherigen Systemstart:
journalctl _TRANSPORT=stdout


    journalctl -k -b -1
; Nur Meldungen anzeigen, die von einem bestimmten Service erzeugt wurden


Zeigt eine Live-Protokollanzeige von einem Systemdienst apache.service:
journalctl _SYSTEMD_UNIT=avahi-daemon.service


    journalctl -f -u apache
; Wenn Sie zwei verschiedene Felder angeben, werden nur solche Einträge zurückgegeben, die beide Ausdrücke gleichzeitig erfüllen


= Beschreibung =
journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1488
* journalctl kann zur Abfrage der Inhalte des Journals von systemd(1) wie von systemd-journald.service(8) geschrieben benutzt werden.
* Beim Aufruf ohne Parameter wird der gesamte Inhalt des Journals angezeigt, beginnend mit dem ältesten gesammelten Eintrag.
* Falls ein oder mehrere Übereinstimmungsparameter übergeben werden, wird die Ausgabe entsprechend gefiltert.
** Eine Übereinstimmung ist in der Form »FELD=Wert«, z.B. »_SYSTEMD_UNIT=httpd.service«, was sich auf strukturierte Journal-Einträge bezieht.
** Siehe systemd.journal-fields(7) für eine Liste von gut bekannten Feldern.
** Falls mehrere Übereinstimmungen, die verschiedene Übereinstimmungsfelder festlegen, übergeben werden, werden die Protokolleinträge entsprechend aller Felder gefiltert, d.h. die resultierende
Ausgabe wird nur Einträge zeigen, die mit allen angegebenen Übereinstimmungen dieser Art übereinstimmen.
* Falls zwei Übereinstimmungen auf das gleiche Feld angewandt werden, dann werden sie automatisch als Alternativen auf Übereinstimmung geprüft, d.h. die
resultierende Ausgabe wird Einträge zeigen, die mit jeder der angegebenen Übereinstimmungen für das gleiche Feld übereinstimmen.
* Schließlich darf das Zeichen »+« als separates Wort zwischen anderen Ausdrücken auf der Befehlszeile erscheinen.
* Dies führt dazu, dass alle Übereinstimmungen davor und danach als Disjunktion (d.h. als logisches ODER) verknüpft werden.


* Es ist auch möglich, die Einträge durch Angabe eines absoluten Dateipfads zu filtern.
; Wenn Sie zwei Kriterien für dasselbe Feld angeben, werden alle Einträge zurückgegeben, die einen dieser Ausdrücke erfüllen
** Der Dateipfad kann eine Datei oder ein symbolischer Link sein und die Datei muss zum Zeitpunkt der Abfrage existieren.
** Falls sich der Dateipfad auf ein ausführbares Programm bezieht, wird eine »_EXE=«-Übereinstimmung für den kanonisierten Programmpfad zu der Abfrage hinzugefügt.
** Falls sich ein Dateipfad auf ein ausführbares Skript bezieht, wird eine »_COMM=«-Übereinstimmung für den Skriptpfad zu der Abfrage hinzugefügt.
** Falls ein Dateipfad sich auf einen Geräteknoten bezieht, wird eine »_KERNEL_DEVICE=«-Übereinstimmung für den Kernelnamen des Gerätes und für jeden seiner Nachkommensgeräte zu der Abfrage hinzugefügt.


* Symbolische Links werden dereferenziert
journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service
** Kernelnamen werden synthetisiert und Elterngeräte werden zum Zeitpunkt der Abfrage identifiziert.  
** Im Allgemeinen ist ein Geräteknoten der beste Proxy für ein tatsächliches Gerät, da Protokolleinträge normalerweise keine Felder enthalten, die tatsächliche Geräte identifizieren.
** Damit die resultierenden Protokolleinträge für das tatsächliche Gerät korrekt sind, muss der relevante Teil der Umgebung zum Zeitpunkt der Protokollierung des Eintrags, insbesondere das dem Geräteknoten entsprechende tatsächliche Gerät, identisch zum Zeitpunkt der Abfrage sein.
** Da Geräteknoten im Allgemeinen nach Systemneustarts ihre entsprechenden Geräte ändern, führt die Angabe von Geräteknotenpfaden dazu, dass die resultierenden Einträge auf solche des aktuellen Systemstarts begrenzt sind.


Mit den Optionen --boot, --unit= usw. können zusätzliche Einschränkungen hinzugefügt werden, um weiter einzuschränken, welche Einträge angezeigt werden (logisches UND).
; Mit dem Begrenzungszeichen „+“ verbinden Sie zwei Ausdrücke mit einem logischen „OR“
* Im folgenden Beispiel werden alle Meldungen aus dem Avahi-Service mit der Prozess-ID 1480 zusammen mit allen Meldungen vom D-Bus-Service gezeigt


Die Ausgabe wird aus allen zugreifbaren Quellen verschachtelt, unabhängig davon, ob sie rotiert oder momentan geschrieben werden und unabhängig davon, ob sie zu dem System selbst gehören oder zugreifbare Benutzer-Journale sind.
journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1480 + _SYSTEMD_UNIT=dbus.service


Die Gruppe der verwandten Journal-Dateien kann mit den Optionen --user, --system, --directory und --file verändert werden, siehe unten.
==== Filtern nach Kritikalität ====
Sie können journalctl nach Kritikalität filtern, indem Sie die Option -p mit einer Prioritätsstufe verwenden, wie z. B. err für Fehler, crit für kritisch oder alert für Alarm. Diese Option zeigt nur Einträge mit der angegebenen Priorität oder höher an. Die Prioritäten reichen von 0: emerg bis 7: debug, wobei niedrigere Nummern eine höhere Kritikalität bedeuten.  


Allen Benutzern wird Zugriff auf ihre privaten benutzerbezogenen Journale gewährt. Standardmäßig wird allerdings nur Root und Benutzern, die Mitglied ein paar besonderer Gruppen sind, der Zugriff auf das System-Journal und die Journale der anderen Benutzer
; Fehler und höher anzeigen
gewährt. Mitglieder der Gruppen »systemd-journal«, »adm« und »wheel« können alle Journal-Dateien lesen. Beachten Sie, dass die zwei letzten Gruppen traditionell über zusätzliche, von der Distribution festgelegte Privilegien verfügen. Mitglieder der Gruppe
journalctl -p err
»wheel« können oft zusätzliche administrative Aufgaben durchführen.


Die Ausgabe wird standardmäßig seitenweise durch less geleitet und lange Zeilen werden auf Bildschirmbreite »abgeschnitten«. Der versteckte Anteil kann mittels der Pfeil-links- und Pfeil-rechts-Tasten betrachtet werden. Seitenweise Anzeige kann deaktiviert
; Nur kritische Nachrichten anzeigen (und höher)
werden; siehe die Option --no-pager und den Abschnitt »Umgebungsvariablen« unten.
journalctl -p crit


Erfolgt die Ausgabe auf ein TTY, werden die Zeilen entsprechend der Priorität eingefärbt: Zeilen der Stufe ERROR und höher werden rot eingefärbt; Zeilen der Stufe NOTICE und höher werden hervorgehoben; Zeilen der Stufe DEBUG werden in leichtem Grau
; Alle Meldungen ab „error“ im aktuellen Boot-Vorgang anzeigen
eingefärbt; andere Zeilen werden normal dargestellt.
journalctl -p err -b


= EXIT-STATUS =
; Prioritätsstufen (von kritisch zu unwichtig):
Im Erfolgsfall wird 0 zurückgeliefert; andernfalls wird ein von Null verschiedener Code zurückgeliefert.
    emerg  (0: Notfall)
    alert  (1: Alarm)
    crit    (2: kritisch)
    err    (3: Fehler)
    warning (4: Warnung)
    notice  (5: Hinweis)
    info    (6: Information)
    debug  (7: Fehlersuche)


= Umgebungsvariablen =
=== Untersuchen von Fehlern ===
$SYSTEMD_PAGER
In diesem Abschnitt wird an einem einfachen Beispiel erläutert, wie Sie die Fehler auffinden und beheben, die <code>systemd</code> beim Starten von <code>apache2</code> meldet
    Zu verwendendes Textanzeigeprogramm, wenn --no-pager nicht angegeben ist; setzt $PAGER außer Kraft. Falls weder $SYSTEMD_PAGER noch $PAGER gesetzt sind, wird eine Reihe wohlbekannter Textanzeigeprogrammimplementierungen der Reihe nach ausprobiert,
    einschließlich less(1) und more(1), bis eines gefunden wird. Falls keine Textanzeigeprogrammimplementierung gefunden wird, wird keines aufgerufen. Setzen der Umgebungsvariablen auf die leere Zeichenkette oder den Wert »cat« ist äquivalent zur Übergabe
    von --no-pager.


$SYSTEMD_LESS
Versuchen Sie, den apache2-Service zu starten
    Setzt die an less übergebenen Optionen (standardmäßig »FRSXMK«) außer Kraft.
systemctl start apache2


    Benutzer könnten insbesondere zwei Optionen ändern wollen:
Job for apache2.service failed
See 'systemctl status apache2' and 'journalctl -xn' for details


    K
Prüfen Sie den Status dieses Service
  Diese Option weist das Textanzeigeprogramm an, sich sofort beim Druck von Strg-C zu beenden. Um less die Handhabung von Strg-C selbst zum Umschalten auf die Eingabeaufforderung zu erlauben, setzen Sie diese Option zurück.
  systemctl status apache2 apache2.service - The Apache Webserver
Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled)
Active: failed (Result: exit-code) since Tue 2014-06-03 11:08:13 CEST; 7min ago
Process: 11026 ExecStop=/usr/sbin/start_apache2 -D SYSTEMD -DFOREGROUND \
  -k graceful-stop (code=exited, status=1/FAILURE)* Die ID des Prozesses, der den Fehler verursacht, lautet 11026


Falls der Wert von $SYSTEMD_LESS kein »K« enthält und less das aufgerufene Textanzeigeprogramm ist, wird Strg+C durch das Programm ignoriert und muss durch das Textanzeigeprogramm selbst gehandhabt werden.
Rufen Sie die ausführliche Version der Meldungen zur Prozess-ID 11026 ab


    X
journalctl -o verbose _PID=11026
  Diese Option weist das Textanzeigeprogramm an, keine Termcap-Initialisierungs- und -Deinitalisierungszeichenketten an das Terminal zu senden. Dies ist standardmäßig gesetzt, damit die Darstellung von Befehlen selbst nach dem Beenden des
  [...] MESSAGE=AH00526: Syntax error on line 6 of /etc/apache2/default-server.conf
  Textanzeigeprogramms sichtbar bleibt. Allerdings stehen dadurch einige Funktionen des Textanzeigeprogramms nicht zur Verfügung; insbesondere ist das Scrollen in der Ausgabe mit der Maus nicht möglich.
  [...] MESSAGE=Invalid command 'DocumenttRoot', perhaps misspelled or defined by a module [...]


    Siehe less(1) für weitere Ausführungen.
Korrigieren Sie den Schreibfehler in <code>/etc/apache2/default-server.conf</code>, starten Sie den apache2-Service, und lassen Sie den Status ausgeben
systemctl start apache2 && systemctl status apache2 apache2.service - The Apache Webserver
Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled)
Active: active (running) since Tue 2014-06-03 11:26:24 CEST; 4ms ago
Process: 11026 ExecStop=/usr/sbin/start_apache2 -D SYSTEMD -DFOREGROUND
  -k graceful-stop (code=exited, status=1/FAILURE)
Main PID: 11263 (httpd2-prefork)
Status: "Processing requests..."
CGroup: /system.slice/apache2.service
  ├─11263 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
  ├─11280 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
  ├─11281 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
  ├─11282 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
  ├─11283 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
  └─11285 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]


$SYSTEMD_LESSCHARSET
== Anhang ==
    Setzt den an less zu übergebenden Zeichensatz (standardmäßig »utf-8«, falls das aufrufende Terminal als UTF-8-kompatibel erkannt wurde) außer Kraft.
=== Siehe auch ===
<div style="column-count:2">
<categorytree hideroot=on mode="pages">{{BASEPAGENAME}}</categorytree>
</div>
----
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}


$SYSTEMD_COLORS
=== Dokumentation ===
    Dies muss ein logischer Wert sein. Er steuert, ob farbige Ausgabe erstellt werden soll. Dies kann angegeben werden, um die Entscheidung, die systemd basierend auf $TERM und der Art der angebundenen Konsole trifft, außer Kraft zu setzen.
; Man-Page
# [https://manpages.debian.org/trixie/manpages-de/journalctl.1.de.html journalctl(1)]
<!--
; Info-Pages
-->


$SYSTEMD_URLIFY
=== Links ===
    Dies muss ein logischer Wert sein. Er steuert, ob anklickbare Links für Terminal-Emulatoren, die dies unterstützen, erstellt werden sollen. Dies kann angegeben werden, um die Entscheidung, die systemd basierend auf $TERM und anderen Bedingungen trifft,
==== Projekt ====
    außer Kraft zu setzen.
==== Weblinks ====
# https://documentation.suse.com/de-de/sles/12-SP5/html/SLES-all/cha-journalctl.html


= Links =
{{DEFAULTSORT:journalctl}}
== Man-Pages ==
{{DISPLAYTITLE:journalctl}}
# systemd(1)
# systemd-journald.service(8)
# systemctl(1)
# coredumpctl(1)
# systemd.journal-fields(7)
# journald.conf(5)
# systemd.time(7)
# systemd-journal-remote.service(8)
# systemd-journal-upload.service(8)


== Anmerkungen ==
[[Kategorie:Systemd]]
# Journal-Exportformat (https://www.freedesktop.org/wiki/Software/systemd/export)
[[Kategorie:Journald]]
# Journal-JSON-Format (https://www.freedesktop.org/wiki/Software/systemd/json)
</noinclude>
# Server-gesandte Ereignisse (https://developer.mozilla.org/de/docs/Web/API/Server-sent_events/Using_server-sent_events)
# JavaScript-Objektnotation (JSON) Textsequenzen (https://tools.ietf.org/html/rfc7464)
# Entwicklerdokumentation für den Nachrichtenkatalog (https://www.freedesktop.org/wiki/Software/systemd/catalog)

Aktuelle Version vom 31. Oktober 2025, 05:04 Uhr

journalctl - Abfragen des Systemd-Journals

Beschreibung

journalctl dient der Abfrage von Inhalten des Journals von Systemd wie von Journald geschrieben

systemd bringt ein eigenes Logging-Framework namens journald mit
  • Dass die Log-Dateien binär gespeichert werden, um sie länger und fälschungssicher – so zumindest der Anspruch der systemd-Entwickler – speichern zu können, ist jedoch ein großer Kritikpunkt der Linux-Community
  • Allerdings hat journald Charme und bringt außer der Umgewöhnung auch einige Vorteile mit, wie beispielsweise, dass Fehler in den Log-Dateien in Rot markiert werden und so eher auffallen
Journal abfragen

Mit dem Wechsel von herkömmlichen init-Skripten zu systemd wurde ein eigenes Protokolliersystem eingeführt, das als Journal bezeichnet wird

  • Alle Systemereignisse werden in das Journal geschrieben, sodass kein syslog-basierter Service ausgeführt werden muss

Das Journal selbst ist ein Systemservice und wird mit systemd verwaltet

  • Die vollständige Bezeichnung des Service lautet systemd-journald.service
  • Hier werden Protokolldaten in strukturierten, indizierten Journalen erfasst und gespeichert
  • Die Daten basieren dabei auf den Protokollinformationen aus dem Kernel, von den Benutzerprozessen, aus der Standardeingabe und aus den Fehlern von Systemdiensten
Der Dienst systemd-journald ist standardmäßig aktiviert
sudo systemctl status systemd-journald
 systemd-journald.service - Journal Service
 Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)
 Active: active (running) since Mon 2014-05-26 08:36:59 EDT; 3 days ago
  Docs: man:systemd-journald.service(8)
   man:journald.conf(5)
 Main PID: 413 (systemd-journal)
 Status: "Processing requests..."
 CGroup: /system.slice/systemd-journald.service
   └─413 /usr/lib/systemd/systemd-journald
 [...]

Installation

Aufruf

Optionen

Häufig verwendete, nützliche Optionen, mit denen Sie das Standardverhalten von journalctl optimieren

  • Alle Schalter sind auf der man-Seite zu journalctl (man 1 journalctl) beschrieben
Option Beschreibung
-f Zeigt lediglich die jüngsten Protokollmeldungen an und gibt neue Protokolleinträge aus, sobald sie zum Journal hinzugefügt werden
-e Gibt die Meldungen aus und springt an das Ende des Journals, sodass im Pager die aktuellen Einträge sichtbar sind
-r Gibt die Meldungen des Journals in umgekehrter Reihenfolge aus (die jüngsten Einträge zuerst)
-k Zeigt nur Kernel-Meldungen an
-u Zeigt nur Meldungen für die angegebene systemd-Einheit an
  • Dies entspricht der Feldzuordnung _SYSTEMD_UNIT=UNIT
# journalctl -u apache2
[...] Jun 03 10:07:11 pinkiepie systemd[1]: Starting The Apache Webserver.
Jun 03 10:07:12 pinkiepie systemd[1]: Started The Apache Webserver
Tipp
Meldungen für eine bestimmte ausführbare Datei

Sollen alle Journaleinträge für eine bestimmte ausführbare Datei angezeigt werden, geben Sie den vollständigen Pfad zu dieser Datei an

journalctl /usr/lib/systemd/systemd

Parameter

Umgebungsvariablen

Exit-Status

Wert Beschreibung
0 Erfolg
>0 Fehler

Anwendung

Rufen Sie beispielsweise journalctl ohne weitere Parameter auf, bekommen Sie einen interaktiven Auszug aller Log-Dateien, so wie sie früher in /var/log/syslog oder /var/log/messages landeten

  • Hier können Sie auch durch Eingabe eines großen »F« in den Follow-Modus wechseln
  • Mit dem Parameter -f oder --follow wird Ihnen das Log analog zu einem tail -f angezeigt
  • Wenn Sie die letzten 20 Log-Einträge anschauen wollen, benutzen Sie -n 20 oder --lines=20
  • Der Parameter --reverse zeigt die Einträge in umgekehrter Reihenfolge an

Einträge eines bestimmten Zeitraums grenzen Sie durch --since und --until ein

  • Dabei wird ein Datum in der Form "2018-07-30 18:17:16" ausgewertet
  • Ohne Datum wird der heutige Tag angenommen, ohne Sekunden wird 0 (null) angenommen, Sonderausdrücke wie yesterday, today, tomorrow oder now sind möglich

Einer der wichtigsten Parameter ist -u oder --unit=, womit nur die Log-Dateien einer einzelnen Unit oder eines Satzes an Units ausgegeben werden

Log-Auszug des SSH-Daemons

Log-Einträge des SSH-Daemons vom 5. Juni 2023 zwischen 13:00 Uhr und 14:00 Uhr

sudo journalctl --since="2023-06-05 13:00" --until="2023-06-05 14:00" --unit=sshd.service
-- Logs begin at Mo 2023-06-05 07:19:24 CEST, end at Mo 2023-06-05 15:56:51 CEST. --
Jun 05 13:07:24 centos sshd[13128]: reverse mapping checking getaddrinfo for \
1-2-3-4.a.b [1.2.3.4] failed - POSSIBLE BREAK-IN ATTEMPT!
Jun 05 13:07:24 centos sshd[13130]: reverse mapping checking getaddrinfo for \
1-2-3-4.a.b [1.2.3.4] failed - POSSIBLE BREAK-IN ATTEMPT!
Jun 05 13:07:24 centos sshd[13128]: Connection closed by 1.2.3.4 [preauth]
Jun 05 13:07:24 centos sshd[13130]: Connection closed by 1.2.3.4 [preauth]

Die Logs von journald werden nach einem Neustart gelöscht

  • Wenn Sie das nicht wollen, sollten Sie das Verzeichnis /var/log/journal anlegen und das Signal SIGUSR1 an den journald-Prozess senden
  • Damit werden die Logs in dem angegebenen Verzeichnis persistiert, sodass sie maximal zehn Prozent der Größe des Dateisystems belegen
  • Weitere Konfigurationen nehmen Sie in der Datei /etc/systemd/journald.conf vor

Filtern der Journalausgabe

Wenn Sie journalctl ohne Schalter aufrufen, wird der gesamte Inhalt des Journals angezeigt (die ältesten Einträge an erster Stelle)

  • Die Ausgabe kann mit bestimmten Schaltern und Feldern gefiltert werden

Filtern nach Bootnummer

journalctl kann die Meldungen nach einem bestimmten System-Bootvorgang filtern

  • Zum Anzeigen einer Liste mit allen verfügbaren Bootvorgängen führen Sie Folgendes aus
journalctl --list-boots -1 
0 97ed2cd99124a2391d2cffab1b566f0 Mon 2014-05-26 08:36:56 EDT—Fri 2014-05-30 05:33:44 EDT
1 56019a44a774a0bb0148a92df4af81b Fri 2014-05-30 05:34:09 EDT—Fri 2014-05-30 06:15:01 EDT
  • Die erste Spalte enthält den Boot-Offset: 0 für den aktuellen Bootvorgang, -1 für den vorangegangenen Bootvorgang, -2 für den davor erfolgten Bootvorgang usw
  • Die zweite Spalte zeigt die Boot-ID, gefolgt von den Zeitstempeln für Beginn und Ende des Zeitraums, über den das System nach dem Bootvorgang aktiv war
Alle Meldungen für den aktuellen Bootvorgang anzeigen
journalctl -b

Wenn Sie die Journalmeldungen für den vorangegangenen Bootvorgang abrufen möchten, hängen Sie einen Offset-Parameter an

Im folgenden Beispiel werden die Meldungen für den vorangegangenen Bootvorgang ausgegeben

journalctl -b -1

Alternativ können Sie die Bootmeldungen nach der Boot-ID auflisten

Verwenden Sie hierzu das Feld _BOOT_ID

journalctl _BOOT_ID=156019a44a774a0bb0148a92df4af81b

Filtern nach Zeitraum

Sie können die Ausgabe von journalctl durch Angabe des Start- oder Enddatums filtern

  • Für Datumsangaben gilt das Format „2014-06-30 9:17:16“
  • Wenn Sie keine Uhrzeit angeben, wird Mitternacht (0:00 Uhr) angenommen
  • Wenn die Sekundenangabe fehlt, wird „:00“ angenommen
  • Wenn Sie kein Datum angeben, wird das aktuelle Datum angenommen
  • Statt eines numerischen Ausdrucks können Sie die Schlüsselwörter „gestern“, „heute“ oder „morgen“ angeben
  • Diese Wörter bezeichnen Mitternacht am Tag vor dem aktuellen Tag, am aktuellen Tag bzw
  • am Tag nach dem aktuellen Tag
  • Das Schlüsselwort „now“ (jetzt) verweist auf die aktuelle Uhrzeit am heutigen Tag
  • Auch relative Zeitangaben mit dem Präfix - oder + sind möglich
  • Diese Zeitangaben verweisen dann entsprechend auf eine Uhrzeit vor oder nach der aktuellen Uhrzeit

Nur neue Meldungen ab jetzt anzeigen und Ausgabe entsprechend aktualisieren

journalctl --since "now" -f

Alle Meldungen ab der letzten Mitternacht bis 3:20 Uhr anzeigen

journalctl --since "today" --until "3:20"

Filtern nach Feldern

Sie können die Ausgabe des Journals nach bestimmten Feldern filtern

  • Die Syntax für ein abzugleichendes Feld lautet FELDNAME=FILTERKRITERIUM, beispielsweise _SYSTEMD_UNIT=httpd.service
  • Wenn Sie mehrere Filterkriterien in einer einzigen Abfrage angeben, werden die Ausgabemeldungen noch stärker gefiltert
  • Eine Liste der Standardfelder finden Sie auf der man-Seite man 7 systemd.journal-fields
Meldungen anzeigen, die von einer bestimmten Prozess-ID erzeugt wurden
journalctl _PID=1039
Meldungen anzeigen, die zu einer bestimmten Benutzer-ID gehören
journalctl _UID=1000
Meldungen aus dem Kernel-Ring-Puffer anzeigen (entspricht der Ausgabe von dmesg)
journalctl _TRANSPORT=kernel
Meldungen aus der Standard- oder Fehlerausgabe des Services anzeigen
journalctl _TRANSPORT=stdout
Nur Meldungen anzeigen, die von einem bestimmten Service erzeugt wurden
journalctl _SYSTEMD_UNIT=avahi-daemon.service
Wenn Sie zwei verschiedene Felder angeben, werden nur solche Einträge zurückgegeben, die beide Ausdrücke gleichzeitig erfüllen
journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1488
Wenn Sie zwei Kriterien für dasselbe Feld angeben, werden alle Einträge zurückgegeben, die einen dieser Ausdrücke erfüllen
journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service
Mit dem Begrenzungszeichen „+“ verbinden Sie zwei Ausdrücke mit einem logischen „OR“
  • Im folgenden Beispiel werden alle Meldungen aus dem Avahi-Service mit der Prozess-ID 1480 zusammen mit allen Meldungen vom D-Bus-Service gezeigt
journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1480 + _SYSTEMD_UNIT=dbus.service

Filtern nach Kritikalität

Sie können journalctl nach Kritikalität filtern, indem Sie die Option -p mit einer Prioritätsstufe verwenden, wie z. B. err für Fehler, crit für kritisch oder alert für Alarm. Diese Option zeigt nur Einträge mit der angegebenen Priorität oder höher an. Die Prioritäten reichen von 0: emerg bis 7: debug, wobei niedrigere Nummern eine höhere Kritikalität bedeuten.

Fehler und höher anzeigen
journalctl -p err
Nur kritische Nachrichten anzeigen (und höher)
journalctl -p crit
Alle Meldungen ab „error“ im aktuellen Boot-Vorgang anzeigen
journalctl -p err -b
Prioritätsstufen (von kritisch zu unwichtig)
   emerg   (0: Notfall)
   alert   (1: Alarm)
   crit    (2: kritisch)
   err     (3: Fehler)
   warning (4: Warnung)
   notice  (5: Hinweis)
   info    (6: Information)
   debug   (7: Fehlersuche)

Untersuchen von Fehlern

In diesem Abschnitt wird an einem einfachen Beispiel erläutert, wie Sie die Fehler auffinden und beheben, die systemd beim Starten von apache2 meldet

Versuchen Sie, den apache2-Service zu starten

systemctl start apache2
Job for apache2.service failed
See 'systemctl status apache2' and 'journalctl -xn' for details

Prüfen Sie den Status dieses Service

systemctl status apache2 apache2.service - The Apache Webserver
Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled)
Active: failed (Result: exit-code) since Tue 2014-06-03 11:08:13 CEST; 7min ago
Process: 11026 ExecStop=/usr/sbin/start_apache2 -D SYSTEMD -DFOREGROUND \
  -k graceful-stop (code=exited, status=1/FAILURE)* Die ID des Prozesses, der den Fehler verursacht, lautet 11026

Rufen Sie die ausführliche Version der Meldungen zur Prozess-ID 11026 ab

journalctl -o verbose _PID=11026
[...] MESSAGE=AH00526: Syntax error on line 6 of /etc/apache2/default-server.conf
[...] MESSAGE=Invalid command 'DocumenttRoot', perhaps misspelled or defined by a module [...]

Korrigieren Sie den Schreibfehler in /etc/apache2/default-server.conf, starten Sie den apache2-Service, und lassen Sie den Status ausgeben

systemctl start apache2 && systemctl status apache2 apache2.service - The Apache Webserver
Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled)
Active: active (running) since Tue 2014-06-03 11:26:24 CEST; 4ms ago
Process: 11026 ExecStop=/usr/sbin/start_apache2 -D SYSTEMD -DFOREGROUND
  -k graceful-stop (code=exited, status=1/FAILURE)
Main PID: 11263 (httpd2-prefork)
Status: "Processing requests..."
CGroup: /system.slice/apache2.service
  ├─11263 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
  ├─11280 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
  ├─11281 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
  ├─11282 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
  ├─11283 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
  └─11285 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]

Anhang

Siehe auch



Dokumentation

Man-Page
  1. journalctl(1)

Links

Projekt

Weblinks

  1. https://documentation.suse.com/de-de/sles/12-SP5/html/SLES-all/cha-journalctl.html