Abfragen von Apache-Protokollen in Amazon S3 abfragen - 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 Apache-Protokollen in Amazon S3 abfragen

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 einer Tabelle in Athena für Apache-Protokolle

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 AWS Glue Developer Guide.

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. 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://DOC-EXAMPLE-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://DOC-EXAMPLE-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.

Beispiel „Abfragen für Apache-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 apache_logs-Tabelle aus. Die WHERE-Klausel filtert nach 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.

Abfragen eines Apache-Protokolls von Athena für HTTP-404-Einträge.
Beispiel — Filterung nach erfolgreichen 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 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.

Abfragen eines Apache-Protokolls von Athena für HTTP-200-Einträge.
Beispiel – Filterung nach Zeitstempel

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