Verwenden von journalctl zum Anzeigen und Analysieren von Protokollen: eine detaillierte Anleitung





Journalctl ist ein großartiges Tool zum Analysieren von Protokollen, normalerweise eines der ersten, das sich als Linux-Anfänger vertraut macht. Die integrierten Rotationsfunktionen, umfangreichen Filterfunktionen und die Möglichkeit, die Protokolle aller systemd unit-Dienste mit einem Tool anzuzeigen, sind sehr praktisch und erleichtern die Arbeit der Systemadministratoren erheblich.



Dieser Artikel behandelt die Hauptfunktionen von journalctl und wie es verwendet werden kann. Mit journalctl können Sie die Systemprotokolle anzeigen, um Probleme zu lösen, die auf einer Workstation oder einem Server aufgetreten sind, indem Sie eine Linux-Distribution mit dem Systemd-Initialisierungsdämon verwenden, der in modernen Linux-Systemen bereits zum De-facto-Standard geworden ist, z. B. RHEL, CentOS, Fedora, Debian und viele andere.



Es besteht die Auffassung, dass systemd nicht so gut ist - es lädt das System und ist auch heute noch umstritten, aber es kann nicht geleugnet werden, dass es hervorragende Tools für die Systemverwaltung und Fehlerbehebung bietet. Stellen Sie sich vor, Sie müssen sich mit einem problematischen Server befassen, der nicht einmal booten kann. In diesem Fall können Sie von der Live-Distribution booten, die Systempartition bereitstellen und in den systemd-Protokollen nachsehen, wo das Problem liegt.



Systemd



Systemd besteht aus drei Hauptkomponenten:



  • systemd - System- und Servicemanager
  • systemctl - Dienstprogramm zum Anzeigen und Verwalten des Status von Diensten
  • systemd-analyse - liefert Statistiken zum Systemstartprozess, überprüft die Richtigkeit von Einheitendateien und verfügt über Systemd-Debugging-Funktionen




Journald



Journald ist der systemd-Protokollierungsdämon. Systemd dient zur zentralen Verwaltung von Systemprotokollen aus Prozessen, Anwendungen usw. Alle derartigen Ereignisse werden vom Journald-Daemon behandelt. Er sammelt Protokolle vom gesamten System und speichert sie in Binärdateien.



Die zentralisierte Protokollierung von Ereignissen in einem Binärformat bietet viele Vorteile. Beispielsweise können Systemprotokolle in verschiedene Formate wie z. B. Klartext oder bei Bedarf in JSON übersetzt werden. Es ist auch recht einfach, das Protokoll mithilfe von Datums- und Zeitfiltern auf ein einzelnes Ereignis zurückzuführen.



Journald-Protokolldateien können Tausende von Ereignissen erfassen und werden mit jedem neuen Ereignis aktualisiert. Wenn Ihr Linux-System also lange genug ausgeführt wird, kann die Größe der Protokolldateien mehrere Gigabyte oder mehr erreichen. Daher kann die Analyse solcher Protokolle mit Verzögerungen erfolgen. In diesem Fall können Sie bei der Analyse der Protokolle die Ausgabe filtern, um die Arbeit zu beschleunigen.



Journald-Konfigurationsdatei



Die Konfigurationsdatei befindet sich unter folgendem Pfad: /etc/systemd/journald.conf. Sie enthält verschiedene Einstellungen für journald. Ich würde nicht empfehlen, diese Datei zu ändern, es sei denn, Sie sind sich sicher, was Sie tun.



Das Verzeichnis mit dem Journald-Journal befindet sich unter / run / log / journal (für den Fall, dass die dauerhafte Speicherung von Protokollen nicht konfiguriert ist, aber dazu später mehr).

Die Dateien werden im Binärformat gespeichert, daher ist es normal, sie mit cat oder nano anzuzeigen. Wie viele Administratoren es gewohnt sind, funktioniert dies nicht.



Verwenden von journalctl zum Anzeigen und Analysieren von Protokollen



Grundbefehl zum Anzeigen:



# journalctl
      
      









Es werden alle Einträge aus allen Protokollen gedruckt, einschließlich Fehler und Warnungen, sobald das System gestartet wurde. Ältere Ereigniseinträge befinden sich oben, neuere unten. Sie können PageUp und PageDown verwenden, um durch die Liste zu navigieren, Enter, um zeilenweise durch das Protokoll zu scrollen, und Q, um das Programm zu beenden.



