Interrogez les journaux Apache stockés dans Amazon S3 - Amazon Athena

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Interrogez les journaux Apache stockés dans Amazon S3

Vous pouvez l'utiliser Amazon Athena pour interroger les fichiers journaux HTTP du serveur Apache stockés dans votre compte Amazon S3. Cette rubrique vous montre comment créer des schémas de table pour interroger les fichiers journaux d'accès Apache au format de journal commun.

Les champs du format de journal commun comprennent l'adresse IP du client, l'ID du client, l'ID de l'utilisateur, l'horodatage de la demande reçue, le texte de la demande du client, le code d'état du serveur et la taille de l'objet renvoyé au client.

L'exemple de données suivant montre le format de journal commun d'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

Création d'une table dans Athena pour les journaux Apache

Avant de pouvoir interroger les journaux Apache stockés dans Simple Storage Service (Amazon S3), vous devez créer un schéma de table pour Athena afin qu'il puisse lire les données des journaux. Pour créer une table Athena pour les journaux Apache, vous pouvez utiliser le SerDe Grok SerDe. Pour plus d'informations sur l'utilisation du Grok SerDe, consultez la section Écrire des classificateurs personnalisés Grok dans le Guide du AWS Glue développeur.

Création d'une table dans Athena pour les journaux du serveur web Apache
  1. Ouvrez la console à l'adresse https://console.aws.amazon.com/athena/.

  2. Collez l'DDLinstruction suivante dans l'éditeur de requêtes Athena. Modifiez les valeurs dans LOCATION 's3://amzn-s3-demo-bucket/apache-log-folder/' pour pointer vers vos journaux Apache dans Simple Storage Service (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. Exécutez la requête dans la console Athena pour enregistrer la table apache_logs. Une fois la requête terminée, vous pouvez interroger les journaux à partir d'Athena.

Exemples de requêtes

Exemple — Filtre les erreurs 404

L'exemple de requête suivant sélectionne l'heure de réception de la demande, le texte de la demande du client et le code d'état du serveur à partir de la table apache_logs. La WHERE clause filtre le code d'HTTPétat 404 (page introuvable).

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

L'image suivante montre les résultats de la requête dans l'éditeur de requête Athena.

Interrogation d'un journal Apache auprès d'Athena HTTP 404 pour obtenir des entrées.
Exemple — Filtre pour les demandes réussies

L'exemple de requête suivant sélectionne l'ID de l'utilisateur, l'heure de réception de la demande, le texte de la demande du client et le code d'état du serveur à partir de la table apache_logs. La WHERE clause filtre le code HTTP d'état 200 (succès).

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

L'image suivante montre les résultats de la requête dans l'éditeur de requête Athena.

Interrogation d'un journal Apache auprès d'Athena HTTP 200 pour obtenir des entrées.
Exemple — Filtrer par horodatage

L'exemple suivant demande des enregistrements dont l'heure de réception de la demande est supérieure à l'horodatage spécifié.

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