Echtzeitänderungen in einer Linux-Protokolldatei mit „tail“ überwachen

LinuxBeginner
Jetzt üben

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:

  1. Linux-Protokolldateien verstehen: Sie wissen nun, wo Protokolle gespeichert werden, welche Informationen sie enthalten und wie Protokolleinträge aufgebaut sind.

  2. Protokolle grundlegend anzeigen: Sie können den Befehl tail verwenden, um die neuesten Einträge von Protokolldateien anzuzeigen und die Anzahl der auszugebenden Zeilen festzulegen.

  3. Echtzeitüberwachung: Mit tail -f können Sie verfolgen, wie sich Protokolle aktualisieren. Dadurch lassen sich Systemaktivitäten beobachten und auftretende Probleme direkt untersuchen.

  4. Protokollinformationen filtern: Durch die Kombination von tail mit Werkzeugen wie grep und awk kö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.