Mit der Einführung von systemd hat sich die Art und Weise, wie Linux Systemprotokolle handhabt, grundlegend verändert. Dieser Artikel erklärt, wie Sie mit dem Befehl `journalctl` Systemprotokollmeldungen effektiv lesen und filtern können.
Zentralisierte Protokollverwaltung
Der System- und Servicemanager systemd hat eine deutliche Veränderung in der Protokollsammlung mit sich gebracht. Früher waren Protokolldateien über das Dateisystem verstreut, abhängig vom jeweiligen Dienst oder Daemon, der sie erzeugte. Trotz ihrer unterschiedlichen Speicherorte hatten alle eine Gemeinsamkeit: Sie waren reine Textdateien.
Systemd hingegen zentralisiert das Sammeln und Verwalten aller System-, Boot- und Kernel-Protokolldaten in einer dedizierten Protokollierungslösung. Diese Protokolle werden in einem binären Format gespeichert. Dies bietet den Vorteil, dass die Daten flexibel in verschiedene Formate, wie beispielsweise JSON, extrahiert werden können, wie wir später sehen werden.
Die zentralisierte Speicherung erleichtert auch die Querverweise auf zusammengehörige Informationen, die zuvor in separaten Protokolldateien abgelegt waren. Die gesammelten Daten im Journal erlauben es, Informationen aus unterschiedlichen Quellen zu kombinieren und in einer einheitlichen Ansicht darzustellen.
`journalctl` ist das entscheidende Werkzeug für die Arbeit mit dem Systemd-Journal. Hier finden Sie weiterführende Informationen.
Einfache Anwendung von journalctl
Sie können `journalctl` ohne zusätzliche Parameter aufrufen:
journalctl
Dieser Befehl zeigt das gesamte Journal an, beginnend mit den ältesten Einträgen. Die Ausgabe erfolgt im `less`-Pager, sodass Sie bequem durch die Einträge navigieren und suchen können. Mit den Pfeiltasten links und rechts können Sie auch seitlich scrollen, um breite Protokolleinträge zu lesen.
Mit der End-Taste gelangen Sie direkt zum Ende der Liste, den neuesten Einträgen.
Beenden Sie die Ausgabe mit Strg+C.
Obwohl `journalctl` ohne `sudo` ausgeführt werden kann, ist es ratsam, `sudo` zu verwenden, um alle Protokolldetails anzuzeigen.
sudo journalctl
Bei Bedarf können Sie die Ausgabe von `journalctl` direkt im Terminalfenster anstatt im Pager `less` anzeigen lassen. Dies erreichen Sie mit der Option `–no-pager`.
sudo journalctl --no-pager
Die Ausgabe rast dann durch das Terminalfenster, und Sie kehren zur Eingabeaufforderung zurück.
Um die Anzahl der von `journalctl` ausgegebenen Zeilen zu begrenzen, verwenden Sie die Option `-n` (Zeilen). Mit folgendem Befehl geben wir beispielsweise die letzten zehn Zeilen aus:
sudo journalctl -n 10
Echtzeit-Protokollaktualisierungen mitverfolgen
Um zu bewirken, dass `journalctl` die neuesten Einträge anzeigt, sobald diese im Journal ankommen, verwenden Sie die Option `-f` (follow).
sudo journalctl -f
Der neueste Eintrag hat den Zeitstempel 07:09:07. Sobald neue Aktivitäten erfolgen, werden die entsprechenden Einträge am Ende der Ausgabe hinzugefügt. Echtzeit-Updates sind möglich!
Um 07:09:59 hat eine Anwendung namens `geek-app` einen Protokolleintrag mit der Meldung „Neue Nachricht von HTG“ ins Journal geschrieben.
Die Ausgabeformate von journalctl
Da das Journal eine Binärdatei ist, müssen die enthaltenen Daten interpretiert und in ein für Menschen lesbares Format umgewandelt werden. Mit verschiedenen Parsern können aus denselben binären Daten unterschiedliche Ausgabeformate erzeugt werden. `journalctl` bietet eine Vielzahl von Formaten.
Das Standardformat ist das Kurzformat, das dem klassischen Systemprotokollformat ähnelt. Um das Kurzformat explizit anzufordern, verwenden Sie die Option `-o` (Ausgabe) mit dem Modifikator `short`.
sudo journalctl -n 10 -o short
Die Felder von links nach rechts sind:
- Die Zeit der Nachrichtenerstellung in lokaler Zeit.
- Der Hostname.
- Der Prozessname. Dies ist der Prozess, der die Nachricht generiert hat.
- Die Protokollnachricht.
Für einen vollständigen Datums- und Zeitstempel verwenden Sie den Modifikator `short-full`:
sudo journalctl -n 10 -o short-full
Das Datums- und Zeitformat in dieser Ausgabe ist das Format, das Sie verwenden müssen, wenn Sie Protokollmeldungen nach Zeitbereich filtern möchten, wie wir gleich sehen werden.
Verwenden Sie den Modifikator `verbose`, um alle Metadaten anzuzeigen, die jede Protokollnachricht begleiten.
sudo journalctl -n 10 -o verbose
Es gibt viele potenzielle Felder, aber es ist selten, dass alle Felder in einer Nachricht vorhanden sind.
Ein wichtiges Feld ist das Prioritätsfeld. In diesem Beispiel hat es den Wert 6. Der Wert gibt die Bedeutung der Nachricht an:
0 | Notfall. Das System ist unbrauchbar. |
1 | Warnung. Eine Bedingung wurde gemeldet, die sofort behoben werden sollte. |
2 | Kritisch. Dies betrifft Abstürze, Core-Dumps und erhebliche Ausfälle in primären Anwendungen. |
3 | Fehler. Ein Fehler wurde gemeldet, der aber nicht als schwerwiegend eingestuft wird. |
4 | Warnung. Macht auf einen Zustand aufmerksam, der bei Nichtbeachtung zu einem Fehler werden kann. |
5 | Hinweis. Wird verwendet, um ungewöhnliche Ereignisse, aber keine Fehler zu melden. |
6 | Informationen. Regelmäßige Betriebsmeldungen. Diese erfordern keine Maßnahmen. |
7 | Debuggen. Nachrichten, die in Anwendungen eingefügt werden, um das Debuggen zu erleichtern. |
Wenn Sie eine korrekt formatierte JavaScript Object Notation (JSON)-Ausgabe wünschen, verwenden Sie den `json`-Modifikator:
sudo journalctl -n 10 -o json
Jede Nachricht ist ordnungsgemäß als JSON-Objekt formatiert und wird in einer eigenen Zeile ausgegeben.
Um eine formatierte JSON-Ausgabe zu erhalten, verwenden Sie den Modifikator `json-pretty`.
sudo journalctl -n 10 -o json-pretty
Jedes JSON-Objekt wird auf mehrere Zeilen aufgeteilt, mit jeweils einem Name-Wert-Paar pro Zeile.
Um lediglich die Protokollnachrichten ohne Zeitstempel oder andere Metadaten anzuzeigen, verwenden Sie den `cat`-Modifikator:
sudo journalctl -n 10 -o cat
Dieses Ausgabeformat kann es erschweren, zu erkennen, welcher Prozess das Protokollereignis ausgelöst hat, obwohl einige Meldungen einen Hinweis geben.
Protokollmeldungen nach Zeitraum filtern
Um die Ausgabe von `journalctl` auf einen gewünschten Zeitraum zu beschränken, verwenden Sie die Optionen `-S` (seit) und `-U` (bis).
Verwenden Sie diesen Befehl, um die Protokolleinträge seit einer bestimmten Zeit und einem bestimmten Datum anzuzeigen:
sudo journalctl -S "2020-12-01 07:00:00"
Die Anzeige enthält nur Meldungen, die nach dem angegebenen Datum und der Uhrzeit erstellt wurden.
Um einen bestimmten Zeitraum anzugeben, verwenden Sie die Optionen `-S` (seit) und `-U` (bis) gemeinsam. Dieser Befehl zeigt Protokollmeldungen für einen Zeitraum von 15 Minuten an:
sudo journalctl -S "2020-12-01 07:00:00" -U "2020-12-01 07:15:00"
Dies ist besonders nützlich, wenn Sie wissen, dass auf Ihrem System etwas Ungewöhnliches passiert ist, und wenn Sie ungefähr wissen, wann es passiert ist.
Relative Zeiträume verwenden
Sie können relative Zeitangaben verwenden, wenn Sie Zeiträume auswählen. So können Sie zum Beispiel sagen „Zeige mir alle Ereignisse von vor einem Tag bis jetzt“. Genau das bewirkt dieser Befehl. Das „d“ steht für „Tag“ und „-1“ bedeutet einen Tag in der Vergangenheit.
sudo journalctl -S -1d
Die Protokollmeldungen werden von 00:00:00 gestern bis „jetzt“ aufgelistet.
Wenn Sie etwas untersuchen möchten, das in jüngerer Vergangenheit passiert ist, können Sie einen relativen Zeitraum in Stunden angeben. Hier überprüfen wir die Protokollnachrichten der letzten Stunde:
sudo journalctl -S -1h
Die Meldungen der letzten Stunde werden Ihnen angezeigt. Sie können auch „m“ für Minuten und „w“ für Wochen verwenden.
`journalctl` versteht die Zeitangaben `today`, `yesterday` und `tomorrow`. Diese Modifikatoren sind eine bequeme Möglichkeit, allgemeine Zeiträume anzugeben. Um alle Ereignisse anzuzeigen, die gestern passiert sind, verwenden Sie diesen Befehl:
sudo journalctl -S yesterday
Alle gestrigen Journaleinträge bis Mitternacht 00:00:00 werden abgerufen und angezeigt.
Um alle bisher empfangenen Protokollmeldungen anzuzeigen, verwenden Sie diesen Befehl:
sudo journalctl -S today
Es wird alles von 00:00:00 bis zum Zeitpunkt der Befehlsausführung angezeigt.
Sie können die verschiedenen Zeitdauermodifikatoren kombinieren. Um alles von vor zwei Tagen bis heute zu sehen, verwenden Sie diesen Befehl:
sudo journalctl -S -2d -U today
Alle Nachrichten von vorgestern bis heute werden abgerufen und angezeigt.
Protokollmeldungen nach Datenfeldern filtern
Sie können nach Protokollmeldungen suchen, die einer Vielzahl von Journalfeldern entsprechen. Diese Suchen versuchen, Übereinstimmungen in den Metadaten zu finden, die jeder Nachricht zugeordnet sind. Es wird empfohlen, dass Sie die Liste der Felder durchsehen und diejenigen auswählen, die für Sie am nützlichsten sind.
Beachten Sie, dass es dem Autor einer Anwendung überlassen ist, ob alle Felder ausgefüllt werden oder nicht. Es gibt keine Garantie dafür, dass jedes Feld ausgefüllt wird.
Alle Journalfeldmodifikatoren werden auf dieselbe Weise verwendet. Wir werden einige in den folgenden Beispielen verwenden. Um nach Protokollmeldungen einer bestimmten Anwendung zu suchen, verwenden Sie den Modifikator `_COMM` (Befehl). Wenn Sie zusätzlich die Option `-f` (follow) verwenden, verfolgt `journalctl` neue Meldungen dieser Anwendung, sobald sie eintreffen.
sudo journalctl -f _COMM=geek-app
Protokolleinträge lassen sich über die Prozess-ID des Prozesses filtern, der die Protokollmeldung erzeugt hat. Verwenden Sie den Befehl `ps`, um die Prozess-ID des Daemons oder der Anwendung zu finden, nach der Sie suchen.
sudo journalctl _PID=751
Auf der Maschine, mit der dieser Artikel recherchiert wurde, ist der SSH-Daemon Prozess 751.
Sie können auch nach der Benutzer-ID filtern. Dies ist die Benutzer-ID der Person, die die Anwendung oder den Befehl gestartet hat oder der der Prozess gehört.
sudo journalctl _UID=1000
Alle Nachrichten, die mit anderen Benutzer-IDs verknüpft sind, werden herausgefiltert. Es werden nur Nachrichten angezeigt, die sich auf den Benutzer 1000 beziehen:
Eine andere Möglichkeit, nach Protokollmeldungen einer bestimmten Anwendung zu suchen, besteht darin, den Pfad zur ausführbaren Datei anzugeben.
sudo journalctl /usr/bin/anacron
Alle Anacron Scheduler-Protokollmeldungen werden abgerufen und angezeigt.
Um die Suche zu vereinfachen, können wir `journalctl` auffordern, alle vorhandenen Werte für jedes Journalfeld aufzulisten.
Um die Benutzer-IDs anzuzeigen, für die `journalctl` Protokollmeldungen aufgezeichnet hat, verwenden Sie die Option `-F` (Felder) und übergeben Sie die Feldkennung `_UID`.
journalctl -F _UID
Wiederholen wir das und sehen uns die Gruppen-IDs (GIDs) an:
journalctl -F _GID
Sie können dies mit jedem der Journalfeldbezeichner tun.
Kernel-Meldungen auflisten
Es gibt eine eingebaute Möglichkeit, Kernel-Meldungen schnell zu isolieren. Sie müssen sie nicht selbst suchen und filtern. Die Option `-k` (Kernel) entfernt alle anderen Meldungen und bietet Ihnen eine direkte Ansicht der Kernel-Protokolleinträge.
sudo journalctl -k
Die Hervorhebung spiegelt die Bedeutung der Nachricht entsprechend den Werten im Feld „Priorität“ wider.
Boot-Meldungen überprüfen
Wenn Sie ein Problem beim Booten untersuchen möchten, ist `journalctl` sehr nützlich. Vielleicht haben Sie neue Hardware hinzugefügt, die nicht reagiert, oder eine zuvor funktionierende Hardwarekomponente funktioniert nach Ihrem letzten Systemupdate nicht mehr.
Verwenden Sie die Option `-b` (Boot), um die Protokolleinträge des letzten Starts anzuzeigen:
journalctl -b
Die Protokolleinträge des letzten Bootvorgangs werden Ihnen angezeigt.
Wenn wir „letzter Start“ sagen, meinen wir den Startvorgang, der Ihren Computer für Ihre aktuelle angemeldete Sitzung zum Leben erweckt hat. Um frühere Bootvorgänge anzuzeigen, können Sie `journalctl` mit einer Nummer mitteilen, für welchen Bootvorgang Sie sich interessieren. Um beispielsweise den drittletzten Bootvorgang anzuzeigen, verwenden Sie diesen Befehl:
journalctl -b 3
Wenn Sie ein Problem hatten und Ihren Computer neu starten mussten, ist es in der Regel die vorherige Bootsequenz, an der Sie interessiert sind. Dies ist also eine häufig verwendete Befehlsform.
<img loading=“lazy“ decoding=“async“ src=“https://etoppc.com/wp-content/uploads/2021/12/1640456947_155_So-verwenden-Sie-Journalctl-