Consulta de registros de Apache almacenados en Amazon S3
Puede utilizar Amazon Athena para consultar archivos de registro del servidor HTTP Apache
Los campos en el formato de registro común incluyen la dirección IP del cliente, el ID del cliente, el ID de usuario, la marca de hora de la solicitud recibida, el texto de la solicitud del cliente, el código de estado del servidor y el tamaño del objeto devuelto al cliente.
En el siguiente ejemplo de datos se muestra el formato de registro común de 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
Creación de una tabla en Athena para los registros de Apache
Antes de poder consultar los registros de Apache almacenados en Amazon S3, debe crear un esquema de tabla para Athena de modo que pueda leer los datos de registro. Para crear una tabla de Athena para los registros de Apache, puede usar El SerDe de Grok. Para obtener más información sobre el uso del SerDe de Grok, consulte Escritura de clasificadores personalizados de Grok en la Guía para desarrolladores de AWS Glue.
Cómo crear una tabla en Athena para los registros del servidor web de Apache
Abra la consola de Athena en https://console.aws.amazon.com/athena/
. -
Pegue la siguiente instrucción DDL en el Editor de consultas de Athena. Modifique los valores de
LOCATION 's3://amzn-s3-demo-bucket/
para que apunten a los registros de Apache en 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
/'; -
Ejecute la consulta en la consola de Athena para registrar la tabla
apache_logs
. Cuando se complete la consulta, los registros estarán listos para su consulta desde Athena.
Consultas de ejemplo
ejemplo – Filtrado de errores 404
En la siguiente consulta de ejemplo, se selecciona la hora recibida de la solicitud, el texto de la solicitud del cliente y el código de estado del servidor en la tabla apache_logs
. La cláusula WHERE
filtra el código de estado HTTP 404
(página no encontrada).
SELECT request_received_time, client_request, server_status FROM apache_logs WHERE server_status = '404'
En la siguiente imagen se muestran los resultados de la consulta en el Editor de consultas de Athena.
ejemplo – Filtrado de solicitudes correctas
En la siguiente consulta de ejemplo, se selecciona el ID de usuario, la hora recibida de la solicitud, el texto de la solicitud del cliente y el código de estado del servidor en la tabla apache_logs
. La cláusula WHERE
filtra el código de estado HTTP 200
(satisfactorio).
SELECT user_id, request_received_time, client_request, server_status FROM apache_logs WHERE server_status = '200'
En la siguiente imagen se muestran los resultados de la consulta en el Editor de consultas de Athena.
ejemplo – Filtrado por marca de tiempo
En el siguiente ejemplo, se realiza una consulta de registros cuya hora de recepción de la solicitud sea posterior a la marca de tiempo especificada.
SELECT * FROM apache_logs WHERE request_received_time > 10/Oct/2023:00:00:00