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
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
Apri la console Athena all'indirizzo https://console.aws.amazon.com/athena/
. -
Incolla la seguente DDL istruzione nell'editor di query Athena. Modificare i valori in
LOCATION 's3://amzn-s3-demo-bucket/
per puntare ai log Apache in Amazon S3.apache-log-folder
/'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
/'; -
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.
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.
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