NCSA-Protokolldateiformat abfragen
IIS verwendet auch das NCSA-Protokollierungsformat
Das folgende Beispiel zeigt Daten im allgemeinen NCSA-Protokollformat, wie für IIS dokumentiert.
198.51.100.7 - ExampleCorp\Li [10/Oct/2019:13:55:36 -0700] "GET /logo.gif HTTP/1.0" 200 232 198.51.100.14 - AnyCompany\Jorge [24/Nov/2019:10:49:52 -0700] "GET /index.html HTTP/1.1" 200 2165 198.51.100.22 - ExampleCorp\Mateo [27/Dec/2019:11:38:12 -0700] "GET /about.html HTTP/1.1" 200 1287 198.51.100.9 - AnyCompany\Nikki [11/Jan/2020:11:40:11 -0700] "GET /image.png HTTP/1.1" 404 230 198.51.100.2 - ExampleCorp\Ana [15/Feb/2019:10:12:22 -0700] "GET /favicon.ico HTTP/1.1" 404 30 198.51.100.13 - AnyCompany\Saanvi [14/Mar/2019:11:40:33 -0700] "GET /intro.html HTTP/1.1" 200 1608 198.51.100.11 - ExampleCorp\Xiulan [22/Apr/2019:10:51:34 -0700] "GET /group/index.html HTTP/1.1" 200 1344
Eine Tabelle in Athena für IIS-NCSA-Webserverprotokolle erstellen
Für Ihre CREATE TABLE-Anweisung können Sie das Grok SerDe- und ein grok-Muster ähnlich dem für Apache-Webserver-Protokolle verwenden. Im Gegensatz zu Apache-Protokollen verwendet das grok-Muster %{DATA:user_id} für das dritte Feld anstelle von %{USERNAME:user_id}, um das Vorhandensein des umgekehrten Schrägstrichs in domain\user_id zu berücksichtigen. Weitere Informationen zur Verwendung des Grok SerDe finden Sie unter Angepasste Grok-Classifier schreiben im AWS Glue-Entwicklerhandbuch.
So erstellen Sie eine Tabelle in Athena für IIS-NCSA-Webserverprotokolle
Öffnen Sie die Athena-Konsole unter https://console.aws.amazon.com/athena/
. -
Kopieren Sie die folgende DDL-Anweisung und fügen Sie sie in den Abfrage-Editor der Athena-Konsole ein: Ändern Sie die Werte in
LOCATION 's3://amzn-s3-demo-bucket/, um auf Ihre IIS-NCSA-Protokolle in Amazon S3 zu verweisen.iis-ncsa-logs/'CREATE EXTERNAL TABLE iis_ncsa_logs( client_ip string, client_id string, user_id string, request_received_time string, client_request string, server_status string, returned_obj_size string ) ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe' WITH SERDEPROPERTIES ( 'input.format'='^%{IPV4:client_ip} %{DATA:client_id} %{DATA:user_id} %{GREEDYDATA:request_received_time} %{QUOTEDSTRING:client_request} %{DATA:server_status} %{DATA: returned_obj_size}$' ) STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/iis-ncsa-logs/'; -
Führen Sie die Abfrage in der Athena-Konsole aus, um die
iis_ncsa_logs-Tabelle zu registrieren. Wenn die Abfrage abgeschlossen ist, können Sie die Protokolle aus Athena abfragen.
Beispielauswahlabfragen für IIS-NCSA-Protokolle auswählen
Beispiel – Filterung nach 404-Fehlern
Die folgende Beispielabfrage wählt die Empfangszeit der Anforderung, den Text der Clientanforderung und den Serverstatuscode aus der iis_ncsa_logs-Tabelle aus. Die WHERE-Klausel filtert nach HTTP-Statuscode 404 (Seite nicht gefunden)
SELECT request_received_time, client_request, server_status FROM iis_ncsa_logs WHERE server_status = '404'
Das folgende Image zeigt die Ergebnisse der Abfrage im Athena-Abfrage-Editor.
Beispiel – Filtern nach erfolgreichen Anforderungen aus einer bestimmten Domäne
Die folgende Beispielabfrage wählt die Benutzer-ID, die Empfangszeit der Anforderung, den Text der Clientanforderung und den Serverstatuscode aus der iis_ncsa_logs-Tabelle aus. Die WHERE-Klausel filtert nach Anforderungen mit dem HTTP-Statuscode 200 (erfolgreich) von Benutzern in der AnyCompany-Domäne.
SELECT user_id, request_received_time, client_request, server_status FROM iis_ncsa_logs WHERE server_status = '200' AND user_id LIKE 'AnyCompany%'
Das folgende Image zeigt die Ergebnisse der Abfrage im Athena-Abfrage-Editor.