Consulta de registros de Apache almacenados en Amazon S3 - Amazon Athena

Consulta de registros de Apache almacenados en Amazon S3

Puede utilizar Amazon Athena para consultar archivos de registro del servidor HTTP Apache almacenados en su cuenta de Amazon S3. En este tema, se muestra cómo crear esquemas de tabla para consultar archivos de registro de acceso de Apache en el formato de registro común.

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
  1. Abra la consola de Athena en https://console.aws.amazon.com/athena/.

  2. Pegue la siguiente instrucción DDL en el Editor de consultas de Athena. Modifique los valores de LOCATION 's3://DOC-EXAMPLE-BUCKET/apache-log-folder/' para que apunten a los registros de Apache en 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://DOC-EXAMPLE-BUCKET/apache-log-folder/';
  3. 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.

Ejemplo de consultas Select para registros de Apache

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.

Consulta de un registro de Apache desde Athena para entradas HTTP 404.
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.

Consulta de un registro de Apache desde Athena para entradas HTTP 200.
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