Mit der Einführung von systemd hat sich die Linux-Systemprotokollierung geändert. Erfahren Sie, wie Sie mit dem journalctl Befehl Systemprotokollmeldungen lesen und filtern können.
Zentralisierte Protokollierung
Der System- und Service-Manager ist kein Unbekannter in Sachen Kontroversen und führte eine bedeutende Änderung in der Art und Weise ein, wie Systemprotokolle gesammelt werden. Früher befanden sich Protokolle je nach dem Dienst oder Daemon, der sie erstellte, an unterschiedlichen Stellen im Dateisystem. Aber eines hatten sie alle gemeinsam: Sie waren reine Textdateien. systemd
Mit systemd werden alle System-, Boot- und Kernel-Logdateien von einer zentralen, dedizierten Logging-Lösung gesammelt und verwaltet. Sie werden in einem binären Format gespeichert. Dies erleichtert unter anderem die Möglichkeit, die Daten in verschiedene Formate wie JSON zu extrahieren , wie wir sehen werden. Es kann auch das Querverweisen verwandter Informationen erleichtern, die zuvor in separaten Logdateien aufgezeichnet worden wären. Da die Daten nun in einem einzigen Journal gespeichert werden, können die Daten aus mehreren interessanten Quellen ausgewählt und in einer einzigen verknüpften Liste von Einträgen angezeigt werden.
Journalctl ist das Werkzeug für die Arbeit mit der Zeitschrift .
journalctl Ohne Schnickschnack
Sie können journalctl ohne Befehlszeilenparameter aufrufen:
Journalctl zeigt das gesamte Journal an, wobei die ältesten Einträge oben in der Liste stehen. Die Liste wird in angezeigt less, sodass Sie mit den üblichen Navigationsfunktionen von blättern und suchen können . Sie können auch die Tasten und lessverwenden, um seitwärts zu blättern und breite Protokolleinträge zu lesen. Left ArrowRight Arrow
Durch Drücken der EndTaste springen Sie direkt zum Ende der Liste und zu den neuesten Protokolleinträgen.
Drücken Sie Ctrl+Czum Beenden.
Obwohl es journalctl ohne die Verwendung aufgerufen werden kann sudo, stellen Sie sicher, dass Sie alle Details im Protokoll sehen, wenn Sie verwenden sudo.
Bei Bedarf können Sie die Ausgabe mithilfe der Option journalctl an das Terminalfenster statt an senden . less–no-pager
Die Ausgabe läuft schnell durch das Terminalfenster und Sie werden zur Eingabeaufforderung zurückgeleitet.
Um die Anzahl der zurückgegebenen Zeilen zu begrenzen journalctl, verwenden Sie die -nOption (Zeilen). Fordern wir zehn Zeilen Ausgabe an:
Verfolgen von Journalaktualisierungen
Um journalctl die neuesten Einträge in der Reihenfolge anzuzeigen, in der sie im Journal eintreffen, verwenden Sie die -fOption (Folgen).
Der neueste Eintrag hat einen Zeitstempel von 07:09:07. Wenn neue Aktivitäten stattfinden, werden die neuen Einträge am unteren Rand der Anzeige angehängt. Nahezu Echtzeit-Updates – cool!
Um 07:09:59 geek-appfügte eine Anwendung namens „Ist ein neuer Eintrag 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 umgewandelt werden, bevor sie Ihnen angezeigt werden können. Mit unterschiedlichen Parsern können aus denselben binären Quelldaten unterschiedliche Ausgabeformate erstellt werden. Es gibt mehrere verschiedene Formate, die journalctl verwendet werden können.
Die Standardausgabe ist das Kurzformat, das dem klassischen Systemprotokollformat sehr ähnlich ist. Um das Kurzformat explizit anzufordern, verwenden Sie die -oOption (Ausgabe) mit dem shortModifikator.
Von links nach rechts sind dies die Felder:
- Der Zeitpunkt der Nachrichtenerstellung 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 short-fullModifikator:
Die Datums- und Zeitformate in dieser Ausgabe sind das Format, in dem Sie Datum und Uhrzeit angeben müssen, wenn Sie Protokollnachrichten nach Zeitraum auswählen, wie wir gleich sehen werden.
Um alle Metadaten anzuzeigen, die jede Protokollnachricht begleiten, verwenden Sie den verboseModifikator.
Es gibt viele mögliche Felder , aber es kommt selten vor, dass alle Felder in einer Nachricht vorhanden sind.
Ein Feld, das einer Diskussion bedarf, ist das PriorityFeld. In diesem Beispiel hat es den Wert 6. Der Wert stellt die Wichtigkeit der Nachricht dar:
- 0 : Notfall. Das System ist unbrauchbar.
- 1 : Alarm. Es wurde ein Zustand markiert, der sofort behoben werden sollte.
- 2 : Kritisch. Dies umfasst Abstürze, Coredumps und erhebliche Fehler in primären Anwendungen.
- 3 : Fehler. Es wurde ein Fehler gemeldet, der jedoch nicht als schwerwiegend angesehen wird.
- 4 : Warnung. Macht Sie auf einen Zustand aufmerksam, dessen Nichtbeachtung zu einem Fehler führen kann.
- 5 : Hinweis. Wird verwendet, um ungewöhnliche Ereignisse zu melden, bei denen es sich jedoch nicht um Fehler handelt.
- 6 : Informationen. Normale Betriebsmeldungen. Diese erfordern keine Maßnahmen.
- 7 : Debuggen. In Anwendungen eingefügte Nachrichten, um deren Debuggen zu erleichtern.
Wenn Sie möchten, dass die Ausgabe als ordnungsgemäß formatierte JavaScript Object Notation (JSON)-Objekte dargestellt wird , verwenden Sie den jsonModifikator:
Jede Nachricht wird ordnungsgemäß als wohlgeformtes JSON-Objekt verpackt und es wird eine Nachricht pro Ausgabezeile angezeigt.
Verwenden Sie den Modifikator, um die JSON-Ausgabe schön auszudruckenjson-pretty .
Jedes JSON-Objekt wird 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 catModifikator:
Dieses Anzeigeformat kann es schwierig machen, zu identifizieren, welcher Prozess das Protokollereignis ausgelöst hat, obwohl einige Nachrichten einen Hinweis enthalten.
Auswählen von Protokollmeldungen nach Zeitperiode
Um die Ausgabe auf journalctl einen für Sie interessanten Zeitraum zu beschränken, verwenden Sie die Optionen -S(seit) und -U(bis).
Um die Protokolleinträge seit einer bestimmten Uhrzeit und einem bestimmten Datum anzuzeigen, verwenden Sie diesen Befehl:
Angezeigt werden nur Meldungen, die nach dem im Befehl angegebenen Datum und Zeitpunkt eingegangen sind.
Um einen Zeitraum zu definieren, über den Sie berichten möchten, verwenden Sie die Optionen -S(since) und -U(until) zusammen. Dieser Befehl untersucht Protokollnachrichten aus einem Zeitraum von 15 Minuten.:
Dies ist eine großartige Kombination, wenn Sie wissen, dass auf Ihrem System etwas Seltsames passiert ist und wann es ungefähr passiert ist.
Relative Zeiträume verwenden
Sie können bei der Auswahl Ihrer Zeiträume relative Adressierung verwenden. Das heißt, Sie können Dinge sagen wie „zeige mir alle Ereignisse von vor einem Tag bis jetzt.“ Genau das bedeutet dieser Befehl. Das „d“ steht für „Tag“ und die „-1“ bedeutet einen Tag in der Vergangenheit.
Die Protokollmeldungen werden von gestern 00:00:00 bis „jetzt“ aufgelistet.
Wenn Sie etwas untersuchen möchten, das in der jüngeren Vergangenheit passiert ist, können Sie einen relativen Zeitraum in Stunden angeben. Hier überprüfen wir Protokollnachrichten der letzten Stunde:
Es werden Ihnen die Meldungen der letzten Stunde angezeigt. Mit „m“ können Sie außerdem relative Zeiträume in Minuten und mit „w“ Wochen einstellen.
Journalctl versteht today, yesterday, und tomorrow. Diese Modifikatoren bieten eine praktische Möglichkeit, gängige Zeiträume anzugeben. Um alle Ereignisse von gestern anzuzeigen, verwenden Sie diesen Befehl:
Alle Journal-Protokollereignisse, die gestern bis Mitternacht 00:00:00 stattgefunden haben, werden abgerufen und für Sie angezeigt.
Um alle heute bisher empfangenen Protokollmeldungen anzuzeigen, verwenden Sie diesen Befehl:
Angezeigt wird alles von 00:00:00 bis zur Zeit der Befehlsausgabe.
Sie können die verschiedenen Zeitperiodenmodifikatoren mischen. Um alles von vor zwei Tagen bis zum Beginn des heutigen Tages anzuzeigen, verwenden Sie diesen Befehl:
Es wird alles von vorgestern bis heute abgerufen und angezeigt.
Auswählen von Protokollmeldungen nach Datenfeldern
Sie können nach Protokollnachrichten suchen , die einer Vielzahl von Journalfeldern entsprechen . Bei diesen Suchvorgängen werden Übereinstimmungen in den Metadaten gefunden, die jeder Nachricht beigefügt sind. Es wird empfohlen, dass Sie die Liste der Felder zu Rate ziehen und diejenigen auswählen, die für Sie am nützlichsten sind.
Bedenken Sie, dass es ganz den Autoren der Bewerbung überlassen ist, ob alle Felder ausgefüllt werden oder nicht. Sie können nicht garantieren, dass alle Felder ausgefüllt werden.
Alle Journalfeldmodifikatoren werden auf die gleiche Weise verwendet. Wir werden in unseren Beispielen unten einige davon verwenden. Um nach Protokollnachrichten einer bestimmten Anwendung zu suchen, verwenden Sie den _COMMModifikator (Befehl). Wenn Sie außerdem die -fOption (folgen) verwenden, journalctl werden neue Nachrichten dieser Anwendung verfolgt, sobald sie eintreffen.
Sie können mithilfe der Prozess-ID des Prozesses, der die Protokollnachricht generiert hat, nach Protokolleinträgen suchen . Verwenden Sie den psBefehl, um die Prozess-ID des Daemons oder der Anwendung zu finden, nach der Sie suchen möchten .
Auf der Maschine, die zur Recherche dieses Artikels verwendet wurde, ist der SSH- Daemon Prozess 751.
Sie können auch nach der Benutzer-ID suchen . Dies ist die Benutzer-ID der Person, die die Anwendung oder den Befehl gestartet hat oder der Eigentümer des Prozesses ist.
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 zu einer bestimmten Anwendung zu suchen, besteht darin, den Pfad zur ausführbaren Datei anzugeben.
Alle anacron Scheduler-Logmeldungen werden abgerufen und angezeigt .
Um die Suche zu vereinfachen, können wir journalctl eine Auflistung aller enthaltenen Werte für alle Journalfelder anfordern.
Um die Benutzer-IDs anzuzeigen, journalctl für die Protokollnachrichten aufgezeichnet wurden, verwenden Sie die -FOption (Felder) und übergeben Sie die _UIDFeldkennung.
Lassen Sie uns das noch einmal machen und uns die Gruppen-IDs (GIDs) ansehen:
Sie können dies mit jeder beliebigen Journalfeldkennung tun .
Auflisten von Kernel-Meldungen
Es gibt eine integrierte Methode, um Kernelmeldungen schnell zu isolieren. Sie müssen sie nicht selbst suchen und isolieren. Die -kOption (kernel) entfernt alle anderen Meldungen und bietet Ihnen eine sofortige Ansicht der Kernelprotokolleinträge.
Die Hervorhebung spiegelt die Wichtigkeit der Nachricht entsprechend den Werten im PriorityFeld wider sideloading.
Überprüfen von Startmeldungen
Wenn Sie ein Problem beim Booten haben, das Sie untersuchen möchten, journalctl sind Sie bei uns richtig. Vielleicht haben Sie neue Hardware hinzugefügt und diese reagiert nicht, oder eine zuvor funktionierende Hardwarekomponente funktioniert nach Ihrem letzten Systemupgrade nicht mehr.
Um die Protokolleinträge zu Ihrem letzten Start anzuzeigen, verwenden Sie die -bOption (Boot):
Es werden Ihnen die Logeinträge des letzten Bootvorgangs angezeigt.
Wenn wir „letzter Start“ sagen, meinen wir den Startvorgang, der Ihren Computer für Ihre aktuelle Sitzung zum Leben erweckte. Um vorherige Startvorgänge anzuzeigen, können Sie eine Nummer verwenden, um anzugeben, journalctl welcher Startvorgang Sie interessiert. Um den drittletzten Startvorgang anzuzeigen, verwenden Sie diesen Befehl:
Wenn bei Ihnen ein Problem aufgetreten ist und Sie Ihren Computer neu starten mussten, interessiert Sie im Allgemeinen die vorherige Startreihenfolge. Dies ist also eine gängige Befehlsform.
Es ist leicht, die Reihenfolge der Stiefel zu verwechseln. Um zu helfen, können wir journalctl mit der Option darum bitten, die Stiefel aufzulisten, die in seinem Tagebuch aufgezeichnet wurden –list-boots.
Sie können den Startvorgang, für den Sie Meldungen sehen möchten, anhand des Datums- und Zeitstempels identifizieren und dann die Nummer in der linken Spalte verwenden, um die Protokollmeldungen für diese Startreihenfolge abzurufen. Sie können auch die 32-Bit-Startkennung auswählen und diese an übergeben journalctl.
Dabei werden die Log-Meldungen der von uns angeforderten Boot-Sequenz abgerufen und angezeigt.
Verwalten des Journal-Festplattenspeichers
Natürlich werden das Journal und alle darin enthaltenen Protokollmeldungen auf Ihrer Festplatte gespeichert. Das bedeutet, dass sie Festplattenspeicher belegen. Um zu sehen, wie viel Speicherplatz das Journal belegt, verwenden Sie die –disk-usageOption.
Bei den heutigen Festplatten sind 152 MB nicht gerade viel Platz, aber zu Demonstrationszwecken reduzieren wir die Größe trotzdem. Dafür gibt es zwei Möglichkeiten. Die erste besteht darin, eine Größenbeschränkung festzulegen, auf die das Journal reduziert werden soll. Es wird natürlich wieder wachsen, aber wir können es jetzt beschneiden, um es für dieses neue Wachstum vorzubereiten.
Wir verwenden die wunderbar betitelte –vacuum-sizeOption und geben die Größe ein, auf die das Journal reduziert werden soll. Wir bitten um 100 MB. Man kann es sich so vorstellen, dass wir darum bitten, journalctl„so viel wie möglich wegzuwerfen, aber nicht unter 100 MB zu gehen.“
Die andere Möglichkeit, die Journalgröße zu reduzieren, besteht darin, die –vacuum-timeOption zu verwenden. Diese Option weist an journalctl, Nachrichten zu verwerfen, die älter sind als der in der Befehlszeile angegebene Zeitraum. Sie können days, weeks, monthsund yearsin dem Zeitraum verwenden.
Lassen Sie uns alle Nachrichten aussortieren, die älter als eine Woche sind:
Daten vs. Informationen
Daten sind nur dann nützlich, wenn Sie sie abrufen und nutzen können. Dann werden sie zu nützlichen Informationen. Der journalctl Befehl ist ein flexibles und ausgereiftes Tool, mit dem Sie auf verschiedene Weise an die gewünschten Informationen gelangen können.
Sie können praktisch jeden beliebigen Informationsschnipsel verwenden, um die gewünschten Protokollmeldungen herauszufiltern.