Wie zu Extrahieren und Sortieren von Spalten Aus Log-Dateien unter Linux

0
457

Sortieren einer log-Datei von einer bestimmten Spalte ist nützlich für das schnelle Auffinden von Informationen. Protokolle werden in der Regel als Klartext gespeichert, so können Sie die Befehlszeile verwenden, text manipulation tools zu Bearbeiten und diese dann in einem besser lesbaren Weise.

Extrahieren von Spalten mit cut und awk

Der cut und awk utilities sind zwei verschiedene Möglichkeiten, um zu extrahieren, die einer Spalte von Informationen aus Textdateien. Beide übernehmen Ihre log-Dateien sind Leerzeichen getrennt, zum Beispiel:

Spalte Spalte Spalte

Dies stellt ein Problem, wenn die Daten in den Spalten Leerzeichen enthält, wie beispielsweise Daten (“Wed Jun 12”). Beim Schnitt kann sehen, wie drei separate Spalten, können Sie immer noch extrahieren Sie alle drei auf einmal, vorausgesetzt, die Struktur der log-Datei konsistent ist.

der Schnitt ist sehr einfach zu bedienen:

Katze-system.log | cut-d ” -f 1-6

Der cat-Befehl liest den Inhalt des Systems.Protokoll und übergibt es zu schneiden. Die -d Option gibt das Trennzeichen, in diesem Fall ein Leerzeichen. (Standard ist Tabulator, t.) Das -f-flag gibt an, welche Felder ausgegeben. Dieser Befehl speziell druckt die ersten sechs Spalten des Systems.log. Wenn Sie wollte, nur drucken Sie die Dritte Spalte, die Sie möchten, verwenden Sie die-f-3-flag.

awk ist stärker, aber nicht so prägnant. der Schnitt ist nützlich für das extrahieren von Spalten, wie wollte man eine Liste der IP-Adressen von Ihrem Apache-logs. awk neu anordnen, auch ganze Zeilen, die nützlich sein können für die Sortierung das gesamte Dokument von einer bestimmten Spalte. awk ist eine komplette Programmiersprache, aber Sie können mit einem einfachen Befehl zu Spalten:

Katze-system.log | awk ‘{print $1, $2}’

awk führt Ihr den Befehl für jede Zeile in der Datei. Standardmäßig, es spaltet die Datei, die durch Leerzeichen und speichert jede Spalte in der Variablen $1, $2, $3 und so weiter. Mit Hilfe der print $1 Befehl drucken können Sie die erste Spalte, aber es gibt keine einfache Möglichkeit zum drucken einer Reihe von Spalten, ohne Verwendung von Schleifen.

Ein Vorteil von awk ist, dass der Befehl kann auf der ganzen Linie auf einmal. Der Inhalt der Zeile gespeichert in der variable $0, die Sie verwenden können, drucken Sie die gesamte Zeile. So könnte man, zum Beispiel, drucken Sie die Dritte Spalte vor dem Druck den rest der Zeile:

awk ‘{print $3 “” $0}’

Die “” druckt ein Leerzeichen zwischen $3 und $0. Diesen Befehl wiederholt der Dritten Spalte zweimal, aber Sie können das umgehen, indem die $3 variable auf null:

awk ‘{printf $3; $3=””; print “” $0}’

Der printf-Befehl nicht den Druck einer neuen Zeile. Ebenso können Sie ausschließen, dass bestimmte Spalten aus der Ausgabe, indem Sie alle leeren Saiten vor dem drucken $0:

awk ‘{$1=$2=$3=””; print $0}’

Sie können viel tun, mehr mit awk, einschließlich regex-matching, aber die out-of-the-box-Spalte Extraktion funktioniert gut für diesen Anwendungsfall.

Sortieren von Spalten mit sort und uniq

Der sort-Befehl kann verwendet werden, um eine Liste der Daten basierend auf einer bestimmten Spalte. Die syntax ist:

sort-k 1

