Einführung
Linux-Protokolle bilden die Grundlage für die Überwachung und Fehlerbehebung von Systemen. Sie liefern wertvolle Einblicke in die internen Abläufe Ihres Systems. In diesem Tutorial lernen Sie die grundlegenden Konzepte von Linux-Protokollen kennen und erfahren, wie Sie sie mit dem vielseitigen Befehl „tail“ effektiv überwachen.
Sie lernen, wo Protokolldateien gespeichert werden, wie Sie deren Inhalte anzeigen, Änderungen in Echtzeit verfolgen und bestimmte Informationen herausfiltern. Diese Fähigkeiten sind für alle wichtig, die mit Linux-Systemen arbeiten: Sie helfen Ihnen, Probleme zu diagnostizieren, den Systemzustand zu überwachen und zu verstehen, was Ihr System im Hintergrund tut.
Linux-Protokolldateien und ihre Speicherorte verstehen
In diesem Schritt untersuchen Sie /var/log und lernen den Aufbau eines typischen Systemprotokolleintrags kennen. Linux-Systeme zeichnen Aktivitäten, Fehler und Ereignisse in Protokolldateien auf. Diese sind eine wichtige Informationsquelle für die Fehlerbehebung und Systemüberwachung.
Wo werden Linux-Protokolle gespeichert?
Die meisten Linux-Distributionen, einschließlich Ubuntu 22.04, speichern Protokolldateien im Verzeichnis /var/log. Sehen wir uns dieses Verzeichnis an, um herauszufinden, welche Protokolldateien auf Ihrem System vorhanden sind.
Öffnen Sie ein Terminal und geben Sie den folgenden Befehl ein:
ls -l /var/log
Die Ausgabe sollte ungefähr so aussehen:
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 genaue Auswahl an Dateien und Verzeichnissen hängt vom verwendeten Image und der installierten Software ab. In der Umgebung dieses Labs werden /var/log/syslog, /var/log/auth.log und /var/log/kern.log mit realistischen Beispieldaten angelegt, damit Sie alle Befehle zuverlässig nachvollziehen können.
Häufige Protokolldateien und ihre Inhalte
Hier sind einige der wichtigsten Protokolldateien, auf die Sie häufig stoßen werden:
/var/log/syslog: Enthält allgemeine Systemmeldungen/var/log/auth.log: Protokolliert Authentifizierungsversuche und die Benutzerverwaltung/var/log/kern.log: Enthält Kernelmeldungen und -fehler/var/log/apt: Verzeichnis mit Protokollen der Paketverwaltung
Sehen wir uns den Inhalt einer dieser Dateien an. Da wir uns mit der Überwachung von Protokollen beschäftigen, beginnen wir mit einer einfachen Ansicht des Systemprotokolls:
sudo head -n 20 /var/log/syslog
Der Befehl head zeigt die ersten Zeilen einer Datei an, in diesem Fall 20 Zeilen. Wir verwenden sudo, weil einige Protokolldateien nur von Benutzern mit administrativen Rechten gelesen werden können.
Die Ausgabe sollte ungefähr so aussehen:
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 Protokolleintrags:
- Datum und Uhrzeit
- Hostname, in diesem Beispiel
ubuntu - Programm oder Dienst, der den Eintrag erzeugt
- Die eigentliche Protokollmeldung
Aufbau eines Protokolleintrags verstehen
Die meisten Protokolleinträge folgen einem einheitlichen Format und lassen sich dadurch leichter lesen und verarbeiten. Typischerweise enthalten sie:
- Zeitstempel: Zeitpunkt, zu dem das Ereignis aufgetreten ist
- Hostname: Name des Rechners
- Dienst/Anwendung: Komponente, die den Eintrag erzeugt hat
- Meldung: Die eigentliche Information darüber, was passiert ist
Nachdem Sie nun wissen, wo Protokolle gespeichert werden und wie sie aufgebaut sind, sehen wir uns als Nächstes die neuesten Einträge einer Protokolldatei mit dem Befehl tail an.
Protokolldateien mit dem grundlegenden Befehl „tail“ anzeigen
In diesem Schritt verwenden Sie tail, um die neuesten Einträge in mehreren Übungsprotokollen zu untersuchen. Während head den Anfang einer Datei anzeigt, gibt tail das Ende aus, an dem sich normalerweise die aktuellsten Protokolleinträge befinden.
Grundlegende Verwendung des Befehls „tail“
Die grundlegende Syntax des Befehls tail lautet:
tail [options] [file]
Standardmäßig zeigt tail die letzten 10 Zeilen einer Datei an. Probieren wir es mit dem Systemprotokoll aus:
sudo tail /var/log/syslog
Sie sollten die 10 neuesten Protokolleinträ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
Eine benutzerdefinierte Anzahl von Zeilen anzeigen
Manchmal reichen 10 Zeilen nicht aus, um den benötigten Kontext zu erhalten. Mit der Option -n können Sie 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
Authentifizierungsprotokolle anzeigen
Die Datei /var/log/auth.log enthält Informationen zur Benutzerauthentifizierung und zu sicherheitsrelevanten Ereignissen. Sehen wir uns die neuesten Einträge an:
sudo tail -n 15 /var/log/auth.log
Die Ausgabe könnte ungefähr so aussehen:
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 Protokoll zeigt Anmeldeversuche, das Öffnen und Schließen von Sitzungen sowie die Verwendung von sudo. Es ist für die Sicherheitsüberwachung und die Fehlerbehebung bei Problemen mit dem Benutzerzugriff besonders wichtig.
Kernelprotokolle untersuchen
Der Kernel bildet den Kern des Linux-Betriebssystems. Die Datei /var/log/kern.log enthält vom Kernel erzeugte Meldungen, die bei der Diagnose von Hardware- und Treiberproblemen hilfreich sind:
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 wissen, wie die neuesten Einträge in Protokolldateien angezeigt werden, wenden wir uns der Echtzeitüberwachung zu. Dies ist eine der leistungsfähigsten Funktionen des Befehls tail.
Protokolle mit „tail -f“ in Echtzeit überwachen
In diesem Schritt verfolgen Sie Protokolldateien und erzeugen neue Einträge, um deren sofortige Anzeige zu beobachten. Die Option -f (kurz für „follow“) hält eine Datei geöffnet und zeigt neue Zeilen an, sobald sie hinzugefügt werden. Das ist besonders bei der Fehlerbehebung und Überwachung nützlich.
„tail -f“ verstehen
Die Option -f weist tail an, die Datei geöffnet zu halten und neu hinzugefügte Zeilen fortlaufend auszugeben. Dadurch erhalten Sie eine Echtzeitansicht der Protokolldatei und können Ereignisse unmittelbar nach ihrem Auftreten sehen.
Systemprotokolle in Echtzeit überwachen
Verwenden wir die Option -f, um das Systemprotokoll in Echtzeit zu überwachen:
sudo tail -f /var/log/syslog
Nach der Ausführung dieses Befehls sehen Sie die neuesten Einträge der Protokolldatei. Das Terminal bleibt geöffnet und zeigt neue Einträge an, sobald sie erscheinen.
Um einen Protokolleintrag zu erzeugen, öffnen Sie ein neues Terminalfenster, beispielsweise mit Ctrl+Alt+T, und hängen Sie eine Testmeldung an:
echo "$(date '+%b %e %T') ubuntu $(whoami): This is a test message from user $(whoami)" | sudo tee -a /var/log/syslog
tee -a hängt die Meldung an das Übungssystemprotokoll an. Wechseln Sie nun zurück zum ersten Terminal, in dem tail -f ausgeführt wird. Dort sollte die Testmeldung erscheinen:
May 2 10:34:45 ubuntu labex: This is a test message from user labex
Hängen Sie noch einige Meldungen an, um ihre Anzeige in Echtzeit zu beobachten:
echo "$(date '+%b %e %T') ubuntu labex: System test number 2" | sudo tee -a /var/log/syslog
echo "$(date '+%b %e %T') ubuntu labex: Monitoring logs is fun!" | sudo tee -a /var/log/syslog
Jede dieser Meldungen sollte im Ausgabefenster von tail -f erscheinen, sobald sie protokolliert wurde.
Wenn Sie die Protokollüberwachung beenden möchten, drücken Sie Ctrl+C, um den Befehl tail -f zu stoppen und zur Eingabeaufforderung zurückzukehren.
Authentifizierungsaktivitäten überwachen
Überwachen wir nun das Authentifizierungsprotokoll, um Anmelde- und andere authentifizierungsbezogene Ereignisse zu beobachten:
sudo tail -f /var/log/auth.log
Damit werden Authentifizierungsaktivitäten in Echtzeit angezeigt, beispielsweise Benutzeranmeldungen, die Verwendung von sudo und fehlgeschlagene Authentifizierungen.
Um einen Eintrag im Stil eines Authentifizierungsereignisses zu erzeugen, öffnen Sie ein neues Terminal und hängen Sie ein Beispielereignis an:
echo "$(date '+%b %e %T') ubuntu sudo: labex ran /usr/bin/ls /root" | sudo tee -a /var/log/auth.log
Der neue Eintrag sollte im Fenster von tail -f erscheinen:
May 2 10:38:23 ubuntu sudo: labex ran /usr/bin/ls /root
Drücken Sie auch hier Ctrl+C, um den Befehl tail -f zu stoppen, sobald Sie die Beobachtung beendet haben.
Praktische Einsatzmöglichkeiten der Echtzeitüberwachung
Die Überwachung von Protokollen in Echtzeit ist in vielen Situationen äußerst hilfreich:
- Fehlerbehebung: Wenn etwas nicht funktioniert, können Sie durch die Echtzeitbeobachtung der Protokolle die Ursache leichter erkennen.
- Sicherheitsüberwachung: Die Beobachtung von Authentifizierungsprotokollen kann dabei helfen, unbefugte Zugriffsversuche aufzudecken.
- Fehlersuche in Anwendungen: Entwickler können Anwendungsprotokolle verfolgen, um während des Testens zu verstehen, was passiert.
- Systemadministration: Administratoren können Systemprotokolle während Wartungsarbeiten oder Konfigurationsänderungen überwachen.
Wenn Sie beispielsweise ein Netzwerkproblem untersuchen, können Sie das Systemprotokoll überwachen, während Sie versuchen, eine Verbindung herzustellen. So erkennen Sie möglicherweise unmittelbar auftretende Fehlermeldungen.
Wenn Sie die Echtzeitüberwachung mit tail -f beherrschen, verfügen Sie über ein leistungsfähiges Werkzeug, um das Verhalten Ihres Systems unmittelbar nachzuvollziehen.
Protokollinformationen für eine bessere Analyse filtern
In diesem Schritt kombinieren Sie tail mit grep und awk, um sich auf relevante Protokolleinträge zu konzentrieren. Mit diesen Filtern lassen sich umfangreiche Protokolldateien übersichtlicher machen, indem nur die benötigten Informationen ausgewählt oder formatiert werden.
„grep“ mit „tail“ verwenden
Der Befehl grep sucht in Texten nach bestimmten Mustern. In Kombination mit tail können Sie Protokolleinträ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:
Fehlermeldungen finden
Um Fehlermeldungen im Systemprotokoll zu finden, können Sie nach dem Wort „error“ filtern:
sudo tail -n 100 /var/log/syslog | grep -i "error"
Die Option -i bei grep führt eine Suche ohne Beachtung der Groß-/Kleinschreibung durch. Dadurch werden beispielsweise „error“, „Error“ und „ERROR“ gefunden. Eine mögliche Ausgabe sieht so aus:
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 keine Ergebnisse angezeigt werden, bedeutet dies, dass sich in den letzten 100 Zeilen des Protokolls keine Fehlermeldungen befinden.
Bestimmte Dienste überwachen
Sie können Protokolle auch nach einem bestimmten Dienst oder Programm filtern. Um beispielsweise Aktivitäten im Zusammenhang mit SSH zu überwachen:
sudo tail -n 100 /var/log/auth.log | grep "sshd"
Dadurch werden nur SSH-bezogene Einträge aus dem Authentifizierungsprotokoll angezeigt:
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
Gefilterte Echtzeitüberwachung
Sie können die Echtzeitüberwachung auch mit einer Filterung kombinieren, um bestimmte Ereignisse direkt bei ihrem Auftreten zu verfolgen:
sudo tail -f /var/log/syslog | grep --line-buffered "test"
Die Option --line-buffered sorgt dafür, dass grep jede passende Zeile sofort ausgibt, anstatt sie zwischenzuspeichern. Das ist bei der Verwendung von tail -f besonders wichtig.
Hängen Sie nun in einem anderen Terminal eine passende Testmeldung an:
echo "$(date '+%b %e %T') ubuntu labex: This is a test message for grep filtering" | sudo tee -a /var/log/syslog
Im ersten Terminal sollte nun aufgrund des grep-Filters für „test“ nur diese Meldung erscheinen, nicht jedoch andere Protokolleinträge.
Erweiterte Filterung mit mehreren Mustern
Mit dem ODER-Operator (|) von grep können Sie auch nach mehreren Mustern suchen:
sudo tail -n 100 /var/log/syslog | grep -E "error|warning|critical"
Die Option -E aktiviert erweiterte reguläre Ausdrücke und ermöglicht die Verwendung des ODER-Operators. Dieser Befehl zeigt Zeilen an, die eines der Wörter „error“, „warning“ oder „critical“ enthalten.
Bestimmte Informationen mit „awk“ extrahieren
Für eine noch präzisere Filterung und Formatierung können Sie den Befehl awk verwenden. Um beispielsweise nur die Uhrzeit und die Meldung aus dem Syslog zu extrahieren:
sudo tail -n 10 /var/log/syslog | awk '{print $3, $5, $6, $7, $8, $9, $10}'
Damit werden bestimmte Felder aus jedem Protokolleintrag extrahiert. So können Sie sich leichter auf die wichtigsten Informationen konzentrieren.
Wenn Sie diese Filtertechniken beherrschen, können Sie umfangreiche Protokolldateien effizient analysieren und genau die Informationen extrahieren, die Sie für die Fehlerbehebung und Überwachung benötigen.
Zusammenfassung
Glückwunsch zum Abschluss dieses Labs über die Überwachung von Echtzeitänderungen in Linux-Protokolldateien mit dem Befehl „tail“. Sie haben mehrere wichtige Fähigkeiten erworben:
Linux-Protokolldateien verstehen: Sie wissen nun, wo Protokolle gespeichert werden, welche Informationen sie enthalten und wie Protokolleinträge aufgebaut sind.
Protokolle grundlegend anzeigen: Sie können den Befehl
tailverwenden, um die neuesten Einträge von Protokolldateien anzuzeigen und die Anzahl der auszugebenden Zeilen festzulegen.Echtzeitüberwachung: Mit
tail -fkönnen Sie verfolgen, wie sich Protokolle aktualisieren. Dadurch lassen sich Systemaktivitäten beobachten und auftretende Probleme direkt untersuchen.Protokollinformationen filtern: Durch die Kombination von
tailmit Werkzeugen wiegrepundawkkönnen Sie bestimmte Informationen aus Protokollen extrahieren und die Analyse effizienter gestalten.
Diese Fähigkeiten sind für alle wichtig, die mit Linux-Systemen arbeiten – von Einsteigern bis hin zu erfahrenen Administratoren. Die Protokollanalyse ist ein grundlegender Bestandteil der Systemwartung, Fehlerbehebung und Sicherheitsüberwachung.
Auf Ihrem weiteren Weg mit Linux werden Sie feststellen, dass diese Techniken zur Protokollüberwachung Ihnen helfen, Ihr System besser zu verstehen, Probleme schneller zu diagnostizieren und eine sicherere sowie zuverlässigere Umgebung zu betreiben.



