So verwenden Sie Ubuntu-Protokolle für die Fehlerbehebung
Bei der Behebung von Systemproblemen in Ubuntu Linux ist der beste Weg, um zu beginnen, die Durchsicht der Systemprotokolle. Grundsätzlich wird jedes Systemereignis irgendwo protokolliert. Dazu gehören Kernel-Meldungen, Dienststatusmeldungen und fast alles andere, was Sie sich vorstellen können. Es ist nicht ungewöhnlich, dass sich Systemprotokolle in kurzer Zeit schnell mit Millionen von Einträgen füllen. Mit all diesen verfügbaren Informationen müssen wir nur wissen, wie wir finden, wonach wir suchen, und können dann schnell den Schuldigen für lästige Systemprobleme in Ubuntu identifizieren.
In diesem Tutorial lernen Sie verschiedene Methoden kennen, um Systemprotokolle zur Fehlerbehebung von Problemen unter Ubuntu Linux zu verwenden. Sie sehen verschiedene Orte, an denen Protokolleinträge gespeichert werden können, und wie Sie die Daten am besten analysieren und die relevanten Informationen isolieren können. Dies ist der erste Schritt in einem Fehlerbehebungsprozess und gibt Ihnen zusätzliche Hinweise, wie Sie die Ursache von Problemen auf Ihrem System nachverfolgen können. Fangen wir an!
In diesem Tutorial lernen Sie:
- So verwenden Sie den Befehl
journalctl, um Protokolleinträge anzuzeigen - Anzeigen von Kernel- und Dienstprotokollen
- So verwenden Sie die Protokolldateien in
/var/log - So verwenden Sie AppArmor zum Generieren von Protokollen für bestimmte Ressourcen
Verwenden des systemd-Journals zum Anzeigen von Protokollen
Ubuntu ist eines der vielen Betriebssysteme, die auf systemd aufbauen. Ein Teil des systemd-Frameworks enthält journald, einen Dienst, der Protokolle sammelt. Da fast alle Dienste in systemd integriert sind, ist der Journal-Daemon in der Lage, tonnenweise Informationen über die Prozesse zu sammeln, die unter Ubuntu laufen. Der Kernel ist auch eng mit systemd integriert, so dass kernelspezifische Nachrichten auch von journald gesammelt werden.
Der systemd-Journaldienst kann mit dem Befehl journalctl abgefragt werden. Auf diese Weise sehen wir uns Protokolleinträge an und geben an, welche Art von Protokollen wir sehen möchten. Schauen wir uns einige Beispielbefehle an, um zu sehen, wie wir diesen Befehl zum Anzeigen von Protokollen in Ubuntu verwenden können:
-
Die grundlegendste Kommasyntax für
journalctlbesteht darin, sie ohne zusätzliche Optionen auszuführen. Die Ausgabe enthält alles, was Ihr System protokolliert hat, was sich aufgrund der schieren Datenmenge wahrscheinlich als zu umständlich erweisen wird, um es manuell zu durchlaufen. Denken Sie daran, dass es ziemlich üblich ist, dass die Protokolleinträge in die Millionen gehen, sobald ein Computer einige Zeit eingeschaltet war.journalctlSehen Sie sich den Screenshot unten an, um das allgemeine Format für die Protokolle zu sehen. Die Ausgabe wird automatisch an
lessweitergeleitet. Verwenden Sie dieEingabetaste, um zeilenweise zu scrollen, oder dieLeertaste, um Seite für Seite zu scrollen. Um die Protokollausgabe zu beenden, drücken Sieqauf Ihrer Tastatur.NOTE
Das Ausführen von journalctl allein ist nicht sehr hilfreich. Ein Teil des Tricks bei der Verwendung von Protokollen besteht darin, zu verstehen, wie die relevanten Informationen isoliert werden können, indem zusätzliche Befehlsoptionen verwendet oder an andere Tools wie grep weitergeleitet werden. Ein Vorteil von journald besteht darin, dass die Protokolleinträge für jeden Systemstart separat gespeichert werden. Diese Konvention erleichtert das Lokalisieren von Fehlern, die z. B. beim letzten Systemstart aufgetreten sind. Verwenden Sie die Option
--list-boots,um eine Liste aller Protokolle von vorherigen Booten anzuzeigen.journalctl --list-bootsDer Screenshot unten zeigt, dass
journalctlauf die Protokolle der letzten 11 Bootstarts unseres Systems zugreifen kann. Unser aktueller Boot wird mit der Nummer 0 gekennzeichnet und unser vorheriger Boot ist mit der Nummer 1.Versuchen wir nun, die Protokolle anzuzeigen, die während des vorherigen Systemstarts aufgezeichnet wurden. Um dies zu tun, verwenden wir die Option -b (boot) und die Zahl, die dem letzten Start entspricht, oder
-1. Sie können eine andere Nummer angeben, wenn Sie die Protokolle für einen noch älteren Start anzeigen möchten.journalctl -b -1Sie können die Boot-ID auch verwenden, um die Protokolle eines vorherigen Bootvorgangs anzuzeigen. Diese alphanumerische Zeichenkette ändert sich nicht, im Gegensatz zu den fortlaufenden Nummern, die nach jedem Start weiter inkrementiert werden.
journalctl -b b4b4ea9fd1eb431699634b90e1c24d3fMöglicherweise müssen Sie die Protokolleinträge finden, die in einem bestimmten Zeitrahmen aufgetreten sind. Zum Beispiel, wenn Sie wissen, dass in der letzten Stunde ein Systemfehler aufgetreten ist. In diesem Fall sind die Optionen
--sinceund--untilhilfreich, um relevante Protokolldateien aus einem bestimmten Zeitrahmen zu isolieren. So sehen Sie beispielsweise alle Protokolle seit gestern:journalctl --since yesterday-
Sie können die Optionen auch in Verbindung miteinander verwenden. In diesem Beispiel überprüfen wir alle Log-Einträge von gestern bis vor zwei Stunden:
journalctl --since yesterday --until "2 hours ago" Verwenden Sie das Datumsformat
JJJJ-MM-TT HH:MM:SSmit diesen beiden Optionen, wenn Sie Protokolleinträge für einen ganz bestimmten Zeitraum isolieren möchten:journalctl --since 2022-10-03 01:00:00 --until 2022-10-04 14:30:00Dies kann nützlich sein, wenn Sie sicher sind, dass ein Fehler oder ein relevantes Ereignis irgendwo während dieser Zeit aufgetreten ist, und genau feststellen müssen, wann genau er aufgetreten ist, oder wenn Sie sehen müssen, welche Daten wann protokolliert wurden.
Um Einträge anzuzeigen, die für einen bestimmten Systemdienst protokolliert wurden, verwenden Sie das Flag
-u. So sehen Sie beispielsweise alle von Nginx protokollierten Einträge:journalctl -u nginx.serviceDies würde alle Protokolleinträge anzeigen, die der Nginx-Dienst aufgezeichnet hat, einschließlich Statusmeldungen, Warnungen, Fehler usw.
Um einige der neuesten Einträge zu sehen, können wir die Option
-nverwenden. Standardmäßig werden hier die letzten 10 Protokolleinträge angezeigt.journalctl -n 10Beachten Sie, dass diese Option am nützlichsten wäre, wenn sie mit der oben beschriebenen Option
-ukombiniert wird. Andernfalls sehen Sie nur die zuletzt zugewiesene Anzahl von Protokolleinträgen für das gesamte System:journalctl -n 10 -u nginx.serviceAnzeigen von Kernel-Protokollen mit journalctl
Um nur Kernel-bezogene Nachrichten zu sehen, die in journald protokolliert sind, geben wir die Option
-kan:journalctl -kDa diese Option allein jedoch zu viele Protokolleinträge zurückgeben würde, kann es hilfreich sein, nur die Einträge mit einer bestimmten Priorität anzuzeigen. Die höchste Priorität ist Ebene 0 und die niedrigste Ebene ist Ebene 7. Die Protokollebenen lauten wie folgt:
0: emergency 1: alert 2: critical 3: error 4: warning 5: notice 6: info 7: debugWeitere Informationen finden Sie hier: Einführung in die Protokollebenen des Linux-Kernels
Verwenden Sie die Option
-p, um Protokolle einer bestimmten Ebene sowie alle darüber liegenden Protokolle mit Priorität anzuzeigen. In diesem Beispiel gehen wir von Stufe 3 aus, d. h. von jedem Eintrag, der als Fehler, kritisch, Alarm oder Notfall markiert ist.journalctl -p 3Zusätzliche Befehle mit journalctl verwenden
Wir können auch Befehle wie
grepverwenden, um relevante Daten in der Ausgabe vonjournalctlzu finden. Lassen Sie uns zum Beispiel nach Einträgen suchen, die den Text "GNOME" (den Namen unserer installierten GUI) enthalten. Beachten Sie, dass die Option-idie Groß-/Kleinschreibung nur unempfindlich macht:journalctl | grep -i gnomeDas Piping an den
Tail-Befehlist nützlich, um die neuesten Einträge in der Ausgabe zu überprüfen:journalctl | grep -i gnome | tail
Anzeigen von Protokolldateien
Vor der Einführung eines universellen Protokollierungssystems (journald) wurden Protokolle in der Regel in Dateien gespeichert, die sich im Verzeichnis /var/log befanden. Das Durchsehen dieses Verzeichnisses erweist sich nicht mehr als so nützlich wie früher, da der Kernel und die meisten Dienste heutzutage auf journald angewiesen sind, um Protokolleinträge zu speichern, und wir bereits den praktischen Befehl journalctl haben, um diese effizient anzuzeigen.
Einige Dienste wie der apt-Paketmanager und Systemereignisse wie der Bootvorgang selbst speichern jedoch Einträge in /var/log. Nischenprogramme und benutzerdefinierte Skripte können dieses Verzeichnis ebenfalls nutzen, so dass es sich lohnen kann, es zu überprüfen.
Verwenden Sie einfach den Befehl cat oder less, um die Protokolleinträge in einer Datei anzuzeigen. Möglicherweise müssen Sie auch grep verwenden, um genau die Informationen zu isolieren, nach denen Sie suchen:
cat /var/log/service/file.log
Protokolldateien werden regelmäßig in diesem Verzeichnis rotiert, da sie sich mit zu vielen Einträgen füllen und nach einiger Zeit Speicherplatz verbrauchen. Der logrotate-Dienst ist für die Rotation dieser Protokolldateien verantwortlich und kann entsprechend Ihren Anforderungen konfiguriert werden.
Verwenden von AppArmor-Protokollen
AppArmor ist ein obligatorisches Zugriffskontrollberechtigungssystem (MAC), das in verschiedenen Distributionen, einschließlich Ubuntu Linux, implementiert ist. AppArmor weist Prozessen, Netzwerkports, Dateien und Benutzern "Profile" zu. Durch die Verwendung von AppArmor können Benutzer überwachen und protokollieren, welche Entitäten versuchen, auf begrenzte Ressourcen zuzugreifen.
Hier sind einige Befehle, um mit AppArmor zu interagieren und mit der Protokollierung von Informationen zu ausgewählten Ressourcen zu beginnen:
Erstens, um den aktuellen Status von AppArmor zu überprüfen:
sudo apparmor_statusMögliche Modi sind erzwungen, beschweren und unbegrenzt.
So versetzen Sie ein Profil in den
Beschwerdemodus(gibt Warnungen aus, führt aber keine Maßnahmen aus):sudo aa-complain /path/to/binarySo versetzen Sie ein Profil in den
Erzwingungsmodus(generiert Protokolle, erzwingt aber auch Zugriffskontrollrichtlinien):sudo aa-enforce /path/to/binaryUm die von AppArmor generierten Protokolldateien anzuzeigen, können wir die Protokolldatei
/var/log/dmesgüberprüfen:cat /var/log/dmesg | grep apparmorEs wäre jedoch effizienter, verwandte AppArmor-Protokolleinträge mit dem Befehl
journalctlanzuzeigen, wie oben gezeigt.
Abschließende Gedanken
In diesem Tutorial haben wir gesehen, wie Sie Protokolle zur Behebung von Systemproblemen auf einem Ubuntu Linux-System verwenden können. Die go-to-Methode ist in der Regel der Befehl journalctl, der es uns ermöglicht, Kernel- und Service-Log-Nachrichten effizient zu lesen. Wir haben gelernt, wie verschiedene Optionen uns helfen können, die Informationen zu isolieren, die wir benötigen, um bei der Fehlerbehebung zu helfen. Andere Methoden waren das Verzeichnis /var/log und der AppArmor-Dienst, die einige zusätzliche Möglichkeiten zur Unterstützung der Protokollierung bieten.



