GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Lesen und analysieren Sie Ihre Linux-Systemprotokolle mit Journalctl

Nur weil Sie keine Fehler auf Ihrem System erhalten, heißt das nicht, dass alles gut funktioniert. Warum lesen und analysieren Sie nicht Ihre Linux-Systemprotokolle, um zu sehen, was mit Ihrem System los ist? Nicht sicher wie? Zum Glück ist Journalctl dieser Aufgabe gewachsen!

In diesem Tutorial erfahren Sie, wie Sie das Verhalten Ihres Systems mit dem Tool journalctl genau beobachten können, indem Sie die Journalprotokolldateien von systemd lesen und analysieren.

Lesen Sie weiter und halten Sie Ihr System auf Hochtouren!

Voraussetzungen

Dieses Tutorial wird eine praktische Demonstration sein. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie Folgendes haben.

  • Eine Linux-Maschine – Diese Demo verwendet Ubuntu 20.04 LTS, aber Sie können jede Distribution verwenden.
  • Ein Nicht-Root-Konto mit sudo-Berechtigungen.

Einstellen der richtigen Systemzeit

Bevor Sie Journalctl verwenden können, müssen Sie Ihre Systemzeit einstellen. Die im systemd-Journal protokollierten Zeitstempel sind in UTC, daher müssen Sie die richtige Zeitzone auswählen. Wenn Ihre Uhrzeit nur um wenige Sekunden abweicht, werden einige der Protokolleinträge möglicherweise nicht korrekt angezeigt, wenn Sie sie später verwenden.

1. Öffnen Sie Ihr Terminal und führen Sie timedatectl aus Befehl unten, um eine Liste der verfügbaren Zeitzonen zu erhalten.

timedatectl list-timezones

Wählen Sie aus der unten angezeigten Liste eine aus, die Ihrer Region entspricht. Wenn Sie beispielsweise in Amerika leben, wählen Sie die Zeitzone, die der Ihrer Stadt am nächsten liegt.

2. Führen Sie als Nächstes den folgenden Befehl aus, um Ihre Zeitzone festzulegen (set-timezone ). Ersetzen Sie your-zone mit dem Namen der Zeitzone, die Sie zuvor ausgewählt haben (Schritt eins). Dieser Befehl stellt Ihre Systemzeit auf die von Ihnen gewählte Zeitzone ein.

Von nun an wird jeder Log-Eintrag als Ihre Ortszeit protokolliert.

sudo timedatectl set-timezone your-zone

3. Führen Sie abschließend den folgenden Befehl aus, um zu überprüfen, ob Sie die Zeitzone richtig eingestellt haben.

timedatectl status

Wie unten gezeigt, sollten das aktuelle Systemdatum und die Uhrzeit mit Ihrer ausgewählten Region und Zeitzone übereinstimmen.

Alle Protokolle anzeigen

Jetzt ist das Einstellen der Zeitzone aus dem Weg, Sie können mit dem Anzeigen von Protokollen in Ihrem System beginnen. Der systemd System and Service Manager bietet eine zentralisierte Verwaltung von Log-Daemons, die Logs von verschiedenen Teilen/Tools auf dem System sammeln.

Aber wie sehen Sie die Protokolle? Mit dem Dienstprogramm journalctl können Sie die Protokolle Ihres Computers anzeigen. Und das erste, was Sie normalerweise tun möchten, ist, alles anzuzeigen, was seit dem letzten Start passiert ist.

Führen Sie journalctl aus Befehl unten, um alle Protokolle des Journald-Daemons anzuzeigen.

Das Dienstprogramm journalctl implementiert die Befehlszeilenschnittstelle des Journald-Daemons zum Sammeln und Anzeigen des systemd-Journals. Das Dienstprogramm journalctl ermöglicht es Benutzern, die Aktivität und den Status jeder systemd-verwalteten Einheit (Dienst, Prozess usw.) zu überprüfen.

 sudo journalctl 

Der Befehl zeigt das gesamte unten gezeigte Journal an und ist etwas schwer zu lesen. Die ältesten Protokolle befinden sich ganz oben in der Liste, während die neuesten Protokolle ganz unten stehen.

Sie werden wahrscheinlich Hunderte oder Tausende von Einträgen haben, wenn das systemd-Journal lange genug Protokolle aufgezeichnet hat.

Sie können andere Parameter verwenden, um die Protokolle zu filtern, aber Sie werden hier nicht auf diese Filter eingehen, da dieses Thema über dieses Tutorial hinausgeht.

Da Sie wahrscheinlich gezielter durch die Liste blättern möchten, wäre ein Bild-nach-oben/unten-Pfeil schön. Drücken Sie K um eine Seite nach oben zu springen und J eine Seite nach unten springen. Drücken Sie ENDE um zur letzten Seite zu springen.

