journalctl verstehen: Ihr Leitfaden für Linux-Systemprotokolle
Lernen Sie journalctl-Befehle zum Anzeigen, Filtern, Verfolgen und Bereinigen von Linux-systemd-Journalprotokollen.
journalctl verstehen: Ihr Leitfaden für Linux-Systemprotokolle
Das Dienstprogramm journalctl ist der Hauptbefehl zum Anzeigen von Protokollen, die von systemd-journald gesammelt werden. Wenn ein Dienst ausfällt, ein Bootvorgang hängt oder eine Kernel-Nachricht zu schnell vorbeiscrollt, finden Sie die Details normalerweise mit journalctl.
Im Gegensatz zu einfachen Textprotokolldateien in /var/log speichert das Journal strukturierte Einträge mit Metadaten wie Einheitenname, Priorität, Boot-ID und Zeitstempel. Dadurch können Sie Protokolle präzise filtern, anstatt mehrere Dateien zu öffnen und zu raten.
Das Systemd-Journal verstehen
Bevor wir uns mit den Befehlen befassen, ist es hilfreich zu wissen, was journalctl verwaltet. Das systemd-Journal sammelt Protokolle vom Kernel, Diensten (Units), Anwendungen und sogar dem Systemstartprozess. Diese Protokolle werden normalerweise in strukturierten Binärdateien gespeichert, was die Suche und Filterung im Vergleich zu herkömmlichen Flatfiles erheblich beschleunigt.
Wichtige Konzepte:
- Persistenz: Protokolle können so konfiguriert werden, dass sie dauerhaft über Neustarts hinweg gespeichert werden (persistenter Modus) oder nur im Arbeitsspeicher verbleiben (flüchtiger Modus).
- Strukturierte Daten: Protokolle enthalten Metadaten (wie Einheitenname, Priorität, Boot-ID), die
journalctlzum Filtern nutzt.
Grundlegende Anzeigebefehle
Das häufigste Bedürfnis ist einfach das Anzeigen der Protokolle. Hier sind die grundlegenden Befehle, um mit der Erkundung der Systemhistorie zu beginnen.
1. Alle Protokolle anzeigen
Um jeden Eintrag zu sehen, der vom Journal seit Beginn der Protokollierung gesammelt wurde, verwenden Sie den Befehl ohne Argumente:
journalctl
Standardmäßig wird diese Ausgabe mit einem Tool wie less paginiert, sodass Sie mit den Pfeiltasten oder der Leertaste navigieren können.
2. Protokolle in Echtzeit anzeigen (Folgen)
Ähnlich wie bei tail -f können Sie Protokolle überwachen, während sie in das Journal geschrieben werden. Dies ist unschätzbar wertvoll, wenn Sie einen bestimmten Dienst starten oder debuggen:
journalctl -f
Um die Echtzeitansicht zu verlassen, drücken Sie Strg+C.
3. Ausgabe auf eine bestimmte Zeilenanzahl begrenzen
Wenn Sie nur die neuesten Einträge benötigen, verwenden Sie das Flag -n, um die Anzahl der Zeilen anzugeben:
# Die letzten 20 Protokolleinträge anzeigen
journalctl -n 20
4. Protokolle seit einem bestimmten Zeitpunkt anzeigen
Das Filtern nach Zeit ist eine der stärksten Funktionen von journalctl. Sie können relative oder absolute Zeitstempel verwenden.
Beispiele für relative Zeitangaben:
| Befehl | Beschreibung |
|---|---|
journalctl --since "1 hour ago" |
Protokolle der letzten Stunde. |
journalctl --since "yesterday" |
Protokolle seit Beginn des vorherigen Kalendertages. |
journalctl --since "2023-10-26 14:30:00" |
Protokolle nach einem bestimmten Datum und einer bestimmten Uhrzeit. |
Tipp: Sie können --since und --until kombinieren, um einen genauen Bereich anzugeben, z. B.: journalctl --since "2023-10-26" --until "2023-10-27 00:00:00".
Protokolle nach Einheit, Dienst oder Prozess filtern
Eine der wichtigsten Verwendungen von journalctl ist das Isolieren von Nachrichten, die sich auf eine bestimmte systemd-Einheit (einen Dienst) beziehen.
Nach Dienstnamen filtern
Verwenden Sie das Flag -u (oder --unit) gefolgt vom Dienstnamen (z. B. sshd.service, nginx.service):
# Nur Protokolle für den Apache-Webserver-Dienst anzeigen
journalctl -u apache2.service
# Protokolle für den Docker-Dienst verfolgen
journalctl -u docker.service -f
Nach Boot-ID filtern
Systemd verfolgt Protokolle über verschiedene Systemstarts hinweg. Um Protokolle von einem vorherigen Start zu sehen, listen Sie zunächst die verfügbaren Bootvorgänge auf:
journalctl --list-boots
Dies gibt eine indizierte Liste aus (z. B. -1, -2, 0 für den aktuellen Bootvorgang). Sie können dann den Index oder die vollständige Boot-ID verwenden:
# Protokolle vom unmittelbar vorhergehenden Bootvorgang anzeigen
journalctl -b -1
# Protokolle von einer bestimmten Boot-ID anzeigen (verwenden Sie die oben aufgeführte lange ID)
journalctl -b a1b2c3d4e5f6...
Nach Kernel-Nachrichten filtern
Um nur Nachrichten anzuzeigen, die vom Kernel stammen (ähnlich wie bei dmesg):
journalctl -k
# Oder äquivalent:
journalctl -b -k
Erweiterte Filterung und Ausgabesteuerung
Effektive Fehlerbehebung erfordert oft das Kombinieren von Filtern und das Steuern des Ausgabeformats.
1. Nach Prioritätsstufe filtern
Protokollen werden Prioritätsstufen von 0 (emerg) bis 7 (debug) zugewiesen. Sie können das Flag -p oder --priority verwenden, um Nachrichten der ausgewählten Schwere und schwerwiegenderen Stufen anzuzeigen:
| Prioritätsstufe | Numerischer Wert |
|---|---|
err oder error |
3 |
warning |
4 |
notice |
5 |
info |
6 |
# Alle Fehler-, kritischen und Notfallmeldungen vom SSH-Dienst anzeigen
journalctl -u sshd.service -p err
2. Nach bestimmtem Text suchen
Wenn die Standardfilterung nicht ausreicht, können Sie die Ausgabe an grep weiterleiten oder --grep auf Systemen verwenden, deren journalctl-Version dies unterstützt:
# Alle Protokolle nach Zeilen durchsuchen, die das Wort 'failed' enthalten
journalctl | grep failed
# Oder die Option --grep für einfachere Filterung verwenden (falls verfügbar/bevorzugt)
journalctl --grep=failed
3. Ausgabeformat ändern
Für Skripterstellung oder das Übertragen von Protokollen in andere Tools ist die Änderung des Ausgabeformats unerlässlich. Der Standard ist pretty (menschenlesbar).
--output=json: Gibt Einträge als strukturierte JSON-Objekte aus.--output=short: Ähnlich wie pretty, aber weniger farbenfroh.--output=export: Gibt rohe Journaleinträge zur Archivierung aus.
# Aktuelle Protokolle als JSON ausgeben
journalctl -n 5 --output=json
4. Filter kombinieren
Filter werden multiplikativ kombiniert. Um alle Fehler von Nginx zu sehen, die in den letzten 10 Minuten aufgezeichnet wurden:
journalctl -u nginx.service --since "10 minutes ago" -p err
Journalgröße und Persistenz verwalten
Im Laufe der Zeit kann das Journal erheblichen Speicherplatz verbrauchen, insbesondere wenn es für die dauerhafte Protokollierung konfiguriert ist. Systemadministratoren müssen seine Größe verwalten.
Aktuelle Nutzung überprüfen
Um zu sehen, wie viel Speicherplatz die aktuellen Journaldateien belegen:
journalctl --disk-usage
Alte Protokolle bereinigen
Sie können Protokolle basierend auf Zeit oder Gesamtgröße löschen.
Bereinigung nach Zeit:
# Nur Protokolle der letzten 7 Tage behalten
journalctl --vacuum-time=7d
Bereinigung nach Größe:
# Gesamtprotokollgröße auf maximal 500 Megabyte reduzieren
journalctl --vacuum-size=500M
Warnung: Seien Sie vorsichtig beim Löschen von Protokollen, insbesondere von älteren Bootvorgängen (
-b). Stellen Sie sicher, dass keine wichtigen Diagnoseinformationen vorzeitig entfernt werden.
Fazit
Für die tägliche Fehlerbehebung beginnen Sie mit journalctl -u <dienst> -n 50 --no-pager, fügen Sie -f hinzu, wenn Sie Live-Ausgabe benötigen, und verwenden Sie --since oder -b, wenn das Problem an einen Zeitraum oder Bootvorgang gebunden ist. Überprüfen Sie vor dem Löschen von Protokollen journalctl --disk-usage und bewahren Sie genügend Verlauf für Rollback und Vorfallüberprüfung auf.