Echtzeit-Überwachung von Änderungen in einer Linux-Logdatei mit 'tail'

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Linux-Logs sind der Eckpfeiler der Systemüberwachung und -fehlerbehebung und liefern unschätzbare Einblicke in die Funktionsweise Ihres Systems. In diesem Tutorial werden wir die grundlegenden Konzepte von Linux-Logs untersuchen und wie man diese effektiv mit dem vielseitigen 'tail'-Befehl überwacht.

Sie werden lernen, wo Logdateien gespeichert werden, wie Sie deren Inhalt anzeigen, Änderungen in Echtzeit verfolgen und spezifische Informationen extrahieren können. Diese Fähigkeiten sind für jeden, der mit Linux-Systemen arbeitet, unerlässlich und ermöglichen es Ihnen, Probleme zu diagnostizieren, den Systemzustand zu überwachen und zu verstehen, was Ihr System im Hintergrund tut.

Linux-Logdateien verstehen und ihre Speicherorte

Linux-Systeme führen detaillierte Aufzeichnungen über verschiedene Aktivitäten, Fehler und Ereignisse in speziellen Textdateien, den sogenannten Logdateien, die auch als Protokolldateien bezeichnet werden. Diese Logs dienen als Hauptinformationsquelle bei der Fehlerbehebung oder der Überwachung des Systemzustands.

Wo werden Linux-Logs gespeichert?

Die meisten Linux-Distributionen, einschließlich Ubuntu 22.04, speichern Logdateien im Verzeichnis /var/log. Lassen Sie uns dieses Verzeichnis erkunden, um zu sehen, welche Logdateien auf Ihrem System verfügbar sind.

Öffnen Sie Ihr Terminal und geben Sie den folgenden Befehl ein:

ls -l /var/log

Sie sollten eine Ausgabe ähnlich dieser sehen:

total 1048
drwxr-x---  2 root   adm      4096 May  2 09:52 apache2
drwxr-xr-x  2 root   root     4096 Apr 30 15:27 apt
-rw-r-----  1 syslog adm    183867 May  2 10:18 auth.log
-rw-r--r--  1 root   root     1112 Nov 17  2022 alternatives.log
drwxr-xr-x  2 root   root     4096 Apr 20  2022 cups
-rw-r-----  1 syslog adm    308342 May  2 10:18 kern.log
-rw-rw-r--  1 root   utmp        0 Apr 20  2022 lastlog
drwxr-xr-x  2 root   root     4096 Nov  8  2022 nginx
-rw-r-----  1 syslog adm    473079 May  2 10:18 syslog

Die genauen Dateien und Verzeichnisse variieren je nachdem, welche Software auf Ihrem System installiert ist.

Häufige Logdateien und deren Inhalte

Hier sind einige der wichtigsten Logdateien, auf die Sie stoßen werden:

  • /var/log/syslog: Enthält allgemeine Systemmeldungen
  • /var/log/auth.log: Protokolliert Authentifizierungsversuche und Benutzerverwaltung
  • /var/log/kern.log: Enthält Kernel-Meldungen und -Fehler
  • /var/log/apt: Verzeichnis mit Paketverwaltungs-Logs

Lassen Sie uns den Inhalt einer dieser Dateien untersuchen. Da wir uns mit der Log-Überwachung beschäftigen, beginnen wir mit einer grundlegenden Ansicht des System-Logs:

sudo head -n 20 /var/log/syslog

Der Befehl head zeigt die ersten Zeilen einer Datei an (in diesem Fall 20). Wir verwenden sudo, da einige Logdateien nur von Benutzern mit Administratorrechten gelesen werden können.

Sie sollten eine Ausgabe ähnlich dieser sehen:

May  2 08:23:15 ubuntu systemd[1]: Started Daily apt download activities.
May  2 08:23:15 ubuntu systemd[1]: Starting Daily apt upgrade and clean activities...
May  2 08:23:15 ubuntu systemd[1]: apt-daily-upgrade.service: Deactivated successfully.
May  2 08:23:15 ubuntu systemd[1]: Finished Daily apt upgrade and clean activities.
May  2 08:37:16 ubuntu systemd[1]: Starting Message of the Day...
May  2 08:37:16 ubuntu systemd[1]: motd-news.service: Deactivated successfully.
May  2 08:37:16 ubuntu systemd[1]: Finished Message of the Day.
...