Beachten Sie, dass die Zeitstempel am Anfang jedes Eintrags Ihre Ortszeit sind, da Sie Ihre Zeitzone zuvor im Abschnitt „Einstellen der korrekten Systemzeit“ (Schritt 2) eingestellt haben.

Das Journal persistent machen

Sie haben gesehen, wie Sie alle Protokolle anzeigen, aber normalerweise möchten Sie Protokolle für einen längeren Zeitraum aufbewahren, damit Sie mehr Chancen haben, Daten zu selten auftretenden Problemen zu finden. Wie? Indem das Journal persistent gemacht wird.

Die Datei /run/log/journal/ Verzeichnis ist der Standardspeicherort für Protokolldaten und ist standardmäßig nicht persistent. Sobald Sie das System neu starten, sind alle Protokolle verschwunden. Die Idee der dauerhaften Protokollierung besteht darin, alle Protokolldateien aufzubewahren, aber ältere Protokolle werden archiviert, wenn sie zu groß werden.

Um das Journal zwischen Bootvorgängen persistent zu machen, bearbeiten Sie die Datei /etc/systemd/journald.conf Datei und konfigurieren Sie sie so, dass sie einen dauerhaften Speicherort verwendet.

1. Öffnen Sie die /etc/systemd/journald.conf Datei mit Ihrem bevorzugten Texteditor und suchen Sie nach Storage=auto Direktive, wie unten gezeigt.

2. Ändern Sie als Nächstes den Speicher Wert der Direktive von auto bis beständig , speichern Sie dann die Änderungen und schließen Sie den Editor. Behalten Sie den Speicher Direktive in einer Zeile und keine Leerzeichen zwischen der Direktive und dem Wert, sonst funktioniert die Konfiguration nicht.

3. Führen Sie den folgenden Befehl aus, um systemd-journald neu zu starten Dienst, um alle Änderungen zu aktivieren. Dieser Befehl druckt keine Ausgabe, aber starten Sie Ihren Computer neu und öffnen Sie ein anderes Terminal, sobald dieser Befehl abgeschlossen ist.

An diesem Punkt ignoriert systemd /run/log/journal und speichern Sie stattdessen die Journaldaten in /var/log/journal Verzeichnis, so dass Ihr Log-Journal zwischen Bootvorgängen bestehen bleibt.

Wenn Sie systemd-journald starten service, erstellt er automatisch das Verzeichnis /var/log/journal, falls es nicht existiert.

sudo systemctl restart systemd-journald

4. Führen Sie nun den folgenden Befehl aus, um den Status von systemd-journald.service zu überprüfen .

sudo systemctl status systemd-journald.service

Sie sehen einen aktiven (laufenden) Status, wenn Ihre Konfiguration funktioniert, wie unten gezeigt. Die folgende Ausgabe bestätigt, dass das Journal wie vorgesehen ausgeführt wird.

5. Führen Sie ls aus Befehl unten, um zu sehen, ob der /var/log/journal Verzeichnis existiert.

ls /var/log/journal

Sie sehen die folgende Ausgabe, die die UUID des persistenten Journals ist. Diese UUID hat keine besondere Bedeutung und ist nur eine zufällige eindeutige Zeichenfolge, die während des Startvorgangs generiert wird. Diese Zeichenfolge ist eine Kennung, mit der Sie auf die Daten in /var/log/journal verweisen können .

Notieren Sie sich die UUID, da Sie sie verwenden werden, um Protokolljournale aufzulisten (Schritt 6).

6. Führen Sie schließlich den folgenden Befehl aus, um die Protokolljournale aufzulisten. Achten Sie darauf, myUUID zu ersetzen mit Ihrer zuvor notierten UUID (Schritt fünf).

ls /var/log/journal/myUUID

In ähnlicher Weise sehen Sie unten das Journal Ihres letzten Starts. Und an diesem Punkt haben Sie jetzt ein dauerhaftes Protokollierungssystem!

Auflisten von Journaleinträgen aus dem aktuellen Boot

Sie haben gelernt, wie Sie sich alle Protokolleinträge anzeigen lassen. Aber vielleicht ziehen Sie es vor, bestimmte Arten von Protokollen herauszufiltern. In diesem Fall möchten Sie möglicherweise nur die Kernel-Protokolleinträge anzeigen.

Das Tool journalctl verfügt über eine leistungsstarke Filtersyntax, mit der Sie bestimmte Arten von Protokolleinträgen anzeigen können. Oder zeigen Sie sogar zugehörige Informationen wie die Prozess-ID (PID) oder den Unit-Namen des ursprünglichen Dienstes an.

Es gibt verschiedene Möglichkeiten, Protokolle herauszufiltern, aber vielleicht möchten Sie nur die Journale Ihres aktuellen Startvorgangs anzeigen. Wenn ja, die grundlegende journalctl Befehl wird es tun.

Führen Sie journalctl aus Befehl unten, um alle Journaleinträge von Ihrem aktuellen Start aufzulisten (-b ) für Ihr aktuelles System/Ihre aktuelle Umgebung. Die -b Flag teilt dem journalctl mit Befehl zum Anzeigen von Protokollen, die von journald seit dem letzten Systemstart gespeichert wurden.

journalctl -b

Auflistung von Protokollen vergangener Bootvorgänge

Bei Verwendung von journalctl Zur Fehlerbehebung müssen Sie möglicherweise auch die Protokolleinträge eines bestimmten vergangenen Starts anzeigen. Vielleicht haben Sie einen Dienst, der bei einem Start startet, aber bei einem anderen fehlschlägt. In diesem Fall müssen Sie den Protokolleintrag vom zweiten Start isolieren, um zu sehen, was schief gelaufen ist.

1. Führen Sie den folgenden Befehl aus, um die Liste der vergangenen Starts anzuzeigen (–list-boots).

journalctl --list-boots

Wie unten gezeigt, zeigt journalctl alle vergangenen Bootvorgänge an, da Sie im vorherigen Abschnitt die dauerhafte Protokollierung konfiguriert haben.

  • Jede Zeile in der Liste zeigt einen früheren Boot-Log-Eintrag an. Die erste Spalte ist der Offset des Boot, mit dem Sie auf jeden Eintrag verweisen können. Die Offsets werden als Zahlen dargestellt (-1, 0 ).
  • Sie können auch die zweite Spalte, die Boot-ID, als absoluten Verweis auf einen Boot-Eintrag verwenden.

2. Führen Sie als Nächstes journalctl -b -1 aus Befehl, um die Journaleinträge von Boot 1 (dem vorherigen Boot) anzuzeigen. Sie können aber auch Journaleinträge von anderen Stiefeln anzeigen, indem Sie die Stiefelnummer ändern (z. B. Stiefel 2, Stiefel 3 …)

journalctl -b -1

3. Führen Sie schließlich den folgenden Befehl aus, um die Journaleinträge von demselben Boot anzuzeigen, die jedoch von ihrer Boot-ID referenziert werden (boot_id ). Achten Sie darauf, boot_id zu ersetzen mit der Boot-ID, die Sie in Schritt eins notiert haben.

journalctl -b boot_id

Protokolle basierend auf Zeitfenstern auflisten

Sie haben gesehen, wie Sie alle Protokolle vergangener Starts anzeigen können, aber was ist, wenn Sie bestimmte Protokolle nach Zeit anzeigen müssen? Anhängen des --since und --until Optionen filtern Journalprotokolleinträge basierend auf Zeitfenstern.

