Website-Suche

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:

  1. Die grundlegendste Kommasyntax für journalctl besteht 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.

    
    journalctl
    

    Sehen Sie sich den Screenshot unten an, um das allgemeine Format für die Protokolle zu sehen. Die Ausgabe wird automatisch an less weitergeleitet. Verwenden Sie die Eingabetaste, um zeilenweise zu scrollen, oder die Leertaste, um Seite für Seite zu scrollen. Um die Protokollausgabe zu beenden, drücken Sie q auf 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.

  2. 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-boots
    

    Der Screenshot unten zeigt, dass journalctl auf 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.

  3. 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 -1
    
  4. Sie 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 b4b4ea9fd1eb431699634b90e1c24d3f
    
  5. Mö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 --since und --until hilfreich, um relevante Protokolldateien aus einem bestimmten Zeitrahmen zu isolieren. So sehen Sie beispielsweise alle Protokolle seit gestern:

    
    journalctl --since yesterday
    
  6. 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"
    
  7. Verwenden Sie das Datumsformat JJJJ-MM-TT HH:MM:SS mit 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:00
    

    Dies 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.

  8. 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.service
    

    Dies würde alle Protokolleinträge anzeigen, die der Nginx-Dienst aufgezeichnet hat, einschließlich Statusmeldungen, Warnungen, Fehler usw.

  9. Um einige der neuesten Einträge zu sehen, können wir die Option -n verwenden. Standardmäßig werden hier die letzten 10 Protokolleinträge angezeigt.

    
    journalctl -n 10
    

    Beachten Sie, dass diese Option am nützlichsten wäre, wenn sie mit der oben beschriebenen Option -u kombiniert wird. Andernfalls sehen Sie nur die zuletzt zugewiesene Anzahl von Protokolleinträgen für das gesamte System:

    
    journalctl -n 10 -u nginx.service
    
  10. Anzeigen von Kernel-Protokollen mit journalctl

    Um nur Kernel-bezogene Nachrichten zu sehen, die in journald protokolliert sind, geben wir die Option -k an:

    
    journalctl -k
    

    Da 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: debug
    

    Weitere Informationen finden Sie hier: Einführung in die Protokollebenen des Linux-Kernels

  11. 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 3
    
  12. Zusätzliche Befehle mit journalctl verwenden

    Wir können auch Befehle wie grep verwenden, um relevante Daten in der Ausgabe von journalctl zu 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 -i die Groß-/Kleinschreibung nur unempfindlich macht:

    
    journalctl | grep -i gnome
    
  13. Das Piping an den Tail-Befehl ist 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

WUSSTEN SIE SCHON?
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:

  1. Erstens, um den aktuellen Status von AppArmor zu überprüfen:

    
    sudo apparmor_status
    

    Mögliche Modi sind erzwungen, beschweren und unbegrenzt.

  2. So versetzen Sie ein Profil in den Beschwerdemodus (gibt Warnungen aus, führt aber keine Maßnahmen aus):

    
    sudo aa-complain /path/to/binary
    
  3. So versetzen Sie ein Profil in den Erzwingungsmodus (generiert Protokolle, erzwingt aber auch Zugriffskontrollrichtlinien):

    
    sudo aa-enforce /path/to/binary
    
  4. Um die von AppArmor generierten Protokolldateien anzuzeigen, können wir die Protokolldatei /var/log/dmesg überprüfen:

    
    cat /var/log/dmesg | grep apparmor
    

    Es wäre jedoch effizienter, verwandte AppArmor-Protokolleinträge mit dem Befehl journalctl anzuzeigen, 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.

Verwandte Artikel: