Erweitertes W3C-Protokolldateienformat - Amazon Athena

Erweitertes W3C-Protokolldateienformat

Das erweiterte W3C-Protokolldateidatenformat hat durch Leerzeichen getrennte Felder. Die Felder, die in erweiterten W3C-Protokollen erscheinen, werden von einem Webserver-Administrator bestimmt, der auswählt, welche Protokollfelder eingeschlossen werden sollen. Die folgenden Beispielprotokolldaten enthalten die Felder date, time, c-ip, s-ip, cs-method, cs-uri-stem, sc-status, sc-bytes, cs-bytes, time-taken und cs-version.

2020-01-19 22:48:39 203.0.113.5 198.51.100.2 GET /default.html 200 540 524 157 HTTP/1.0 2020-01-19 22:49:40 203.0.113.10 198.51.100.12 GET /index.html 200 420 324 164 HTTP/1.0 2020-01-19 22:50:12 203.0.113.12 198.51.100.4 GET /image.gif 200 324 320 358 HTTP/1.0 2020-01-19 22:51:44 203.0.113.15 198.51.100.16 GET /faq.html 200 330 324 288 HTTP/1.0

Erstellen einer Tabelle in Athena für erweiterte W3C-Protokolle

Bevor Sie Ihre erweiterten W3C-Protokolle abfragen können, müssen Sie ein Tabellenschema erstellen, damit Athena die Protokolldaten lesen kann.

So erstellen Sie eine Tabelle in Athena für erweiterte W3C-Protokolle
  1. Öffnen Sie die Athena-Konsole unter https://console.aws.amazon.com/athena/.

  2. Fügen Sie eine DDL-Anweisung wie folgt in die Athena-Konsole ein und beachten Sie folgende Punkte:

    1. Fügen Sie die Spalten im Beispiel hinzu, oder entfernen Sie sie, damit sie den Feldern in den Protokollen entsprechen, die Sie abfragen möchten.

    2. Spaltennamen im erweiterten W3C-Format für Protokolldateien enthalten Bindestriche (-). In Übereinstimmung mit den Athena-Namenskonventionen werden sie jedoch in der CREATE TABLE-Beispielanweisung durch Unterstriche (_) ersetzt.

    3. Um das Leerzeichen anzugeben, verwenden Sie FIELDS TERMINATED BY ' '.

    4. Ändern Sie die Werte in LOCATION 's3://amzn-s3-demo-bucket/w3c-log-folder/' so, dass sie auf Ihre erweiterten W3C-Protokolle in Amazon S3 verweisen.

    CREATE EXTERNAL TABLE `iis_w3c_logs`( date_col string, time_col string, c_ip string, s_ip string, cs_method string, cs_uri_stem string, sc_status string, sc_bytes string, cs_bytes string, time_taken string, cs_version string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/w3c-log-folder/'
  3. Führen Sie die Abfrage in der Athena-Konsole aus, um die iis_w3c_logs-Tabelle zu registrieren. Wenn die Abfrage abgeschlossen ist, können Sie die Protokolle aus Athena abfragen.

Beispiel für eine erweiterte W3C-Protokoll-Auswahlabfrage

Die folgende Beispielabfrage wählt Datum, Uhrzeit, Anforderungsziel und die für die Anforderung benötigte Zeit aus der Tabelle aus iis_w3c_logs. Die WHERE-Klausel filtert nach Fällen, in denen die HTTP-Methode GET und der HTTP-Statuscode 200 (erfolgreich) ist.

SELECT date_col, time_col, cs_uri_stem, time_taken FROM iis_w3c_logs WHERE cs_method = 'GET' AND sc_status = '200'

Das folgende Image zeigt die Ergebnisse der Abfrage im Athena-Abfrage-Editor.

Beispielabfrageergebnisse in Athena von erweiterten W3C-Protokolldateien, die in Amazon S3 gespeichert sind.

Datums- und Zeitfelder kombinieren

Die durch Leerzeichen getrennten date- und time-Felder sind separate Einträge in den Protokollquelldaten, aber Sie können sie bei Bedarf zu einem Zeitstempel kombinieren. Verwenden Sie die Funktionen concat() und date_parse() in einer SELECT- oder CREATE TABLE AS SELECT-Abfrage, um die Datums- und Uhrzeitspalten zu verketten und in das Zeitstempelformat zu konvertieren. Im folgenden Beispiel wird eine CTAS-Abfrage verwendet, um eine neue Tabelle mit einer derived_timestamp-Spalte zu erstellen.

CREATE TABLE iis_w3c_logs_w_timestamp AS SELECT date_parse(concat(date_col,' ', time_col),'%Y-%m-%d %H:%i:%s') as derived_timestamp, c_ip, s_ip, cs_method, cs_uri_stem, sc_status, sc_bytes, cs_bytes, time_taken, cs_version FROM iis_w3c_logs

Nachdem die Tabelle erstellt wurde, können Sie die neue Zeitstempelspalte direkt abfragen, wie im folgenden Beispiel.

SELECT derived_timestamp, cs_uri_stem, time_taken FROM iis_w3c_logs_w_timestamp WHERE cs_method = 'GET' AND sc_status = '200'

Das folgende Image zeigt die Ergebnisse der Abfrage.

Abfrageergebnisse der erweiterten W3C-Protokolldatei für eine Tabelle mit einer abgeleiteten Zeitstempelspalte.