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

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

systemd ist die Standardeinstellung bei den meisten großen Linux-Distributionen. Eines der Hauptmerkmale von systemd ist die Art und Weise, wie es Protokolle sammelt, und die Tools, die es zur Analyse dieser Protokolle bereitstellt.

Im traditionellen SysVinit-System haben Sie Syslog, das Protokolle in Klartextdateien speichert. Das Lesen und Analysieren dieser Dateien erfordert die Verwendung von find, grep, cut und vielen anderen Befehlen.

systemd sammelt Protokolle aus mehr Quellen als Syslogs, hält die Journalprotokolle im Binärformat und gibt Ihnen ein Befehlszeilentool zum Lesen, Analysieren und Bearbeiten der Protokolle. Dies ist schlanker als die Syslogs.

Was ist journald? Was ist journalctl?

journald ist der Daemon von systemd, der die Protokolle von verschiedenen Protokollquellen wie syslog sammelt.

journalctl ist das Befehlszeilentool, mit dem Sie mit den Journalprotokollen interagieren können.

Mit journalctl können Sie Protokolle lesen, die Protokolle in Echtzeit überwachen und die Protokolle nach Zeit, Dienst, Schweregrad und anderen Parametern filtern.

In diesem Tutorial zeige ich Ihnen, wie Sie journalctl zum Lesen, Überwachen und Analysieren der Protokolle in Linux verwenden.

Überprüfen Sie, ob Journalprotokolle auf Ihrem System aktiviert sind

Einige Linux-Distributionen, insbesondere die Desktop-Distributionen, aktivieren die Journalprotokolle nicht standardmäßig.

Der Standardspeicherort von Journald-Protokollen ist /var/log/journal Verzeichnis. Stellen Sie sicher, dass dieses Verzeichnis existiert. Wenn nicht, erstellen Sie es selbst.

Als nächstes stellen Sie in der Datei /etc/systemd/journald.conf sicher, dass der Wert Storage entweder auf auto eingestellt ist oder persistent .

Die Datei journald.conf zeigt die Standardwerte. Auch wenn vor den Einträgen ein # steht, bedeutet dies, dass dies die Standardeinstellungen sind, die verwendet werden. Wenn Sie etwas ändern möchten, entfernen Sie das # aus dieser Zeile.

Journalctl-Befehle verwenden

Lassen Sie mich Ihnen einige der grundlegendsten und dennoch nützlichsten Beispiele für den Befehl journalctl zeigen.

Lesen und durchsuchen Sie Protokolle mit journalctl

Wenn Sie einfach journalctl eingeben im Terminal werden die Journalprotokolle in chronologischer Reihenfolge angezeigt.

journalctl

journalctl verwendet less darunter, um Ihnen die Protokolle anzuzeigen. Das bedeutet, dass Sie dieselben Tasten verwenden können, um sich durch die Protokolle zu bewegen, wie Sie es mit dem Befehl less tun.

Wenn Sie sich nicht daran erinnern, hier ein kurzer Rückruf:

Schlüssel Beschreibung
Pfeil Eine Zeile verschieben
Leerzeichen Eine Seite nach unten
b Eine Seite nach oben bewegen
g Gehen Sie zur ersten Zeile
G Zur letzten Zeile gehen
100 g Gehen Sie zur 100. Zeile
/string Suche nach der Zeichenfolge ab aktueller Position
n/N Zum nächsten oder vorherigen Suchtreffer gehen
q Verlasse die Protokolle

Wenn Sie nicht möchten, dass die Protokolle in einem weniger ähnlichen Ansichtsmodus angezeigt werden, können Sie den --no-pager verwenden Flagge. Dadurch werden ganze Protokolle direkt auf dem Bildschirm angezeigt.

journalctl --no-pager

Dies ist nicht sehr nützlich und wird Ihren Bildschirm überschwemmen, wenn Sie eine große Menge an Protokollen haben.

Protokolle in umgekehrter chronologischer Reihenfolge anzeigen

