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
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
Ouvrez la console à l'adresse https://console.aws.amazon.com/athena/
. -
Collez l'DDLinstruction suivante dans l'éditeur de requêtes Athena. Modifiez les valeurs dans
LOCATION 's3://amzn-s3-demo-bucket/
pour pointer vers vos journaux Apache dans Simple Storage Service (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
/'; -
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.
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.
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