

# Consulta de registros de Apache almacenados en Amazon S3
<a name="querying-apache-logs"></a>

Puede utilizar Amazon Athena para consultar [archivos de registro del servidor HTTP Apache](https://httpd.apache.org/docs/2.4/logs.html) 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](https://httpd.apache.org/docs/2.4/logs.html#accesslog) 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
<a name="querying-apache-logs-creating-a-table-in-athena"></a>

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](grok-serde.md). Para obtener más información sobre el uso del SerDe de Grok, consulte [Escritura de clasificadores personalizados de Grok](https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-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/](https://console.aws.amazon.com/athena/home).

1. Pegue la siguiente instrucción DDL en el Editor de consultas de Athena. Modifique los valores de `LOCATION 's3://amzn-s3-demo-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://amzn-s3-demo-bucket/{{apache-log-folder}}/';
   ```

1. 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
<a name="querying-apache-logs-example-select-queries"></a>

**Example – 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.](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/querying-apache-logs-1.png)


**Example – 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.](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/querying-apache-logs-2.png)


**Example – 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
```