So verwenden Sie Journalctl zum Lesen von Linux-Systemprotokollen

Die Systemprotokollierung von Linux hat sich mit der Einführung von systemd geändert. Erfahren Sie, wie Sie mit dem Befehl journalctl Systemprotokollnachrichten lesen und filtern.

Zentralisierte Protokollierung

Kontroversen sind keine Unbekannten, der systemd-System- und Service-Manager führte eine bedeutende Änderung in der Art und Weise ein, wie Systemprotokolle gesammelt werden. Früher befanden sich Protokolle je nach Dienst oder Daemon, der sie erstellt hat, an verschiedenen Stellen im Dateisystem. Aber eines hatten sie alle gemeinsam. Es waren reine Textdateien.

Mit systemd werden alle System-, Boot- und Kernel-Protokolldateien von einer zentralen, dedizierten Protokollierungslösung gesammelt und verwaltet. Das Format, in dem sie gespeichert werden, ist ein binäres. Dies erleichtert unter anderem die Möglichkeit, die Daten in verschiedene Formate zu extrahieren, wie z JSON, wie wir sehen werden.

es kann auch den Querverweis auf verwandte Informationen erleichtern, die zuvor in separaten Protokolldateien aufgezeichnet wurden. Da die Daten nun in einem einzigen Journal gehalten werden, können die Daten aus mehreren interessanten Quellen ausgewählt und in einer einzigen ineinander verwobenen Liste von Einträgen angezeigt werden.

journalctl ist das Werkzeug habe früher mit der Zeitschrift gearbeitet.

Journalctl ohne Schnickschnack

Sie können journalctl ohne Befehlszeilenparameter aufrufen:

journalctl

journalctl zeigt das gesamte Journal an, wobei die ältesten Einträge ganz oben in der Liste stehen. Die Liste wird in less angezeigt, sodass Sie mit den üblichen Navigationsfunktionen von less blättern und suchen können. Sie können auch den Linkspfeil und den Rechtspfeil verwenden, um seitwärts zu scrollen, um breite Protokolleinträge zu lesen.

Durch Drücken der Ende-Taste springt man direkt zum Ende der Liste und zu den neuesten Protokolleinträgen.

Drücken Sie zum Beenden Strg+C.

Obwohl journalctl ohne sudo aufgerufen werden kann, Sie werden sicherstellen, dass Sie alle Details sehen im Protokoll, wenn Sie sudo verwenden.

sudo journalctl

Bei Bedarf können Sie mit der Option –no-pager die Ausgabe von journalctl an das Terminalfenster statt an less senden.

sudo journalctl --no-pager

Die Ausgabe scrollt schnell durch das Terminalfenster, und Sie kehren zur Eingabeaufforderung zurück.

Um die Anzahl der Zeilen zu begrenzen, die Journalctl zurückgibt, verwenden Sie die Option -n (Zeilen). Lassen Sie uns nach zehn Ausgabezeilen fragen:

sudo journalctl -n 10

Folgende Zeitschriftenaktualisierungen

Um zu veranlassen, dass journalctl die neuesten Einträge anzeigt, sobald sie im Journal eintreffen, verwenden Sie die Option -f (folgen).

sudo journalctl -f

Der neueste Eintrag hat einen Zeitstempel von 07:09:07. Wenn eine neue Aktivität stattfindet, werden die neuen Einträge am unteren Rand der Anzeige angehängt. Nahezu Echtzeit-Updates – cool!

Um 07:09:59 fügte eine Anwendung namens geek-app einen Protokolleintrag mit der Aufschrift „Neue Nachricht von HTG“ in das Journal ein.

Ändern des Anzeigeformats

Da das Journal eine Binärdatei ist, müssen die darin enthaltenen Daten übersetzt oder in Text geparst werden, bevor sie Ihnen angezeigt werden können. Mit unterschiedlichen Parsern können aus denselben binären Quelldaten unterschiedliche Ausgabeformate erstellt werden. Es gibt verschiedene Formate, die journalctl verwenden kann.

Die Standardausgabe ist das Kurzformat, das dem klassischen Systemprotokollformat sehr ähnlich ist. Um das Kurzformat explizit anzufordern, verwenden Sie die Option -o (Ausgabe) mit dem Kurzmodifizierer.