Beachten Sie das Format jedes Log-Eintrags:

  • Datum und Uhrzeit
  • Hostname (ubuntu in diesem Beispiel)
  • Programm oder Dienst, der das Log generiert
  • Die eigentliche Log-Nachricht

Struktur von Log-Einträgen verstehen

Die meisten Log-Einträge folgen einem Standardformat, wodurch sie leichter zu lesen und zu verarbeiten sind. Das typische Format umfasst:

  1. Zeitstempel (Timestamp): Wann das Ereignis aufgetreten ist
  2. Hostname: Der Name der Maschine
  3. Dienst/Anwendung (Service/Application): Was das Log generiert hat
  4. Nachricht (Message): Die eigentliche Information darüber, was passiert ist

Nachdem Sie nun verstanden haben, wo sich Logs befinden und wie sie strukturiert sind, wollen wir uns nun damit befassen, die neuesten Einträge in einer Logdatei mit dem Befehl tail anzuzeigen.

Den grundlegenden 'tail'-Befehl zur Anzeige von Logdateien verwenden

Während der Befehl head den Anfang einer Datei anzeigt, zeigt der Befehl tail das Ende einer Datei an. Dies ist besonders nützlich für Logdateien, da sich die neuesten Einträge in der Regel am Ende befinden.

Grundlegende Verwendung des 'tail'-Befehls

Die grundlegende Syntax des tail-Befehls lautet:

tail [options] [file]

Standardmäßig zeigt tail die letzten 10 Zeilen einer Datei an. Versuchen wir es mit dem System-Log:

sudo tail /var/log/syslog

Sie sollten die 10 neuesten Log-Einträge sehen:

May  2 10:15:32 ubuntu systemd[1]: Starting Clean php session files...
May  2 10:15:32 ubuntu systemd[1]: phpsessionclean.service: Deactivated successfully.
May  2 10:15:32 ubuntu systemd[1]: Finished Clean php session files.
May  2 10:17:01 ubuntu CRON[8752]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:14 ubuntu systemd[1]: Started Session 4 of User labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413

Anzeigen einer benutzerdefinierten Anzahl von Zeilen

Manchmal reichen 10 Zeilen nicht aus, um den benötigten Kontext zu erhalten. Sie können mit der Option -n festlegen, wie viele Zeilen angezeigt werden sollen:

sudo tail -n 5 /var/log/syslog

Dadurch werden nur die letzten 5 Zeilen der Datei angezeigt:

May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:14 ubuntu systemd[1]: Started Session 4 of User labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413

Anzeigen von Authentifizierungsprotokollen

Die Datei /var/log/auth.log enthält Informationen über Benutzerauthentifizierung und sicherheitsrelevante Ereignisse. Sehen wir uns die neuesten Einträge an:

sudo tail -n 15 /var/log/auth.log

Sie könnten eine Ausgabe ähnlich der folgenden sehen:

May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May  2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex
May  2 10:18:15 ubuntu systemd-logind[698]: Session 4 logged out. Waiting for processes to exit.
May  2 10:18:15 ubuntu systemd-logind[698]: Removed session 4.
May  2 10:20:01 ubuntu sudo:    labex : TTY=pts/0 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/tail /var/log/syslog
May  2 10:20:01 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:20:01 ubuntu sudo: pam_unix(sudo:session): session closed for user root
May  2 10:21:15 ubuntu sudo:    labex : TTY=pts/0 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/syslog
May  2 10:21:15 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:21:15 ubuntu sudo: pam_unix(sudo:session): session closed for user root

Dieses Log zeigt Benutzeranmeldeversuche, Sitzungseröffnungen und -schließungen sowie die Verwendung des sudo-Befehls. Es ist ein wesentliches Log für die Sicherheitsüberwachung und die Fehlerbehebung bei Benutzerzugriffsproblemen.