wo das -k flag kennzeichnet die Spalte Anzahl. Sie Rohr Eingang in dieses Kommando, und es spuckt eine geordnete Liste. Standardmäßig Sortieren verwendet alphabetischer Reihenfolge, sondern unterstützt weitere Optionen durch flags, wie -n für die numerische Sortierung, -h für suffix-Sortierung (1M – > 1K), -M für die Sortierung von Monats-Abkürzungen und -V für die Sortierung von Datei-Versionsnummern (Datei-1.2.3 > Datei-1.2.1).

Die uniq Befehl filtert doppelte Linien, so dass nur einzigartige. Es funktioniert nur für zusammenhängende Zeilen (aus performance-Gründen), so müssen Sie immer nach Sortieren, Duplikate entfernen auf die gesamte Datei. Die syntax ist einfach:

sort-k 1 | uniq

Wenn Sie möchten, um nur eine Liste der Duplikate, verwenden Sie die d-Flagge.

uniq kann auch die Anzahl von Duplikaten mit der -c-Option, die macht es sehr gut für tracking-Frequenz. Zum Beispiel, wenn Sie wollten, um eine Liste der top-IP-Adressen auf Ihrem Apache-Web-server Sie können den folgenden Befehl ausführen auf Ihren Zugang.log:

cut-d ” -f 1 | sort | uniq -c | sort-nr | head

Dieser string von Befehlen schneiden Sie die IP-Adresse der Spalte, der Gruppe der Duplikate, entfernen Sie die Duplikate beim zählen jedes auftreten, dann Sortieren Sie basierend auf der Anzahl-Spalte in absteigender numerischer Reihenfolge, so dass Sie mit einer Liste, die wie folgt aussieht:

21 192.168.1.1
12 10.0.0.1
5 1.1.1.1
2 8.0.0.8

Sie können diese gleichen Techniken, um Ihre log-Dateien zusätzlich zu anderen Dienstprogrammen wie awk und sed, zu ziehen nützlichen Informationen aus. Diese verkettete Befehle sind lang, aber Sie nicht haben, um geben Sie jedes mal, da kann man immer speichern Sie Sie in einem bash-script oder als alias-durch deine ~/.bashrc.

Daten filtern mit grep und awk

grep ist ein sehr einfacher Befehl; Sie geben einen Suchbegriff ein und übergeben Sie es ein, und es spuckt jede Zeile mit dem Suchbegriff. Zum Beispiel, wenn Sie wollte Suche, den Apache access log für 404-Fehler, die Sie tun könnten:

cat access.log | grep “404”

die würde ausspucken eine Liste der log-Einträge passend zu den gegebenen text.

Aber grep kann nicht beschränken Ihre Suche auf eine bestimmte Spalte, so dass dieser Befehl schlägt fehl, wenn der text “404” irgendwo sonst in der Datei. Wenn Sie möchten, Suche nur den HTTP-status-code-Spalte, müssen Sie mit awk:

cat access.log | awk ‘{if ($9 == “404”) print $0;}’

Mit awk, Sie haben auch den Vorteil des seins in der Lage zu tun, negative sucht. Zum Beispiel können Sie die Suche für alle log-Einträge, die nicht zurückkehren, mit status-code 200 (OK):

cat access.log | awk ‘{if ($9 != “200”) print $0;}’

sowie Zugang zu allen programmatischen Funktionen awk bietet.

GUI-Optionen für Web-Logs

GoAccess ist ein CLI-utility für die überwachung Ihres web-server-access-log in Echtzeit und sortiert nach jede nützliche Feld. Es läuft vollständig in Ihrem terminal verwenden, so können Sie es über SSH, aber es hat auch eine viel mehr intuitive web-interface.

apachetop ist ein weiteres Werkzeug, das speziell für apache verwendet werden kann, um filtern und Sortieren von Spalten in der access-log. Es läuft in Echtzeit direkt auf Ihren Zugang.log.