Führen Sie journalctl aus Befehl unten, um alle Journaleinträge zu finden, die vor 24 Stunden ab einem bestimmten Datum und einer bestimmten Uhrzeit erstellt wurden (--since "2022-02-04 12:40:49” ).

journalctl --since "2022-02-04 12:40:49”

Vielleicht möchten Sie Datum und Uhrzeit nicht angeben. Verwenden Sie in diesem Fall stattdessen relative Werte und Zeitdauern. Zum Beispiel „2 Minuten“, „30 Minuten“, „1 Stunde“ und sogar Tage wie „gestern“ oder „jetzt“ usw.

Führen Sie den folgenden Befehl aus, um alle Journaleinträge seit vor 24 Stunden ab dem aktuellen Datum und der aktuellen Uhrzeit anzuzeigen (”yesterday” ).

journalctl --since "yesterday"

Nun, was wäre, wenn Ihr SSH-Dienst heute seit 10:10 Uhr läuft und weiterläuft, bis er vor einer Stunde unterbrochen wurde? Hängen Sie beide --since an und --until Optionen zum journalctl Befehl, um herauszufinden, was schief gelaufen ist.

Führen Sie den folgenden Befehl aus, um Protokolle zu finden, die von 10:10 generiert wurden heute bis 1 hour ago .

journalctl --since 10:10 --until "1 hour ago"

Filtern von Protokollen basierend auf der Einheit des ursprünglichen Prozesses

Das Auffinden von Protokollen, die von und bis zu einem bestimmten Datum und einer bestimmten Uhrzeit erstellt wurden, ist bei der Fehlerbehebung hilfreich, aber Sie erhalten möglicherweise trotzdem viele Datensätze in der Ausgabe. Wie filtern Sie die Protokolle weiter?

Sie möchten beispielsweise die Journaleinträge von einer NGINX-Webservereinheit filtern, die beim Booten nicht gestartet werden konnte. Verwenden Sie den journalctl Befehl mit dem -unit Option und den Einheitennamen des Dienstes, um die Protokolle anzuzeigen.

Führen Sie den folgenden Befehl aus, um alle Journaleinträge basierend auf der Einheit des Ursprungsprozesses aufzulisten (-u ) (nginx.service ). Diese Art der Filterung ist hilfreich, um die PIDs der Prozesse oder Dienste zu kennen, die sich auf einen bestimmten Fehler oder eine bestimmte Warnung beziehen.

journalctl -u nginx.service

Vielleicht ziehen Sie es vor, alle Änderungen aktiv anzuzeigen, während sie auftreten, z. B. während der Fehlerbehebung beim Dienst, und müssen die Protokolle anzeigen, während sie von journald geladen werden. Führen Sie in diesem Fall den folgenden Befehl aus, um aufzulisten oder zu folgen (-f ) alle Änderungen, sobald sie passieren.

journalctl -f

Bisher haben Sie gesehen, dass journalctl flexibel ist und viele Optionen zum Filtern und Anzeigen von Protokollen bietet. Es ist unmöglich, alle Arten von Filtern und Zeitintervallen in diesem Tutorial anzuzeigen, aber Sie können den man journalctl ausführen Befehl, um andere Optionen anzuzeigen, die das Journalctl-Tool anbietet.

Ausgabeformat anpassen

Standardmäßig zeigt journalctl Protokolleinträge in einem Pager-ähnlichen Format an und färbt den Terminaltext bei der Ausgabe. Wahrscheinlich möchten Sie Ihre Protokolle jedoch in einem standardisierten, besser parsbaren Format ausgeben. In diesem Fall können Sie beliebige Textbearbeitungswerkzeuge verwenden.

Führen Sie den folgenden Befehl aus, um das Paging und die Färbung zu unterdrücken. Mit dem Tool journalctl können Sie mit einer Ausgabedirektive in der Konfigurationsdatei angeben, was auf stdout angezeigt werden soll.

journalctl --no-pager

Wenn Sie jedoch lieber ein Ausgabeformat angeben möchten, fügen Sie den -o hinzu Option für den Befehl journalctl. Das folgende Beispiel verwendet das JSON-Ausgabeformat, aber Sie können alle anderen Optionen verwenden, die in journalctl.

verfügbar sind

Der folgende Befehl listet Journaleinträge vom aktuellen Start auf (-b ) generiert für den NGINX-Dienst (nginx ) und gibt die Liste im JSON-Format aus (-o json ).

journalctl -b -u nginx -o json

Sie können zwar auch ein benutzerdefiniertes Ausgabeformat verwenden, journalctl bietet mehrere nützliche vordefinierte, wie JSON, CSV und Syslog. Jedes dieser Formate hat seine Vorzüge, aber Sie sollten die Seiten mit Textbearbeitungswerkzeugen konsultieren, um mehr darüber zu erfahren, wie sie mit Text umgehen.

Schlussfolgerung

In diesem Tutorial haben Sie gelernt, wie Sie journalctl verwenden Befehl, um die systemd-Journalprotokolle anzuzeigen. Bevor Sie jedoch einen dieser Befehle verwenden, sollten Sie zuerst geeignete Unterbefehlsoptionen auswählen, um anzugeben, was Sie anzeigen möchten.

An dieser Stelle können Sie jetzt schnell bestimmte Informationen in Ihren Systemprotokollen durch journalctl finden und lokalisieren . Sie sind jetzt mit dem nötigen Wissen ausgestattet, warum also nicht gleich zur Verwaltung von Linux-Diensten mit systemctl und journalctl springen?


Linux
  1. Kontrollieren Sie die Uhrzeit und das Datum Ihres Computers mit systemd

  2. Stellen Sie Ihr System mit dem Einzelbenutzermodus in Linux Mint / Linux Mint 12 wieder her

  3. Linux-Sicherheit:Schützen Sie Ihre Systeme mit fail2ban

  4. Erfahren Sie mehr über Ihr Linux-System mit inxi

  5. So verwenden Sie journalctl zum Analysieren von Protokollen in Linux

Überwachen Sie Systemressourcen mit Bashtop und Bpytop unter Linux

Beheben und überwachen Sie die Linux-Systemleistung mit nmon

Überprüfen und finden Sie heraus, wie lange das Booten Ihres Linux-Systems dauert

Anfängerhandbuch zum Analysieren von Protokollen unter Linux mit dem Befehl journalctl

Journalctl:So lesen und bearbeiten Sie Systemd-Protokolle

So installieren und verwenden Sie Docker in Ihrem Linux-System