Betrachten von Kernel-Logs

Der Kernel ist der Kern des Linux-Betriebssystems. Die Datei /var/log/kern.log enthält vom Kernel generierte Meldungen, die nützlich sind, um Hardware- und Treiberprobleme zu diagnostizieren:

sudo tail -n 10 /var/log/kern.log

Die Ausgabe könnte so aussehen:

May  2 09:15:02 ubuntu kernel: [16789.456123] USB 1-1: new high-speed USB device number 3 using xhci_hcd
May  2 09:15:02 ubuntu kernel: [16789.605432] usb 1-1: New USB device found, idVendor=0781, idProduct=5571, bcdDevice= 1.00
May  2 09:15:02 ubuntu kernel: [16789.605436] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May  2 09:15:02 ubuntu kernel: [16789.605438] usb 1-1: Product: Ultra
May  2 09:15:02 ubuntu kernel: [16789.605440] usb 1-1: Manufacturer: SanDisk
May  2 09:15:02 ubuntu kernel: [16789.605442] usb 1-1: SerialNumber: 4C530001211124120222
May  2 09:15:02 ubuntu kernel: [16789.606521] usb-storage 1-1:1.0: USB Mass Storage device detected
May  2 09:15:02 ubuntu kernel: [16789.606705] scsi host3: usb-storage 1-1:1.0
May  2 09:15:03 ubuntu kernel: [16790.624553] scsi 3:0:0:0: Direct-Access     SanDisk  Ultra            1.00 PQ: 0 ANSI: 6
May  2 09:15:03 ubuntu kernel: [16790.625045] sd 3:0:0:0: Attached scsi generic sg1 type 0

Nachdem Sie nun verstanden haben, wie Sie die neuesten Einträge in Logdateien anzeigen können, wollen wir uns nun mit der Echtzeitüberwachung von Logs befassen, was eine der leistungsstärksten Funktionen des tail-Befehls ist.

Echtzeit-Log-Überwachung mit 'tail -f'

Eine der leistungsstärksten Funktionen des tail-Befehls ist seine Fähigkeit, Dateien in Echtzeit mit der Option -f (kurz für "follow", also "verfolgen") zu überwachen. Dies ist besonders nützlich, um Logdateien zu beobachten, während neue Einträge hinzugefügt werden, was bei der Fehlerbehebung und Überwachung hilft.

'tail -f' verstehen

Die Option -f weist tail an, die Datei geöffnet zu halten und kontinuierlich neue Zeilen anzuzeigen, sobald sie der Datei hinzugefügt werden. Dies erzeugt eine Echtzeitansicht der Logdatei, sodass Sie Ereignisse sehen können, sobald sie geschehen.

System-Logs in Echtzeit überwachen

Verwenden wir die Option -f, um das System-Log in Echtzeit zu überwachen:

sudo tail -f /var/log/syslog

Nachdem Sie diesen Befehl ausgeführt haben, sehen Sie die neuesten Einträge in der Logdatei, und das Terminal bleibt geöffnet und zeigt neue Einträge an, sobald sie erscheinen.

Um einige Log-Einträge zu generieren, öffnen wir ein neues Terminalfenster (drücken Sie Strg+Alt+T, um ein neues Terminal zu öffnen) und führen ein paar grundlegende Befehle aus:

logger "This is a test message from user $(whoami)"

Der Befehl logger sendet eine Nachricht an das System-Log. Gehen Sie nun zurück zu Ihrem ersten Terminalfenster, in dem Sie tail -f ausführen, und Sie sollten Ihre Testnachricht im Log sehen:

May  2 10:34:45 ubuntu labex: This is a test message from user labex

Versuchen Sie, den Befehl logger noch ein paar Mal mit verschiedenen Nachrichten auszuführen, um zu sehen, wie sie in Echtzeit erscheinen:

logger "System test number 2"
logger "Monitoring logs is fun!"