Standardmäßig zeigt journalctl die Zeit von Ereignissen gemäß der in Ihrem System konfigurierten Zeitzone an. Mit journalctl können Sie auch Protokolle mit UTC-Zeit anzeigen (in diesem Zeitstandard werden Ereignisse in Journald-Dateien gespeichert). Dazu können Sie den folgenden Befehl verwenden:



# journalctl --utc

      
      





Ereignisse nach Wichtigkeit filtern



Das System zeichnet Ereignisse mit unterschiedlichen Schweregraden auf. Einige Ereignisse können eine Warnung sein, die ignoriert werden kann, andere können schwerwiegende Fehler sein. Wenn nur Fehler

angezeigt werden sollen und andere Meldungen ignoriert werden sollen, geben Sie den Befehl ein, der den Schweregradcode angibt: # journalctl -p 0



Für Schweregrade wird die folgende Notation akzeptiert:

  • 0: Notfall (System funktioniert nicht)
  • 1: Warnungen (Warnungen, die sofortige Aufmerksamkeit erfordern)
  • 2: kritisch
  • 3: Fehler
  • 4: Warnung
  • 5: beachten
  • 6: info (Informationsnachrichten)
  • 7: Debug (Debug-Meldungen)




Wenn Sie einen Schweregradcode angeben, druckt journalctl alle Nachrichten mit diesem Schweregradcode und höher. Wenn wir beispielsweise die Option -p 2 angeben, zeigt journalctl alle Nachrichten mit den Ebenen 2, 1 und 0 an.



Einrichten des Protokollspeichers



Standardmäßig überschreibt Journald seine Protokolle bei jedem Neustart, und beim Aufrufen von journalctl werden die Protokolle vom aktuellen Systemstart gedruckt.

Wenn Sie das permanente Speichern von Protokollen konfigurieren müssen, müssen Sie dies separat konfigurieren, da Die Entwickler haben den permanenten Speicher aller Protokolle aufgegeben, um rsyslog nicht zu duplizieren.



Wenn der Parameter Storage = in der Konfigurationsdatei /etc/systemd/journald.conf auf auto) gesetzt ist und das Verzeichnis / var / log / journal / nicht vorhanden ist, wird das Protokoll in / run / log / journal geschrieben, ohne zwischen den Neustarts gespeichert zu werden, wenn / var / log / journal / existiert, die Protokolle werden dort dauerhaft gespeichert. Wenn das Verzeichnis jedoch entfernt wird, erstellt systemd es nicht automatisch neu und meldet sich stattdessen ohne Speichern wieder bei / run / systemd / journal an. In diesem Fall kann das Verzeichnis neu erstellt werden, indem Storage = persistent zu journald.conf hinzugefügt und systemd-journald.service neu gestartet (oder neu gestartet) wird.



Erstellen Sie ein Verzeichnis zum Speichern von Protokollen, legen Sie die erforderlichen Attribute fest und starten Sie den Dienst neu:



# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
      
      





Download-Protokolle anzeigen



Wenn journald so konfiguriert wurde, dass die Protokolle dauerhaft gespeichert werden, können wir die Protokolle für jeden einzelnen Download anzeigen. Der folgende Befehl listet die Protokolle auf:



# journalctl --list-boots
      
      









Die erste Nummer zeigt die Protokollnummer, mit der das Protokoll einer bestimmten Sitzung angezeigt werden kann. Die zweite Start-ID kann auch zum Anzeigen eines separaten Protokolls verwendet werden.



Die nächsten beiden Daten, der Zeitraum, in dem Protokolle darauf geschrieben wurden, sind praktisch, wenn Sie Protokolle für einen bestimmten Zeitraum suchen möchten.



Um beispielsweise das Protokoll vom aktuellen Systemstart anzuzeigen, können Sie den folgenden Befehl verwenden:



# journalctl -b 0
      
      





Und um das Protokoll des vorherigen Downloads anzuzeigen:



# journalctl -b -1
      
      





Protokoll für einen bestimmten Zeitraum anzeigen



Mit Journalctl können Sie Wörter wie "gestern" (gestern), "heute" (heute), "morgen" (morgen) oder "jetzt" (jetzt) ​​verwenden.

