Eseguire query sul formato dei file di log W3C extended - Amazon Athena

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Eseguire query sul formato dei file di log W3C extended

Il formato dei dati del file di log W3C extended presenta campi separati da spazi. I campi visualizzati nei log W3C extended sono determinati da un amministratore del server Web che sceglie quali campi di log includere. Nell'esempio seguente i dati di log contengono i campi date, time, c-ip, s-ip, cs-method, cs-uri-stem, sc-status, sc-bytes, cs-bytes, time-taken e 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

Creare una tabella in Athena per i log W3C extended

Prima di poter eseguire una query sui W3C extended, è necessario creare uno schema di tabella in modo che Athena possa leggere i dati del log.

Per creare una tabella in Athena per i log W3C extended
  1. Apri la console Athena all'indirizzo https://console.aws.amazon.com/athena/.

  2. Incollare un'istruzione DDL come la seguente nella console Athena, osservando i seguenti punti:

    1. Aggiungere o rimuovere le colonne dell'esempio in modo che corrispondano ai campi dei log per cui si desidera eseguire la query.

    2. I nomi delle colonna nel formato di file di log W3C Extended contengono trattini (-). Tuttavia, in conformità con le convenzioni di denominazione di Athena, l'esempio di istruzione CREATE TABLE li sostituisce con trattini bassi (_).

    3. Per specificare uno spazio come separatore, utilizzare FIELDS TERMINATED BY ' '.

    4. Modificare i valori in LOCATION 's3://amzn-s3-demo-bucket/w3c-log-folder/' per puntare ai log W3C extended in Amazon S3.

    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. Eseguire la query nella console Athena per registrare la tabella iis_w3c_logs. Al termine della query, i registri sono pronti per le query da Athena.

Esempio di query di selezione dei log W3C Extended

Il seguente esempio di query seleziona la data, l'ora, la destinazione della richiesta e il tempo impiegato dalla tabella iis_w3c_logs. La clausola WHERE filtra per casi in cui il metodo HTTP è GET e il codice di stato HTTP è 200 (riuscito).

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

L'immagine seguente mostra i risultati della query nell'editor di query Athena.

Esempio di risultati delle query in Athena dei file di log W3C Extended archiviati in Amazon S3.

Combinare i campi data e ora

I campi date e time delimitati da spazio sono voci separate nei dati di origine del log, ma è possibile combinarle in una marca temporale se lo si desidera. Usa le funzioni concat() e date_parse() in una query SELECT o CREATE TABLE AS SELECT per concatenare e convertire le colonne di data e ora in formato marca temporale. Nell'esempio seguente viene utilizzata una query CTAS per creare una nuova tabella con una colonna derived_timestamp.

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

Dopo aver creato la tabella, è possibile eseguire query direttamente sulla nuova colonna della marca temporale, come nell'esempio seguente.

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

L'immagine seguente mostra i risultati della query.

Risultati delle query del file di log W3C Extended su una tabella con una colonna di marca temporale derivata.