Wie Sie bemerkt haben, werden die Protokolle in chronologischer Reihenfolge angezeigt. Das bedeutet, dass die ältesten gespeicherten Protokolle zuerst angezeigt werden.

Wenn Sie zuerst die letzten Protokolle sehen möchten, können Sie die Journalprotokolle mit der Option -r in umgekehrter Reihenfolge anzeigen :

journalctl -r

Es verwendet immer noch einen weniger Befehl wie view. Drücken Sie also q um den Protokollansichtsmodus zu verlassen.

Nur N aktuelle Zeilen von Journalprotokollen anzeigen

Anstatt alle Protokolle anzuzeigen, können Sie mit -n wählen, nur eine bestimmte Anzahl von Zeilen aus dem Protokoll anzuzeigen Option.

Der folgende Befehl zeigt beispielsweise die letzten 25 Zeilen der Protokolle an:

journalctl -n 25

Journalprotokolle in Echtzeit anzeigen

Das Anzeigen der letzten Protokolle ist eine Sache, wenn Sie die Protokolle in Echtzeit sehen möchten, können Sie den -f verwenden Option des journalctl-Befehls:

journalctl -f

Wie die Option -f des Befehls tail zeigt dies die Protokolle in Echtzeit im Folgemodus an.

Verwenden Sie den Befehl Strg+C, um die Echtzeitansicht zu verlassen.

Protokolle in UTC-Zeit anzeigen

Standardmäßig werden die Journalprotokolle in der Ortszeit Ihres Systems angezeigt. Wenn die Zeit Ihres Systems auf eine andere Zeit als UTC eingestellt ist und Sie die Protokolle in UTC sehen möchten, können Sie dies mit --utc tun Flagge.

journalctl --utc

Zeige nur Kernelmeldungen mit -k

Das systemd-Journal sammelt Protokolle aus verschiedenen Quellen. Wenn Sie nur Linux-Kernel-Protokolle sehen möchten, können Sie die Option -k verwenden .

journalctl -k

Tipp:Verwenden Sie sudo, um alle Journalprotokolle anzuzeigen

Systemd achtet darauf, welche Art von Protokollen welchem ​​Benutzer angezeigt werden sollen.

Es kann einige Protokolle anzeigen, aber nicht alle Protokolle, wenn Sie ein normaler Benutzer sind:

[email protected]:~$ journalctl -u ssh
Hint: You are currently not seeing messages from other users and the system.
      Users in groups 'adm', 'systemd-journal' can see all messages.
      Pass -q to turn off this notice.
-- Logs begin at Mon 2020-06-22 12:05:47 UTC, end at Tue 2020-07-14 11:59:29 UTC. --
-- No entries --

Wenn Sie Zugriff auf alle Protokolle haben möchten, sollten Sie sudo verwenden, wenn Sie ein sudo-Benutzer sind:

sudo journalctl -u ssh

Zeige Meldungen von einer bestimmten Boot-Sitzung

Dies ist eine hervorragende Funktion von jounrald. Mit dem Befehl journalctl können Sie mit der Option -b auf Protokolle zugreifen, die zu einer bestimmten Startsitzung gehören .

Sie können alle Boot-Sessions mit --list-boots auflisten Flagge.

journalctl --list-boots

Die Ausgabe zeigt die Startsitzungen mit der Startzeit und einer den Startsitzungen zugewiesenen Ganzzahl:

  -5 513008ead8464c23aab732a2feed5277 Sun 2020-07-12 20:43:38 IST—Sun 2020-07-12 22:40:02 IST
  -4 caff16e3f46a4479b5287fb9e294f610 Mon 2020-07-13 07:36:04 IST—Mon 2020-07-13 19:13:44 IST
  -3 5665f41cc50a4dec9955efacc2596d68 Mon 2020-07-13 20:30:55 IST—Mon 2020-07-13 22:20:34 IST
  -2 c7d17407b0bd476a930af503f64b6006 Tue 2020-07-14 07:58:41 IST—Tue 2020-07-14 18:50:04 IST
  -1 7ab5e04518ec455abe0e2c86fdaa46fa Tue 2020-07-14 21:19:27 IST—Tue 2020-07-14 22:42:11 IST
   0 91856e86d4ee4e828717913deb288568 Wed 2020-07-15 08:11:51 IST—Wed 2020-07-15 17:14:10 IST