sudo journalctl -n 10 -o short-full

Von links nach rechts sind die Felder:

Die Uhrzeit, zu der die Nachricht erstellt wurde, in Ortszeit.
Der Hostname.
Der Prozessname. Dies ist der Prozess, der die Nachricht generiert hat.
Die Protokollnachricht.

Um einen vollständigen Datums- und Zeitstempel zu erhalten, verwenden Sie den Modifikator short-full:

sudo journalctl -n 10 -o short-full

Die Datums- und Uhrzeitformate in dieser Ausgabe sind das Format, in dem Sie Datums- und Uhrzeitangaben angeben müssen, wenn Sie Protokollmeldungen nach Zeitraum auswählen, wie wir gleich sehen werden.

Verwenden Sie den ausführlichen Modifikator, um alle Metadaten anzuzeigen, die jede Protokollnachricht begleiten.

sudo journalctl -n 10 -o verbose

Dort sind viele mögliche Felder, aber es kommt selten vor, dass alle Felder in einer Nachricht vorhanden sind.

Ein zu diskutierendes Feld ist das Prioritätsfeld. In diesem Beispiel hat es den Wert 6. Der Wert repräsentiert die Bedeutung der Nachricht:

0: Notfall. Das System ist unbrauchbar.
1: Warnung. Es wurde eine Bedingung gemeldet, die sofort behoben werden sollte.
2: Kritisch. Dies deckt Abstürze, Coredumps und erhebliche Ausfälle in primären Anwendungen ab.
3: Fehler. Es wurde ein Fehler gemeldet, der jedoch nicht als schwerwiegend angesehen wird.
4: Warnung. Macht Sie 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 ihnen das Debuggen zu erleichtern.

Wenn Sie möchten, dass die Ausgabe richtig formatiert dargestellt wird JavaScript-Objekt-Notation (JSON)-Objekte verwenden Sie den json-Modifizierer:

sudo journalctl -n 10 -o json

Jede Nachricht wird ordnungsgemäß als wohlgeformtes JSON-Objekt verpackt und eine Nachricht pro Ausgabezeile angezeigt.

Um die JSON-Ausgabe zu haben hübsch bedruckt, verwenden Sie den Modifikator json-pretty.

sudo journalctl -n 10 -o json-pretty

Jedes JSON-Objekt ist auf mehrere Zeilen aufgeteilt, wobei jedes Name-Wert-Paar in einer neuen Zeile steht.

Um nur die Protokolleintragsnachrichten ohne Zeitstempel oder andere Metadaten anzuzeigen, verwenden Sie den cat-Modifikator:

sudo journalctl -n 10 -o cat

Dieses Anzeigeformat kann es schwierig machen, zu erkennen, welcher Prozess das Protokollereignis ausgelöst hat, obwohl einige Meldungen einen Hinweis enthalten.

Auswählen von Protokollnachrichten nach Zeitraum

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 Uhrzeit und einem bestimmten Datum anzuzeigen:

sudo journalctl -S "2020-91-12 07:00:00"

sudo journalctl -S

Die Anzeige enthält nur Meldungen, die nach Datum und Uhrzeit im Befehl angekommen sind.

Ausgabe von sudo journalctl -S

Um einen Berichtszeitraum zu definieren, verwenden Sie die Optionen -S (seit) und -U (bis) zusammen. Dieser Befehl betrachtet Protokollnachrichten aus einem Zeitraum von 15 Minuten.:

sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00"

sudo journalctl -S

Dies ist eine großartige Kombination, wenn Sie wissen, dass auf Ihrem System etwas Seltsames passiert ist und ungefähr wann es passiert ist.

Ausgabe von sudo journalctl -S

Verwenden relativer Zeiträume

Sie können die relative Adressierung verwenden, wenn Sie Ihre Zeiträume auswählen. Das bedeutet, dass du Dinge sagen kannst wie „Zeig mir alle Ereignisse von vor einem Tag bis jetzt“. Genau das bedeutet dieser Befehl. Das „d“ steht für „Tag“ und das „-1“ bedeutet einen Tag in der Vergangenheit.

sudo journalctl -S -1d

