Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Abfragen von in Amazon S3 gespeicherten Apache-Protokollen
Sie können Amazon Athena damit Apache HTTP Server-Protokolldateien
Zu den Feldern im allgemeinen Protokollformat gehören die Client-IP-Adresse, die Client-ID, die Benutzer-ID, der empfangene Zeitstempel der Anforderung, der Text der Clientanforderung, der Serverstatuscode und die Größe des an den Client zurückgegebenen Objekts.
Die folgenden Beispieldaten zeigen das allgemeine Apache-Protokollformat.
198.51.100.7 - Li [10/Oct/2019:13:55:36 -0700] "GET /logo.gif HTTP/1.0" 200 232 198.51.100.14 - Jorge [24/Nov/2019:10:49:52 -0700] "GET /index.html HTTP/1.1" 200 2165 198.51.100.22 - Mateo [27/Dec/2019:11:38:12 -0700] "GET /about.html HTTP/1.1" 200 1287 198.51.100.9 - Nikki [11/Jan/2020:11:40:11 -0700] "GET /image.png HTTP/1.1" 404 230 198.51.100.2 - Ana [15/Feb/2019:10:12:22 -0700] "GET /favicon.ico HTTP/1.1" 404 30 198.51.100.13 - Saanvi [14/Mar/2019:11:40:33 -0700] "GET /intro.html HTTP/1.1" 200 1608 198.51.100.11 - Xiulan [22/Apr/2019:10:51:34 -0700] "GET /group/index.html HTTP/1.1" 200 1344
Erstellen Sie eine Tabelle in Athena für Apache-Logs
Bevor Sie Apache-Protokolle abfragen können, die in Amazon S3 gespeichert sind, müssen Sie ein Tabellenschema für Athena erstellen, in dem Sie die Protokolldaten lesen. Um eine Athena-Tabelle für Apache-Protokolle zu erstellen, können Sie die Grok SerDe verwenden. Weitere Informationen zur Verwendung von Grok SerDe finden Sie unter Writing custom grok classifiers im Developer Guide.AWS Glue
So erstellen Sie eine Tabelle in Athena für Apache-Webserver-Protokolle
Öffnen Sie die Athena-Konsole unter https://console.aws.amazon.com/athena/
. -
Fügen Sie die folgende DDL Anweisung in den Athena-Abfrage-Editor ein. Ändern Sie die Werte in
LOCATION 's3://amzn-s3-demo-bucket/
, um auf Ihre Apache-Protokolle in Amazon S3 zu verweisen.apache-log-folder
/'CREATE EXTERNAL TABLE apache_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} %{USERNAME: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/
apache-log-folder
/'; -
Führen Sie die Abfrage in der Athena-Konsole aus, um die
apache_logs
-Tabelle zu registrieren. Wenn die Abfrage abgeschlossen ist, können Sie die Protokolle aus Athena abfragen.
Beispielabfragen
Beispiel — Filtert nach 404-Fehlern
Die folgende Beispielabfrage wählt die Empfangszeit der Anforderung, den Text der Clientanforderung und den Serverstatuscode aus der apache_logs
-Tabelle aus. Die WHERE
Klausel filtert nach dem HTTP Statuscode 404
(Seite nicht gefunden).
SELECT request_received_time, client_request, server_status FROM apache_logs WHERE server_status = '404'
Das folgende Image zeigt die Ergebnisse der Abfrage im Athena-Abfrage-Editor.
Beispiel — Filter für erfolgreiche Anfragen
Die folgende Beispielabfrage wählt die Benutzer-ID, die Empfangszeit der Anforderung, den Text der Clientanforderung und den Serverstatuscode aus der apache_logs
-Tabelle aus. Die WHERE
Klausel filtert nach dem HTTP Statuscode 200
(erfolgreich).
SELECT user_id, request_received_time, client_request, server_status FROM apache_logs WHERE server_status = '200'
Das folgende Image zeigt die Ergebnisse der Abfrage im Athena-Abfrage-Editor.
Beispiel — Nach Zeitstempel filtern
Im folgenden Beispiel werden Datensätze abgefragt, deren Empfangszeit der Anfrage länger als der angegebene Zeitstempel ist.
SELECT * FROM apache_logs WHERE request_received_time > 10/Oct/2023:00:00:00