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