Daher können wir die Option "--since" verwenden (ab Beginn dieses Zeitraums, um das Protokoll anzuzeigen).



Ab einem bestimmten Datum und einer bestimmten Uhrzeit:



# journalctl --since "2020-12-18 06:00:00"
      
      





Von einem bestimmten Datum zu einem bestimmten Datum und einer bestimmten Uhrzeit:



# journalctl --since "2020-12-17" --until "2020-12-18 10:00:00
      
      





Seit gestern:



# journalctl --since yesterday
      
      





Von 9 Uhr bis vor einer Stunde:



# journalctl --since 09:00 --until "1 hour ago"
      
      





Anzeigen von Kernel-Nachrichten



Verwenden Sie den Befehl mit der Option -k, um Nachrichten vom Linux-Kernel für den aktuellen Start anzuzeigen:



# journalctl -k
      
      









Anzeigen der Protokolle für einen bestimmten Systemdienst oder eine bestimmte Anwendung



Sie können Protokolle nach bestimmten systemd-Diensten filtern. Um beispielsweise die Protokolle in NetworkManager anzuzeigen, können Sie den folgenden Befehl verwenden:







# journalctl -u NetworkManager.service
      
      







Wenn Sie den Namen des Dienstes suchen müssen, verwenden Sie den folgenden Befehl:



# systemctl list-units --type=service
      
      





Sie können das Anwendungsprotokoll auch anzeigen, indem Sie die ausführbare Datei angeben. Um beispielsweise alle Nachrichten von nginx für heute anzuzeigen, können Sie den folgenden Befehl verwenden:



# journalctl /usr/sbin/nginx --since today
      
      





Oder durch Angabe einer bestimmten PID:



# journalctl _PID=1

      
      





Zusätzliche Anzeigeoptionen



Achten Sie auf neue Nachrichten (ähnlich wie bei tail -f):



# journalctl -f
      
      





Öffnen Sie das Protokoll, indem Sie es bis zum letzten Eintrag "zurückspulen":



# journalctl -e
      
      





Wenn sich im Verzeichnis mit den Protokollen viele Daten befinden und das Filtern der journalctl-Ausgabe einige Zeit in Anspruch nehmen kann, kann der Prozess mithilfe der Option --file erheblich beschleunigt werden, wobei journalctl nur das Protokoll angibt, das wir überwachen müssen:



journalctl --file /var/log/journal/e02689e50bc240f0bb545dd5940ac213/system.journal -f
      
      





Standardmäßig schneidet journalctl Teile von Linien ab, die nicht zur Bildschirmbreite passen, obwohl manchmal ein Zeilenumbruch vorzuziehen ist. Diese Funktion wird von der Umgebungsvariablen SYSTEMD_LESS gesteuert, die die an less übergebenen Optionen enthält (das Standard-Paging-Programm). Standardmäßig lautet die Variable FRSXMK. Wenn Sie die Option S entfernen, werden die Zeilen nicht abgeschnitten.



Zum Beispiel:



SYSTEMD_LESS=FRXMK journalctl
      
      





Protokollgröße begrenzen



Wenn journald so konfiguriert ist, dass Journale nach dem Neustart gespeichert werden, ist die Größe des Journals standardmäßig auf 10% des Volumens der Dateipartition begrenzt und kann maximal 4 GB Festplattenspeicher belegen.

Die maximale Protokollgröße kann angepasst werden, indem die folgende Einstellung in der Journald-Konfigurationsdatei auskommentiert und bearbeitet wird:



SystemMaxUse=50M
      
      





Protokolle löschen



Sie können archivierte Protokolldateien manuell mit rm oder mit journalctl löschen.



Löschen Sie die Protokolle und lassen Sie nur die letzten 100 MB übrig:



# journalctl --vacuum-size=100M
      
      





Löschen Sie Protokolle, und lassen Sie nur Protokolle der letzten 7 Tage übrig:



# journalctl --vacuum-time=7d
      
      





Fazit



Der Journald-Protokollierungsdienst ist ein sehr leistungsfähiges und flexibles Tool. Wenn Sie wissen, wie man ihn verwendet, kann er Ihnen das Leben erheblich erleichtern, wenn Sie nach den Ursachen für Probleme mit dem System oder seinen Diensten suchen.










All Articles