Jede dieser Nachrichten sollte in Ihrem tail -f-Ausgabefenster erscheinen, sobald sie protokolliert werden.

Wenn Sie mit dem Beobachten des Logs fertig sind, drücken Sie Strg+C, um den Befehl tail -f zu stoppen und zur Eingabeaufforderung zurückzukehren.

Überwachung der Authentifizierungsaktivität

Überwachen wir das Authentifizierungs-Log, um Anmelde- und authentifizierungsbezogene Ereignisse zu beobachten:

sudo tail -f /var/log/auth.log

Dies zeigt Ihnen Echtzeit-Authentifizierungsaktivitäten, wie z. B. Benutzeranmeldungen, die Verwendung von sudo-Befehlen und Authentifizierungsfehler.

Um einige Auth-Log-Einträge zu generieren, öffnen Sie ein neues Terminal und führen Sie einen sudo-Befehl aus:

sudo ls /root

Sie sollten neue Einträge in Ihrem tail -f-Fenster sehen, die die sudo-Aktivität anzeigen:

May  2 10:38:23 ubuntu sudo:    labex : TTY=pts/1 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/ls /root
May  2 10:38:23 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:38:23 ubuntu sudo: pam_unix(sudo:session): session closed for user root

Drücken Sie erneut Strg+C, um den Befehl tail -f zu stoppen, wenn Sie mit der Beobachtung fertig sind.

Praktische Anwendungsfälle für die Echtzeit-Log-Überwachung

Die Echtzeit-Log-Überwachung ist in mehreren Szenarien unglaublich nützlich:

  1. Fehlerbehebung (Troubleshooting issues): Wenn etwas nicht funktioniert, kann die Echtzeitbeobachtung von Logs helfen, das Problem zu identifizieren.
  2. Sicherheitsüberwachung (Security monitoring): Die Beobachtung von Authentifizierungsprotokollen kann helfen, unbefugte Zugriffsversuche zu erkennen.
  3. Anwendungs-Debugging (Application debugging): Entwickler können Anwendungs-Logs beobachten, um zu verstehen, was während des Testens geschieht.
  4. Systemadministration (System administration): Administratoren können System-Logs während der Wartung oder bei Konfigurationsänderungen überwachen.

Wenn Sie beispielsweise ein Netzwerkproblem beheben, könnten Sie das System-Log überwachen, während Sie versuchen, eine Verbindung herzustellen, um Fehlermeldungen zu sehen, die erscheinen.

Durch die Beherrschung der Echtzeit-Log-Überwachung mit tail -f erhalten Sie ein leistungsstarkes Werkzeug, um das Verhalten Ihres Systems in Echtzeit zu verstehen.

Filtern von Log-Informationen für eine bessere Analyse

Logdateien können sehr groß sein und viele Informationen enthalten. Um die Log-Analyse überschaubarer zu gestalten, können Sie den Befehl tail mit anderen Tools wie grep kombinieren, um spezifische Informationen zu filtern und zu finden.

Verwendung von 'grep' mit 'tail'

Der Befehl grep sucht nach Mustern in Text. In Kombination mit tail können Sie Log-Einträge nach bestimmten Schlüsselwörtern oder Mustern filtern. Die grundlegende Syntax lautet:

tail [options] [file] | grep "pattern"

Sehen wir uns einige praktische Beispiele an:

Finden von Fehlermeldungen

Um Fehlermeldungen im System-Log zu finden, können Sie nach dem Wort "error" filtern:

sudo tail -n 100 /var/log/syslog | grep -i "error"

Die Option -i mit grep macht die Suche unempfindlich gegenüber Groß- und Kleinschreibung, sodass sie auf "error", "Error", "ERROR" usw. zutrifft. Sie könnten eine Ausgabe wie diese sehen:

May  2 09:23:45 ubuntu systemd[1]: Failed to start Apache HTTP Server: Job failed with error code.
May  2 09:45:12 ubuntu kernel: [12345.678901] Buffer I/O error on device sdb1, logical block 123456