Die Log-Meldungen werden von 00:00:00 gestern bis „jetzt“ aufgelistet.

Wenn Sie etwas untersuchen möchten, das sich in der jüngeren Vergangenheit ereignet hat, können Sie einen relativen Zeitraum in Stunden angeben. Hier überprüfen wir die Protokollnachrichten der letzten Stunde:

sudo journalctl -S -1h

Die Nachrichten der letzten Stunde werden Ihnen angezeigt. Sie können auch „m“ verwenden, um relative Zeiträume in Minuten und „w“ für Wochen einzustellen.

journalctl versteht heute, gestern und morgen. Diese Modifikatoren bieten eine praktische Möglichkeit, allgemeine Zeiträume anzugeben. Um alle Ereignisse anzuzeigen, die gestern passiert sind, verwenden Sie diesen Befehl:

sudo journalctl -S yesterday

Alle gestrigen Tagebuch-Ereignisse bis Mitternacht 00:00:00 werden abgerufen und für Sie angezeigt.

Um alle bisher empfangenen Protokollnachrichten anzuzeigen, verwenden Sie diesen Befehl:

sudo journalctl -S today

Es wird alles von 00:00:00 bis zum Zeitpunkt der Befehlsausgabe angezeigt.

Sie können die verschiedenen Zeitdauer-Modifikatoren mischen. Um alles von vor zwei Tagen bis heute zu sehen, verwenden Sie diesen Befehl:

sudo journalctl -S -2d -U today

Alles von vorgestern bis heute wird abgerufen und angezeigt.

Auswählen von Protokollnachrichten nach Datenfeldern

Sie können nach Protokollnachrichten suchen die zu einer Vielzahl von Zeitschriftenbereichen passen. Diese Suchen versuchen, Übereinstimmungen in den Metadaten zu finden, die an jede Nachricht angehängt sind. Es wird empfohlen, dass Sie siehe Liste der Felder und wählen Sie diejenigen aus, die für Sie am nützlichsten sind.

Bedenken Sie, ob ein Antrag alle Felder ausfüllt oder nicht, liegt ganz bei den Autoren des Antrags. Sie können nicht garantieren, dass jedes Feld ausgefüllt wird.

Alle Journalfeldmodifikatoren werden auf die gleiche Weise verwendet. Wir werden einige in unseren Beispielen unten verwenden. Um nach Protokollnachrichten einer bestimmten Anwendung zu suchen, verwenden Sie den Modifikator _COMM (Befehl). Wenn Sie auch die Option -f (follow) verwenden, verfolgt journalctl neue Nachrichten von dieser Anwendung, sobald sie eintreffen.

sudo journalctl -f _COMM=geek-app

Log-Einträge können Sie über die Prozess ID des Prozesses, der die Protokollnachricht generiert hat. Verwenden Sie den Befehl ps, um die Prozess-ID des Daemons oder der Anwendung zu finden, nach der Sie suchen möchten.

sudo journalctl _PID=751

Auf der Maschine, mit der dieser Artikel recherchiert wurde, ist die SSH Daemon ist Prozess 751.

Sie können auch suchen nach Benutzeridentifikation. Dies ist die Benutzer-ID der Person, die die Anwendung oder den Befehl gestartet hat oder der den Prozess besitzt.

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 Protokollnachrichten zu suchen, die sich auf eine bestimmte Anwendung beziehen, besteht darin, den Pfad zur ausführbaren Datei anzugeben.

sudo journalctl /usr/bin/anacron

Alle Anacron Scheduler-Log-Meldungen werden abgerufen und angezeigt.

Um die Suche zu vereinfachen, können wir journalctl bitten, alle darin enthaltenen Werte für jedes Journalfeld aufzulisten.

Um die Benutzer-IDs anzuzeigen, für die journalctl Protokollnachrichten aufgezeichnet hat, verwenden Sie die Option -F (Felder) und übergeben Sie die Feldkennung _UID.

journalctl -F _UID

Machen wir das nochmal und schauen wir uns die an Gruppen-IDs (GIDs):

journalctl -F _GID

Sie können dies mit jedem der Feldbezeichner für Journale.

Kernel-Nachrichten auflisten

Es gibt eine eingebaute Möglichkeit, Kernel-Nachrichten schnell zu isolieren. Sie müssen sie nicht selbst suchen und isolieren. Die Option -k (Kernel) entfernt alle anderen Meldungen und gibt Ihnen eine sofortige Ansicht der Kernel-Logeinträge.

sudo journalctl -k

Die Hervorhebung spiegelt die Bedeutung der Nachricht gemäß den Werten im Feld Priorität wider.

Boot-Meldungen überprüfen

Wenn Sie ein Problem im Zusammenhang mit dem Booten haben, das Sie untersuchen möchten, ist journalctl für Sie da. Vielleicht haben Sie neue Hardware hinzugefügt und diese reagiert nicht oder eine zuvor funktionierende Hardwarekomponente funktioniert nach Ihrem letzten System-Upgrade nicht mehr.

Verwenden Sie die Option -b (boot), um die Protokolleinträge zu Ihrem letzten Start anzuzeigen:

journalctl -b

Die Log-Einträ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 den dritten vorherigen Bootvorgang anzuzeigen, verwenden Sie diesen Befehl:

journalctl -b 3

Wenn Sie ein Problem hatten und Ihren Computer neu starten mussten, ist es im Allgemeinen eine vorherige Bootsequenz, an der Sie interessiert sind. Dies ist also eine gängige Befehlsform.

Bei der Reihenfolge der Stiefel kann man leicht verwechselt werden. Um zu helfen, können wir journalctl bitten, die Boote aufzulisten, die es in seinem Journal aufgezeichnet hat, indem wir die Option –list-boots verwenden.

journalctl --list-boots

Anhand des Datums- und Zeitstempels können Sie den Bootvorgang identifizieren, für den Sie Nachrichten anzeigen möchten, und dann die Nummer in der linken Spalte verwenden, um die Protokollnachrichten für diese Bootsequenz abzurufen. Sie können auch die 32-Bit-Boot-ID auswählen und diese an journalctl übergeben.

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7

Die Protokollmeldungen der angeforderten Bootsequenz werden abgerufen und angezeigt.

Journal-Festplattenspeicher verwalten

Natürlich werden das Journal und alle seine Log-Meldungen auf Ihrer Festplatte gespeichert. Das bedeutet, dass sie Speicherplatz auf der Festplatte belegen. Um zu sehen, wie viel Speicherplatz das Journal belegt hat, verwenden Sie die Option –disk-usage.

journalctl --disk-usage

Bei heutigen Festplatten sind 152 MB nicht gerade viel Platz, aber zu Demonstrationszwecken werden wir ihn dennoch zurückschrauben. Es gibt zwei Möglichkeiten, dies zu tun. Die erste besteht darin, eine Größenbeschränkung festzulegen, auf die das Journal zurückverkleinert werden soll. Es wird natürlich wieder wachsen, aber wir können es jetzt für dieses neue Wachstum beschneiden.

Wir verwenden die wunderbar betitelte Option –vacuum-size und übergeben die Größe, auf die das Journal reduziert werden soll. Wir bitten um 100 MB. Die Denkweise ist, dass wir journalctl bitten, „alles wegzuwerfen, was Sie können, aber nicht unter 100 MB gehen“.

journalctl --vacuum-size=100M

Die andere Möglichkeit, die Journalgröße zu reduzieren, besteht darin, die Option –vacuum-time zu verwenden. Diese Option weist Journalctl an, Nachrichten zu verwerfen, die älter sind als der in der Befehlszeile angegebene Zeitraum. Sie können Tage, Wochen, Monate und Jahre im Zeitraum verwenden.

Lassen Sie uns alle Nachrichten aussortieren, die älter als eine Woche sind:

journalctl --vacuum-time=1weeks

Daten vs. Informationen

Daten sind nur dann nützlich, wenn Sie an sie herankommen und sie nutzen können. Dann werden daraus nützliche Informationen. Der Befehl journalctl ist ein flexibles und ausgeklügeltes Werkzeug, mit dem Sie auf verschiedene Weise auf die gewünschten Informationen zugreifen können.

Sie können fast jeden Informationsschnipsel verwenden, um die benötigten Protokollnachrichten zu erfassen.