Interroga i log di Apache archiviati in Amazon S3 - 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à.

Interroga i log di Apache archiviati in Amazon S3

Puoi utilizzarlo Amazon Athena per interrogare i file di log HTTP del server Apache memorizzati nel tuo account Amazon S3. Questo argomento illustra come utilizzare schemi di tabelle per eseguire query sui file Log di accesso Apache nel formato di log comune.

I campi nel formato di log comune includono l'indirizzo IP del client, l'ID del client, l'ID utente, la marca temporale della richiesta ricevuta, il testo della richiesta client, il codice di stato del server e la dimensione dell'oggetto restituito al client.

I dati dell'esempio seguente mostrano il formato comune di log per Apache.

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

Creare una tabella in Athena per i log di Apache

Prima di poter eseguire query sui log Apache archiviati in Amazon S3, è necessario creare uno schema di tabella per Athena in modo che possa leggere i dati di log. Per creare una tabella Athena per i log Apache, è possibile utilizzare Grok SerDe. Per ulteriori informazioni sull'utilizzo di Grok SerDe, consulta Writing grok custom classifiers nella Developer Guide.AWS Glue

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

  2. Incolla la seguente DDL istruzione nell'editor di query Athena. Modificare i valori in LOCATION 's3://amzn-s3-demo-bucket/apache-log-folder/' per puntare ai log Apache in Amazon S3.

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

Query di esempio

Esempio — Filtro per errori 404

La query di esempio seguente seleziona l'ora di ricezione della richiesta, il testo della richiesta client e il codice di stato del server dalla tabella apache_logs. La WHERE clausola filtra in base al codice di HTTP stato 404 (pagina non trovata).

SELECT request_received_time, client_request, server_status FROM apache_logs WHERE server_status = '404'

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

Interrogazione di un log Apache di Athena per le voci. HTTP 404
Esempio — Filtro per le richieste andate a buon fine

La query di esempio seguente seleziona l'ID utente, l'ora di ricezione della richiesta, il testo della richiesta client e il codice di stato del server dalla tabella apache_logs. La WHERE clausola filtra in base al codice di HTTP stato 200 (operazione riuscita).

SELECT user_id, request_received_time, client_request, server_status FROM apache_logs WHERE server_status = '200'

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

Interrogazione di un log Apache di Athena per le voci. HTTP 200
Esempio — Filtra per timestamp

L'esempio seguente cerca i record il cui tempo di ricezione della richiesta è maggiore del timestamp specificato.

SELECT * FROM apache_logs WHERE request_received_time > 10/Oct/2023:00:00:00