Filtern von Protokolleinträgen
Eine Stärke von AWK liegt in seiner Fähigkeit, Daten basierend auf Bedingungen zu filtern. Nutzen wir diese Funktion, um alle POST-Anfragen in unserer Protokolldatei zu finden, da diese möglicherweise sichererheitsrelevanter sind als GET-Anfragen.
Führen Sie den folgenden Befehl aus:
awk '$4 == "POST" {print $0}' server_logs.txt
Lassen Sie uns die Syntax dieses Befehls analysieren, um zu verstehen, wie das Filtern mit AWK funktioniert:
-
$4 == "POST"
– Dies ist ein Muster oder eine Bedingung, die AWK für jede Zeile auswertet:
$4
bezieht sich auf das vierte Feld in der aktuellen Zeile (in unserer Protokolldatei handelt es sich hierbei um die HTTP-Methode).
==
ist der Gleichheitsoperator, der prüft, ob zwei Werte gleich sind.
"POST"
ist die Zeichenkette, mit der wir vergleichen.
-
{print $0}
– Dies ist die Aktion, die AWK ausführt, wenn die Bedingung wahr ist:
- Die geschweiften Klammern
{}
umschließen die Aktion.
print
ist der Befehl zum Ausgeben von Text.
$0
repräsentiert die gesamte aktuelle Zeile (alle Felder).
Die Befehlsstruktur folgt dem AWK-Muster: Bedingung {Aktion}
. AWK liest jede Zeile, und wenn die Bedingung als wahr ausgewertet wird, führt es die Aktion aus. Wenn keine Bedingung angegeben wird (wie in unseren früheren Beispielen), wird die Aktion für jede Zeile ausgeführt.
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
2023-08-01 08:17:30 192.168.1.102 POST /login.php 302
2023-08-01 09:23:45 192.168.1.110 POST /submit_form.php 200
2023-08-01 10:45:12 192.168.1.115 POST /upload.php 500
Jetzt finden wir alle Anfragen, die mit einem 404-Status (Nicht gefunden) endeten:
awk '$6 == "404" {print $1, $2, $5}' server_logs.txt
Dieser Befehl folgt dem gleichen Muster, hat aber andere Werte:
- Die Bedingung
$6 == "404"
prüft, ob das sechste Feld (Statuscode) gleich 404 ist.
- Die Aktion
{print $1, $2, $5}
gibt nur bestimmte Felder aus:
$1
– Erstes Feld (Datum)
$2
– Zweites Feld (Uhrzeit)
$5
– Fünftes Feld (angeforderte Ressource)
Diese selektive Ausgabe ermöglicht es Ihnen, sich nur auf die benötigten Informationen zu konzentrieren.
Ausgabe:
2023-08-01 08:18:12 /products.html
2023-08-01 09:30:18 /nonexistent.html
2023-08-01 11:05:30 /missing_page.html
Sie können mehrere Bedingungen mit logischen Operatoren kombinieren:
&&
für UND (beide Bedingungen müssen wahr sein)
||
für ODER (mindestens eine Bedingung muss wahr sein)
!
für NICHT (negiert eine Bedingung)
Beispielsweise können Sie alle POST-Anfragen finden, die zu einem Fehler geführt haben (Statuscode >= 400):
awk '$4 == "POST" && $6 >= 400 {print $0}' server_logs.txt
Diese Filter können Ihnen helfen, potenzielle Probleme oder verdächtige Aktivitäten in Ihren Serverprotokollen schnell zu identifizieren.