Startsitzung 0 sind die aktuellen Startsitzungen. Bootsession -1 ist die letzte gebootete Session und so weiter.

journalctl -b -2

Stellen Sie sich vor, Sie versuchen dies im alten Syslog-System!

Sie können nicht nur die Boot-Protokolle abrufen, wie Sie sie in /var/log/boot.log sehen . Die Startprotokolle stehen jedoch immer am Anfang der Protokolle, wenn Sie sich in der Startsitzungsansicht befinden.

Journalprotokolle für einen bestimmten systemd-Dienst filtern

Das Filtern ist eine Stärke von Journalprotokollen. Sie können Protokolle basierend auf den systemd-Diensten filtern.

journalctl -u service_name

Wenn Sie beispielsweise von SSH generierte Protokolle sehen möchten, können Sie es wie folgt verwenden:

journalctl -u ssh

Sie müssen natürlich den Namen des systemd-Dienstes kennen.

Protokolle für ein bestimmtes Zeitintervall filtern

Dies ist ein weiteres Beispiel für die String-Filterfunktion der Journalprotokolle. Sie können Protokolle für einen bestimmten Zeitraum filtern, und es gibt verschiedene Möglichkeiten, dies zu tun.

Sie können die Protokolle mit natürlicher Sprache filtern. Begriffe wie gestern, heute und morgen werden erkannt.

journalctl --since=yesterday --until=now

Sie können auch Datum oder Datum-Zeit-Kombination angeben:

journalctl --since "2020-07-10"

Sie können auch einen Zeitraum mit Datum und Uhrzeit angeben:

journalctl --since "2020-07-10 15:10:00" --until "2020-07-12"

Die Zeit beginnt um 00:00:00 und bestimmt den Tag und das Datum.

Sie können auch eine relative Zeit wie -1h20min verwenden, um 1 Stunde 20 Minuten in der Vergangenheit anzugeben.

Filtern Sie Protokolle basierend auf UID, GID und PID

Wenn Sie ein Problem debuggen, möchten Sie möglicherweise die Protokolle für einen bestimmten Prozess anhand seiner PID überprüfen.

Die Journalprotokolle können auch nach Benutzer-ID (UID), Gruppen-ID (GID) und Prozess-ID (PID) gefiltert werden. Unten ist ein Beispiel:

journalctl _PID=1234

Tipp:Kombinieren Sie mehr als eine Option für eine maßgeschneiderte Protokollanzeige

Sie können mehrere Optionen kombinieren, um die gewünschten Protokolle anzuzeigen.

Wenn Sie beispielsweise nur SSH-Protokolle von gestern in UTC-Zeitstempeln sehen möchten, können Sie Folgendes verwenden:

sudo journalctl -u ssh --since=yesterday --utc

Eine weitere häufige Verwendung ist das Filtern von Protokollen basierend auf Startsitzungen. Wenn Sie nur die SSH-Protokolle in der aktuellen Sitzung sehen möchten, können Sie Folgendes verwenden:

sudo journalctl -u ssh -b0

Die Möglichkeiten sind endlos und Sie können die Optionen je nach Bedarf kombinieren.

Verwenden von journalctl -xe zum Anzeigen der letzten Protokolle

Sie werden oft Leute finden, die vorschlagen, journalctl -xe zu verwenden Befehl.

  • -e :Zum Ende der Journalprotokolle springen
  • -x :Zusätzliche Informationen zu den Protokolleinträgen anzeigen (falls verfügbar)

Einige Protokolleinträge enthalten zusätzliche Informationen, die in der normalen Protokollansicht nicht angezeigt werden. Mit dem -x Option kann solche Informationen anzeigen.

Was Sie als einzelne Zeile wie diese sehen:

Jul 09 16:33:40 itsfoss systemd[1]: Started Run anacron jobs.

Es könnte weitere Informationen wie diese anzeigen:

Jul 09 16:33:40 itsfoss systemd[1]: Started Run anacron jobs.
-- Subject: A start job for unit anacron.service has finished successfully
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- A start job for unit anacron.service has finished successfully.
-- 
-- The job identifier is 3702.

Die zusätzlichen Informationen helfen, den Kontext eines Fehlers oder Protokollereignisses und die möglichen Lösungen zu erläutern.

Zeige nur Fehler in Protokollen mit journalctl

Um alle Fehler in der aktuellen Sitzung anzuzeigen, können Sie Folgendes verwenden:

journalctl -p 3 -xb
  • -p 3 :Protokolle nach Priorität 3 filtern (was Fehler ist)
  • -x :liefert zusätzliche Informationen zum Protokoll (falls verfügbar)
  • b :seit dem letzten Start (das ist die aktuelle Sitzung)

Sie können auch andere Prioritätsstufen verwenden, um Debug-, Warn- oder sogar kritische Stufenprotokolle zu erhalten. Diese Tabelle listet alle Prioritätsstufen auf.

Priorität Code
0 auftauchen
1 Warnung
2 kritisch
3 irr
4 Warnung
5 Hinweis
6 Informationen
7 debuggen

Sie können auch Protokolle für verschiedene Schweregrade anzeigen. Wenn Sie beispielsweise alle Warn-, Hinweis- und Infoprotokolle der aktuellen Sitzung sehen möchten, können Sie Folgendes verwenden:

journalctl -p 4..6 -b0

Sie hätten auch warning..info verwenden können im obigen Befehl anstelle von 4..6 .

Überprüfen Sie, wie viel Speicherplatz Protokolle beanspruchen

Der Journald sammelt Protokolle aus verschiedenen Quellen und speichert Protokolle verschiedener Ebenen, einschließlich Debug-Protokolle. Vertrauen Sie mir, obwohl das Aufbewahren von Protokollen bei der Analyse und Prüfung hilfreich ist, können sie beträchtlichen Speicherplatz beanspruchen.

Mit diesem journalctl-Befehl können Sie überprüfen, wie viel Speicherplatz die Journalprotokolle belegen:

journalctl --disk-usage

Sie könnten überrascht (oder schockiert) sein, wenn Sie die Ausgabe sehen:

[email protected]:~$ journalctl --disk-usage 
Archived and active journals take up 2.8G in the file system.

2,8 GB? Das ist eine Menge. Möglicherweise möchten Sie die Journalprotokolle löschen.

Viel Spaß beim Analysieren von Protokollen mit dem journalctl-Befehl

Es gibt viele weitere Optionen und Verwendungsmöglichkeiten des Befehls journalctl, und ich kann sie unmöglich alle abdecken. Ich empfehle, seine Manpage zu lesen, wenn Sie weitere Details dazu wünschen.

Ich glaube, dass ich Ihnen genug gegeben habe, um den Befehl journalctl für die regelmäßige Protokollanalyse zu verwenden. Ich hoffe, Ihnen gefällt dieses ausführliche Tutorial zu journald.

Wenn Sie Vorschläge oder Fragen haben, zögern Sie nicht, einen Kommentar zu hinterlassen.


Linux
  1. Ein Leitfaden für Anfänger zu Linux-Berechtigungen

  2. Linux Tee-Befehl mit Beispielen

  3. Linux-Kopfbefehl mit Beispielen

  4. Linux-Grundlagen:Ein Anfängerleitfaden zur Textbearbeitung mit vim

  5. JQ-Befehl in Linux mit Beispielen

Tr-Befehl in Linux mit Beispielen

Linux-Befehle - Vollständiges Handbuch

15 Linux-PS-Befehl mit Beispielen

Linux-CD-Befehl mit Beispielen

Linux-Uhrbefehl mit Beispielen

Eine Anleitung für Anfänger zum Navigieren im Linux-Dateisystem