Einführung
Systemd protokolliert alle Linux-Meldungen des Kernels und der Systemprozesse. Der Befehl journalctl ermöglicht das Anzeigen und Bearbeiten der systemd-Protokolle, was ihn zu einem leistungsstarken Werkzeug für das Debuggen von Diensten und Prozessen macht.
Diese Anleitung zeigt anhand von Beispielen, wie Sie systemd-Protokolle mit journalctl lesen, kontrollieren und verwalten.
Voraussetzungen
- Zugriff auf die Befehlszeile/das Terminalfenster.
- Ein Texteditor (z. B. nano) zum Bearbeiten der Konfigurationsdatei.
- Ein Benutzer mit sudo-Berechtigungen (siehe So fügen Sie einen Benutzer zu sudoern hinzu).
Was ist Systemd?
Systemd ist ein Linux-Dienst und Systemmanager. Während Benutzer systemd nicht direkt aufrufen, enthält der Manager viele Tools und Daemons, die einzeln für verschiedene Systemprozesse ausgeführt werden können.
Eine der leistungsstärksten systemd-Funktionalitäten sind die Protokollierungsfunktionen. Systemd bietet eine zentralisierte Lösung zum Protokollieren aller Kernel- und Benutzerprozesse durch Protokolle, die als Journale bekannt sind .
Das journald Daemon sammelt alle Nachrichten, die das System ausgibt, und erstellt dann Journale, unabhängig vom Programm oder Prozess. Der Daemon sammelt Daten von allen verfügbaren Systemressourcen und speichert sie in einem binären Format.
Hinweis: Das Binärformat ermöglicht die Anpassung der Ausgabe an Ihre Anforderungen und bietet mehr Flexibilität als herkömmliche Linux-Protokolldateien.
journalctl-Syntax
Der journalctl
Der Befehl fragt die vom journald gesammelten Journaldaten ab und manipuliert sie Dämon. Das Tool ist für Systemadministratoren von entscheidender Bedeutung und ergänzt andere Linux-Protokollierungstools und Syslog-Server-Softwarelösungen.
Die Befehlssyntax lautet:
journalctl <options> <matches>
Ohne Parameter ist die journalctl
Befehl gibt den gesamten Journalinhalt beginnend mit dem ältesten Eintrag aus. Die <match>
ist ein oder mehrere durch Leerzeichen getrennte Argumente zum Filtern der Ausgabefelder. Das Format ist "FIELD=VALUE"
.
journalctl-Optionen
Die folgende Tabelle fasst die gängigen journalctl
zusammen Optionen:
Option | Beschreibung |
---|---|
-a --all | Alle Felder vollständig anzeigen, einschließlich nicht druckbarer Zeichen. |
-f --follow | Zeigt die neuesten Einträge und druckt laufend neue. |
--no-full | Kürzt die Ausgabe. |
-e --pager-end | Springt zum Pager-Ende. |
-n <number> --lines=<number> | Zeigt die neuesten Einträge, begrenzt auf <number> von Veranstaltungen. Ohne Argument ist der Standardwert zehn (10). |
-o <format> --output=<format> | Zeigt die Journaleinträge im angeforderten <format> an . |
--utc | Zeigt die Zeit im Format der koordinierten Weltzeit (UTC) an. |
-x --catalog | Fügt Erklärungstext zur Protokollnachricht hinzu, sofern verfügbar. |
-q --quiet | Unterdrückt informative Meldungen in der Ausgabe. |
-b [<ID> or <+-offset>] --boot[=<ID> or <+-offset>] | Zeigt Protokolle von einem bestimmten Start. Wenn Sie das Argument weglassen, werden die aktuellen Boot-Protokolle angezeigt. |
-k --dmesg | Zeigt nur Kernel-Meldungen. |
--list-boots | Zeigt eine Tabelle mit Startnummern und deren IDs an. |
-g <regex> --grep=<regex> | Filtert die Ausgabe gemäß der grep-Regex-Syntax. |
-S <date> , -U <date> --since=<date> , --until=<date> | Zeigt Einträge, die neuer oder älter als das angegebene Datum sind. |
-u <unit|pattern> --unit=<unit|pattern> | Protokolle für die angegebene systemd-Einheit oder jede Einheit anzeigen, die mit <pattern> übereinstimmt . |
--disk-usage | Berechnet und zeigt die gesamte Journalgröße auf der Festplatte an. |
--vaccuum-size=<size> | Beschränkt die Größe der archivierten Journaldatei auf |
--vaccuum-time=<time> | Beschränkt die archivierten Journale auf neuer als |
--no-pager | Deaktiviert den Pager und zeigt ihn als Standardausgabe an. |
Prüfen Sie journalctl
Handbuchseite mit dem Befehl man für eine vollständige Liste der Optionen.
Wie man systemd liest
Der folgende Abschnitt beschreibt, wie Sie systemd-Protokolle lesen und die verschiedenen Anzeigeoptionen für journalctl
verwenden Befehl. Die Ausgabe ist für jede Maschine anders, da Datensätze für jedes System einzigartig sind.
Alle Journaleinträge anzeigen
Um alle Journaleinträge anzuzeigen, verwenden Sie den journalctl
Befehl ohne Optionen:
journalctl
Die erste Zeile der Ausgabe zeigt den Zeitbereich der Protokolldaten. Die Spalten enthalten die folgenden Daten in der Reihenfolge von links nach rechts:
- Datum und Uhrzeit.
- Host.
- Protokollquelle.
- Protokollnachricht.
Die Journaldaten enthalten viele Einträge. Verwenden Sie die Pfeiltasten (ähnlich dem less-Befehl) zum Navigieren.
Verlassen Sie das Journal, indem Sie q drücken .
Neueste Einträge anzeigen
Der journalctl
zeigt standardmäßig die ältesten Einträge an. Um zum Pager-Ende zu springen und die neuesten Einträge anzuzeigen, verwenden Sie den -e
Möglichkeit:
journalctl -e
Die Ausgabe zeigt die letzten 1000 Einträge, um Platz zu sparen.
Um zu steuern, wie viele Zeilen in der Ausgabe angezeigt werden, verwenden Sie -n
Option gefolgt von der Anzahl der Zeilen. Um beispielsweise die fünf neuesten Journaleinträge anzuzeigen, verwenden Sie:
journalctl -n 5
Der -e
Option ist unnötig und wird durch -n
impliziert Möglichkeit. Wenn Sie die Nummer weglassen, werden standardmäßig die zehn neuesten Einträge angezeigt.
Beschränken Sie die Protokolle auf den spezifischen Startvorgang
Um die Protokolle auf den aktuellen Start zu beschränken, verwenden Sie -b
Tag ohne Parameter:
journalctl -b
Ohne Parameter zeigt der Befehl aktuelle Boot-Protokolle.
Springen Sie zu einem bestimmten Start, indem Sie einen Offset-Parameter hinzufügen. Zeigen Sie beispielsweise die vorherigen Boot-Protokolle mit:
journalctl -b -1
Zeigen Sie alternativ das älteste verfügbare Boot-Protokoll an mit:
journalctl -b +1
Eine alternative Möglichkeit, einen bestimmten Startvorgang anzuzeigen, ist die Verwendung einer Start-ID. Rufen Sie die Boot-IDs mit --list-boots
ab mit:
journalctl --list-boots
Die erste Spalte zeigt die negative Offset-Nummer, während die zweite Spalte die Boot-ID abruft . Kopieren Sie die ID und fügen Sie sie als Parameter zum Befehl hinzu, zum Beispiel:
journalctl -b cc07702b00884ec59312ece62604cac8
Die Ausgabe beschränkt die Protokollanzeige auf die bereitgestellte ID-Instanz.
Protokolle innerhalb eines bestimmten Zeitfensters anzeigen
Filtern Sie das Journal, indem Sie ein Zeitlimit angeben. Die zwei Optionen für die Begrenzung seit oder bis zu einem bestimmten Zeitpunkt sind:
journalctl -S <datetime>
journalctl -U <datetime>
Verwenden Sie die Optionen einzeln oder kombinieren Sie sie, um ein Zeitfenster zu erstellen.
Der Befehl erwartet eines der folgenden Datums- und Zeitformate:
- Bestimmtes Datum und Uhrzeit, zum Beispiel
2022-04-30 09:20:00
. Wenn Sie den Zeitparameter weglassen, wird standardmäßig00:00:00
verwendet . - Strings wie
"yesterday"
,"today"
,"2 hours ago"
, oder"now"
.
Unten ist ein Beispiel journalctl
Befehl mit einem bestimmten Zeitfenster:
journalctl -S 2022-04-02 -U 2022-04-22
Der Befehl erstellt ein Zeitfenster vom 2. April 2022 bis zum 22. April 2022. Die Ausgabe zeigt Zeitschriften, die in diesen Zeitrahmen fallen.
Verwenden Sie alternativ ein Zeichenfolgenmuster wie:
journalctl -S "50 minutes ago"
Die Ausgabe zeigt Protokolle von der angegebenen Zeit bis zur aktuellen Zeit.
Protokolle nach bestimmter systemd-Einheit anzeigen
Filtern Sie die Protokolle mithilfe von -u
nach der spezifischen systemd-Einheit -Tag und Angabe des Gerätenamens. Um beispielsweise nur die Datensätze der Jenkins-Serviceeinheit zu filtern, führen Sie Folgendes aus:
journalctl -u jenkins
Die Ausgabe zeigt die Journaleinträge, die sich auf die spezifische systemd-Einheit beziehen (in diesem Fall Jenkins).
Hinweis: Um alle derzeit aktiven systemd-Einheiten anzuzeigen, verwenden Sie:
systemctl list-units
Kernel-Meldungen anzeigen
Um nur die Protokollmeldungen des Kernel-Journals anzuzeigen, verwenden Sie -k
Möglichkeit:
journalctl -k
Die Ausgabe zeigt nur die Kernel-Meldungen des aktuellen Bootvorgangs, wobei -b
angewendet wird Schild. Um Kernelprotokolle von einer anderen Startsitzung zu finden, fügen Sie -b
hinzu Tag und suchen Sie nach einem bestimmten Boot.
Protokolle verfolgen
Verwenden Sie den -f
oder --follow
-Tag, um die neuesten Protokolle fortlaufend zu drucken:
journalctl -f
Die Ausgabe druckt die Protokolle, während sie in Echtzeit generiert werden. Die Option ermöglicht die Überwachung der Protokolle mit journalctl
wie sie anhängen.
Um den Viewer zu verlassen, drücken Sie STRG +C .
Protokollnachrichten nach Priorität filtern
Filtern Sie die Protokollmeldungen nach Priorität mit dem folgenden Befehl:
journalctl -p <number or text priority>
Es gibt folgende Prioritäten:
- Notfall –
0
oderemerg
- Warnung -
1
oderalert
- Kritisch -
2
odercrit
- Fehler -
3
odererr
- Warnung -
4
oderwarning
- Hinweis –
5
odernotice
- Informieren -
6
oderinfo
- Fehlerbehebung -
7
oderdebug
Eine niedrigere Zahl gibt die Nachrichten mit der höchsten Priorität an. Wenn Sie eine einstufige Priorität angeben, werden auch alle Protokolle mit niedrigerer Priorität (kritischer) angezeigt.
Um beispielsweise Warnungen anzuzeigen, verwenden Sie:
journalctl -p 1
Oder alternativ:
journalctl -p alert
Die Ausgabe zeigt nur Meldungen auf der Alarmstufe und wichtigere (falls vorhanden).
Protokollnachrichten basierend auf einem bestimmten Benutzer filtern
Um Protokolle für einen Benutzer anzuzeigen, rufen Sie die Benutzer-ID (UID) ab mit:
id <user>
Um die ID für den aktuellen Benutzer abzurufen, lassen Sie <user>
weg . Die Ausgabe zeigt den UID-Wert für den angegebenen Benutzer. Verwenden Sie das UID-Journalfeld, um Protokollmeldungen basierend auf dem spezifischen Benutzer zu filtern:
journalctl _UID=<UID>
Die Ausgabe filtert das Journalprotokoll basierend auf der angegebenen Benutzer-ID.
Hinweis: Eine vollständige Liste der Felder finden Sie unter systemd.journal-fields
Handbuchseite:
man systemd.journal-fields
So bearbeiten Sie die systemd-Protokollausgabe
Ein wesentlicher Aspekt bei der Arbeit mit Protokollen als Systemadministrator ist die Formatierung der Protokollausgaben. Systemd bietet viele Methoden, um das visuelle Ergebnis zu manipulieren und die Daten im gewünschten Format abzurufen.
Nachfolgend finden Sie einige Standardbearbeitungsoptionen und Beispiele für die Ausgabe.
Ausgabe auf Standardausgang
Die journalctl
Der Befehl zeigt die Ausgabe mit einem Pager an. Deaktivieren Sie den Pager mit:
journalctl --no-pager
Die resultierende Ausgabe ist die Standardausgabe (stdout). Verwenden Sie diese Option, wenn Sie die Protokolldaten mit Textbearbeitungstools oder Bash-Skripten parsen.
Ausgabe kürzen oder erweitern
Der journalctl
Pager zeigt erweiterte Journalereignisse in der Ausgabe an. rechts drücken und linke Pfeiltasten hilft bei der Navigation durch Text, der nicht zur Bildschirmgröße passt.
Um dies einzuschränken, kürzen Sie journalctl
Ausgabe verwenden Sie den --no-full
Möglichkeit:
journalctl --no-full
Die Ausgabe beschränkt die Zeilen auf die Bildschirmgröße und fügt Auslassungspunkte hinzu (...
), um eine abgeschnittene Anzeige anzuzeigen.
Ausgabeformate
Der journalctl
Der Befehl bietet verschiedene Optionen für Ausgabeformate. Die Syntax für das Ausgabeformat lautet:
journalctl -o <output format>
Einige der verfügbaren Formate sind:
cat
- Zeigt nur das Nachrichtenfeld an.export
- Ausgabe im Binärformat, geeignet für Backups.short
- Erzeugt eine Ausgabe ähnlich der klassischen Syslog-Dateien.short-precise
- Zeigt die Zeit in Mikrosekunden an.json
- Formatiert Journaleinträge in einzeilige JSON-Einträge.json-pretty
- Formatiert in JSON-Strukturen in mehreren Zeilen.
Beispielsweise zum Anzeigen mit json-pretty
formatieren, verwenden:
journalctl -o json-pretty
Verschiedene Formate ermöglichen die Verwendung der Protokolldaten in Datenbanken, Skriptdateien oder das Parsen durch Überwachungssoftware.
Protokollpflege
Das Speichern von Protokolldaten ist mit Kosten verbunden und nimmt Speicherplatz in Anspruch. Im Folgenden finden Sie einige Tipps und Tricks, um die Festplattennutzung zu ermitteln, Protokolldatendateien zu verwalten und Speicherplatz freizugeben, der von alten Protokolldateien verwendet wird.
Festplattennutzung anzeigen
Führen Sie den folgenden Befehl aus, um die Nutzung des Journaldatenträgers zu überprüfen:
journalctl --disk-usage
Die Ausgabe zeigt den gesamten belegten Speicherplatz der Festplatte durch archivierte und aktive Journale.
Alte Protokolle löschen
Löschen Sie alte Protokollarchive, indem Sie die gewünschte Größenbeschränkung festlegen. Der Befehl erfordert sudo, um die Dateien /var/log/journal zu löschen .
Stellen Sie beispielsweise die Größe auf 1M ein mit:
sudo journalctl --vacuum-size=1M
Geben Sie das sudo-Passwort ein und drücken Sie Enter . Die Ausgabe gibt die Dateinamen und -größen aus, und die letzte Zeile zeigt die Menge des freigegebenen Speichers an.
Alternativ können Sie archivierte Protokolle basierend auf der Zeit löschen. Alle Dateien, die älter als die eingestellte Zeit sind, werden gelöscht und Speicherplatz freigegeben. Um beispielsweise Dateien zu löschen, die älter als zwei Monate sind, führen Sie Folgendes aus:
sudo journalctl --vacuum-time=2months
Die Zeitsuffixe sind s
, m
, h
, days
, months
, weeks
, oder years
.
Journal begrenzen
Die Journal-Konfigurationsdatei ermöglicht das Festlegen von Grenzwerten und das Steuern, wie viele Journald-Daten auf der Festplatte belegt werden. Um die Datei zu bearbeiten, führen Sie Folgendes aus:
sudo nano /etc/systemd/journald.conf
Die Datei enthält Beispielkonfigurationsfelder. Die folgenden Parameter befassen sich mit der Journalgröße und den Speichergrenzen:
SystemMaxUse
- Maximaler persistenter Speicher, der vom Journal verwendet wird.SystemKeepFree
- Menge an freiem Speicherplatz, den ein Journal beim Hinzufügen von Einträgen zum dauerhaften Speicher hinterlässt.SystemMaxFileSize
- Legt die maximale Größe für Journaldateien im persistenten Speicher fest.RuntimeMaxUse
- Maximaler Speicherplatz für flüchtigen Speicher.RuntimeKeepFree
- Menge an freiem Speicherplatz für andere Zwecke beim Schreiben in flüchtigen Speicher.RuntimeMaxFileSize
- Legt die maximale Größe für Journaldateien im flüchtigen Speicher fest.
Dateigrößenkontrollen zielen auf archivierte Dateien ab, um die Grenzen zu erreichen. Entkommentieren Sie die Zeilen und legen Sie die Grenzen fest, um eine bessere Kontrolle über die Speicher- und Verbrauchsressourcen der Maschine zu erhalten.
Fazit
In diesem Handbuch wurde anhand von Beispielen gezeigt, wie Sie systemd-Journalprotokolle anzeigen, steuern und verwalten. Die journalctl
Der Befehl ist ein wertvolles Tool, das bei der Fehlerbehebung von Linux-Diensten und der Erkennung von Systemfehlern hilft.