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:
- Zeitstempel (Timestamp): Wann das Ereignis aufgetreten ist
- Hostname: Der Name der Maschine
- Dienst/Anwendung (Service/Application): Was das Log generiert hat
- 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:
- Fehlerbehebung (Troubleshooting issues): Wenn etwas nicht funktioniert, kann die Echtzeitbeobachtung von Logs helfen, das Problem zu identifizieren.
- Sicherheitsüberwachung (Security monitoring): Die Beobachtung von Authentifizierungsprotokollen kann helfen, unbefugte Zugriffsversuche zu erkennen.
- Anwendungs-Debugging (Application debugging): Entwickler können Anwendungs-Logs beobachten, um zu verstehen, was während des Testens geschieht.
- 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:
Verständnis von Linux-Logdateien: Sie wissen jetzt, wo Logs gespeichert werden, was sie enthalten und wie Log-Einträge strukturiert sind.
Grundlegende Log-Anzeige: Sie können den Befehl
tailverwenden, um die neuesten Einträge in Logdateien anzuzeigen und festzulegen, wie viele Zeilen angezeigt werden sollen.Echtzeitüberwachung: Mit
tail -fkönnen Sie Logs beobachten, während sie aktualisiert werden, sodass Sie Systemaktivitäten beobachten und Probleme beheben können, sobald sie auftreten.Filtern von Log-Informationen: Durch die Kombination von
tailmit Tools wiegrepundawkkö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.