Wenn Sie keine Ergebnisse sehen, bedeutet dies, dass in den letzten 100 Zeilen des Logs keine Fehlermeldungen vorhanden sind.

Überwachen bestimmter Dienste

Sie können Logs auch filtern, um einen bestimmten Dienst oder ein bestimmtes Programm zu überwachen. Um beispielsweise die SSH-bezogene Aktivität zu überwachen:

sudo tail -n 100 /var/log/auth.log | grep "sshd"

Dies zeigt nur die SSH-bezogenen Einträge im Authentifizierungs-Log an:

May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May  2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex

Echtzeit-gefilterte Überwachung

Sie können auch die Echtzeitüberwachung mit der Filterung kombinieren, um nach bestimmten Ereignissen zu suchen, während sie geschehen:

sudo tail -f /var/log/syslog | grep --line-buffered "test"

Die Option --line-buffered stellt sicher, dass grep jede übereinstimmende Zeile sofort ausgibt, anstatt sie zu puffern, was wichtig ist, wenn tail -f verwendet wird.

Generieren Sie nun in einem anderen Terminal eine Test-Log-Nachricht:

logger "This is a test message for grep filtering"

In Ihrem ersten Terminal sollten Sie nur diese Nachricht sehen (und keine anderen Log-Nachrichten) aufgrund des grep-Filters für "test".

Erweiterte Filterung mit mehreren Mustern

Sie können auch nach mehreren Mustern suchen, indem Sie den OR-Operator (|) in grep verwenden:

sudo tail -n 100 /var/log/syslog | grep -E "error|warning|critical"

Die Option -E aktiviert erweiterte reguläre Ausdrücke, sodass Sie den OR-Operator verwenden können. Dieser Befehl zeigt Zeilen an, die eines der Wörter "error", "warning" oder "critical" enthalten.

Extrahieren spezifischer Informationen mit 'awk'

Für eine erweiterte Filterung und Formatierung können Sie den Befehl awk verwenden. Um beispielsweise nur die Zeit und die Nachricht aus syslog zu extrahieren:

sudo tail -n 10 /var/log/syslog | awk '{print $3, $5, $6, $7, $8, $9, $10}'

Dies extrahiert bestimmte Felder aus jedem Log-Eintrag, wodurch es einfacher wird, sich auf die relevantesten Informationen zu konzentrieren.

Durch die Beherrschung dieser Filtertechniken können Sie große Logdateien effizient analysieren und genau die Informationen extrahieren, die Sie für die Fehlerbehebung und Überwachung benötigen.

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss dieses Labs zur Überwachung von Echtzeitänderungen in Linux-Logdateien mit dem Befehl 'tail'. Sie haben mehrere wichtige Fähigkeiten erlernt:

  1. Verständnis von Linux-Logdateien: Sie wissen jetzt, wo Logs gespeichert werden, was sie enthalten und wie Log-Einträge strukturiert sind.

  2. Grundlegende Log-Anzeige: Sie können den Befehl tail verwenden, um die neuesten Einträge in Logdateien anzuzeigen und festzulegen, wie viele Zeilen angezeigt werden sollen.

  3. Echtzeitüberwachung: Mit tail -f können Sie Logs beobachten, während sie aktualisiert werden, sodass Sie Systemaktivitäten beobachten und Probleme beheben können, sobald sie auftreten.

  4. Filtern von Log-Informationen: Durch die Kombination von tail mit Tools wie grep und awk können Sie spezifische Informationen aus Logs extrahieren und so die Analyse effizienter gestalten.

Diese Fähigkeiten sind für jeden, der mit Linux-Systemen arbeitet, unerlässlich, vom Anfänger bis zum erfahrenen Administrator. Die Log-Analyse ist ein grundlegender Bestandteil der Systemwartung, Fehlerbehebung und Sicherheitsüberwachung.

Auf Ihrem weiteren Linux-Weg werden Sie feststellen, dass Ihnen diese Log-Überwachungstechniken helfen, Ihr System besser zu verstehen, Probleme schneller zu diagnostizieren und eine sicherere und zuverlässigere Umgebung zu erhalten.