Journalctl: Unterschied zwischen den Versionen
| Zeile 108: | Zeile 108: | ||
* Die Daten basieren dabei auf den Protokollinformationen aus dem Kernel, von den Benutzerprozessen, aus der Standardeingabe und aus den Fehlern von Systemdiensten | * Die Daten basieren dabei auf den Protokollinformationen aus dem Kernel, von den Benutzerprozessen, aus der Standardeingabe und aus den Fehlern von Systemdiensten | ||
; Der Dienst | ; Der Dienst systemd-journald ist standardmäßig aktiviert | ||
<syntaxhighlight lang="bash" highlight="1" line copy> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
sudo systemctl status systemd-journald | sudo systemctl status systemd-journald | ||
Version vom 20. Oktober 2025, 19:55 Uhr
journalctl - Abfragen des Systemd-Journals
Beschreibung
- journalctl dient der Abfrage von Inhalten des Journals von systemd
- wie von systemd-journald.service(8) geschrieben
- 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
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
|
- 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
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
[...]
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:
0für den aktuellen Bootvorgang,-1für den vorangegangenen Bootvorgang,-2fü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
Untersuchen von systemd-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 [...]
Konfiguration
Das Verhalten des systemd-journald-Service lässt sich in /etc/systemd/journald.conf festlegen
- In diesem Abschnitt werden lediglich die grundlegenden Optionseinstellungen vorgestellt
- Eine vollständige Beschreibung der Datei finden Sie auf der man-Seite
man 5 journald.conf - Damit die Änderungen in Kraft treten, müssen Sie das Journal wie folgt neu starten
systemctl restart systemd-journald
Persistenz
Das Journal speichert die Protokolldaten standardmäßig in /run/log/journal/
- Das Verzeichnis
/run/ist naturgemäß flüchtig, weshalb die Protokolldaten beim Neubooten verloren gehen - Um persistente Protokolldaten zu erzielen, muss das Verzeichnis
/var/log/journal/mit den entsprechenden Angaben zu Eigentümer und Berechtigungen vorhanden sein, damit der systemd-journald-Service die Daten dort speichern kann
So können Sie das Verzeichnis mit systemd erstellen und die persistente Protokollierung aktivieren: # Öffnen Sie die Datei /etc/systemd/journald.conf als root zum Bearbeiten
vi /etc/systemd/journald.conf
Heben Sie die Auskommentierung der Zeile auf, die mit Storage= beginnt, und ändern Sie sie wie folgt
[...] [Journal] Storage=persistent #Compress=yes [...]
Speichern Sie die Datei, und starten Sie systemd-journald neu
systemctl restart systemd-journald
Größenbeschränkung
Wenn die Journalprotokolldaten an einem persistenten Speicherort gespeichert werden, belegen sie bis zu 10 % des Dateisystems, auf dem sich /var/log/journal befindet
- Ist
/var/log/journalbeispielsweise auf einer/var-Partition mit einer Kapazität von 30 GB gespeichert, so kann das Journal bis zu 3 GB des Festplattenspeichers belegen
Zum Bearbeiten dieser Größenbeschränkung ändern Sie die Option SystemMaxUse (und heben Sie die Auskommentierung dieser Option auf)
SystemMaxUse=50M
Weiterleiten an /dev/ttyX
Sie können das Journal an ein Terminalgerät weiterleiten, sodass Sie an einem bevorzugten Terminalbildschirm (beispielsweise /dev/tty12) über Systemmeldungen informiert werden
Ändern Sie die folgenden journald-Optionen
ForwardToConsole=yes TTYPath=/dev/tty12
Weiterleitung an Syslog
journald ist abwärtskompatibel zu herkömmlichen syslog-Implementierungen wie rsyslog
apt install rsyslog
systemctl is-enabled rsyslog
Die Weiterleitung an syslog wird in /etc/systemd/journald.conf aktiviert
ForwardToSyslog=yes
Dateien
| Datei | Beschreibung |
|---|---|
Anhang
Siehe auch
Dokumentation
- Man-Page
Links
Projekt
Weblinks