Abfragen von in Amazon S3 gespeicherten Apache-Protokollen - Amazon Athena

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 abfragen, die in Ihrem Amazon S3 S3-Konto gespeichert sind. In diesem Thema erfahren Sie, wie Sie Tabellenschemas erstellen, um Apache-Zugriffsprotokoll-Dateien im allgemeinen Protokollformat abzufragen.

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
  1. Öffnen Sie die Athena-Konsole unter https://console.aws.amazon.com/athena/.

  2. Fügen Sie die folgende DDL Anweisung in den Athena-Abfrage-Editor ein. Ändern Sie die Werte in LOCATION 's3://amzn-s3-demo-bucket/apache-log-folder/', um auf Ihre Apache-Protokolle in Amazon S3 zu verweisen.

    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/';
  3. 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.

Ein Apache-Protokoll von Athena nach Einträgen abfragen. HTTP 404
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.

Ein Apache-Protokoll von Athena nach Einträgen abfragen. HTTP 200
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