

# Consulta de los registros de Internet Information Services (IIS) almacenados en Amazon S3
<a name="querying-iis-logs"></a>

Puede utilizar Amazon Athena para consultar los registros del servidor web de Microsoft Internet Information Services (IIS) almacenados en su cuenta de Amazon S3. Aunque IIS utiliza [diferentes](https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms525807(v%3Dvs.90)) formatos de archivo de registro, en este tema se muestra cómo crear esquemas de tabla para consultar los registros de formato de archivo de registro extendido de W3C y IIS desde Athena.

Dado que los formatos de archivo de registro extendido de W3C y IIS utilizan delimitadores de caracteres únicos (espacios y comas, respectivamente) y no tienen valores entre comillas, puede utilizar [LazySimpleSerDe](lazy-simple-serde.md) para crear tablas de Athena para ellos.

**Topics**
+ [Consulta del formato de archivo de registro extendido de W3C](querying-iis-logs-w3c-extended-log-file-format.md)
+ [Consulta del formato de archivo de los registros de IIS](querying-iis-logs-iis-log-file-format.md)
+ [Consulta del formato del archivo de los registros de NCSA](querying-iis-logs-ncsa-log-file-format.md)

# Consulta del formato de archivo de registro extendido de W3C
<a name="querying-iis-logs-w3c-extended-log-file-format"></a>

El formato de datos de archivo de registro [extendido de W3C](https://docs.microsoft.com/en-us/windows/win32/http/w3c-logging) tiene campos separados por espacios. Un administrador del servidor web, que elige los campos de registro que desea incluir, determina los campos que aparecen en los registros extendidos de W3C. En el siguiente ejemplo, los datos de registro tienen los campos `date, time`, `c-ip`, `s-ip`, `cs-method`, `cs-uri-stem`, `sc-status`, `sc-bytes`, `cs-bytes`, `time-taken` y `cs-version`.

```
2020-01-19 22:48:39 203.0.113.5 198.51.100.2 GET /default.html 200 540 524 157 HTTP/1.0
2020-01-19 22:49:40 203.0.113.10 198.51.100.12 GET /index.html 200 420 324 164 HTTP/1.0
2020-01-19 22:50:12 203.0.113.12 198.51.100.4 GET /image.gif 200 324 320 358 HTTP/1.0
2020-01-19 22:51:44 203.0.113.15 198.51.100.16 GET /faq.html 200 330 324 288 HTTP/1.0
```

## Creación de una tabla en Athena para los registros extendidos de W3C
<a name="querying-iis-logs-creating-a-table-in-athena-for-w3c-extended-logs"></a>

Antes de poder consultar los registros extendidos de W3C, debe crear un esquema de tabla de modo que Athena pueda leer los datos de registro.

**Para crear una tabla en Athena para registros extendidos de W3C**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Pegue una instrucción DDL como la siguiente en la consola de Athena, teniendo en cuenta los puntos a continuación:

   1. Agregue o elimine las columnas del ejemplo para que se correspondan con los campos de los registros que desea consultar.

   1. Los nombres de columna en el formato de archivo de registro extendido de W3C contienen guiones (`-`). Sin embargo, de acuerdo con las [convenciones de nomenclatura de Athena](tables-databases-columns-names.md), la instrucción `CREATE TABLE` de ejemplo los reemplaza con guiones bajos (`_`).

   1. Para especificar el delimitador de espacio, utilice `FIELDS TERMINATED BY ' '`.

   1. Modifique los valores de `LOCATION 's3://amzn-s3-demo-bucket/w3c-log-folder/'` para que apunten a los registros extendidos de W3C en Amazon S3.

   ```
   CREATE EXTERNAL TABLE `iis_w3c_logs`( 
     date_col string, 
     time_col string, 
     c_ip string,
     s_ip string,
     cs_method string, 
     cs_uri_stem string, 
     sc_status string,
     sc_bytes string,
     cs_bytes string,
     time_taken string,
     cs_version string
     ) 
   ROW FORMAT DELIMITED  
     FIELDS TERMINATED BY ' '  
   STORED AS INPUTFORMAT  
     'org.apache.hadoop.mapred.TextInputFormat'  
   OUTPUTFORMAT  
     'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
   LOCATION   's3://amzn-s3-demo-bucket/w3c-log-folder/'
   ```

1. Ejecute la consulta en la consola de Athena para registrar la tabla `iis_w3c_logs`. Cuando se complete la consulta, los registros estarán listos para su consulta desde Athena.

## Ejemplo de consulta Select de registro extendido de W3C
<a name="querying-iis-logs-example-w3c-extended-log-select-query"></a>

En la siguiente consulta de ejemplo se selecciona la fecha, la hora, el destino de la solicitud y el tiempo que demora la solicitud de la tabla `iis_w3c_logs`. La cláusula `WHERE` filtra los casos en los que el método HTTP es `GET` y el código de estado HTTP es `200` (satisfactorio).

```
SELECT date_col, time_col, cs_uri_stem, time_taken
FROM iis_w3c_logs
WHERE cs_method = 'GET' AND sc_status = '200'
```

En la siguiente imagen se muestran los resultados de la consulta en el Editor de consultas de Athena.

![\[Resultados de consulta de ejemplo en Athena de archivos de registro extendidos de W3C almacenados en Amazon S3.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/querying-iis-logs-1.png)


## Combinación de los campos de fecha y hora
<a name="querying-iis-logs-example-w3c-extended-log-combining-date-and-time"></a>

Los campos delimitados por espacios `date` y `time` son entradas separadas en los datos de origen del registro, pero puede combinarlas en una marca temporal, si lo desea. Utilice las funciones [concat()](https://prestodb.io/docs/current/functions/string.html#concat) y [date\$1parse()](https://prestodb.io/docs/current/functions/datetime.html#date_parse) en una consulta [SELECT](select.md) o [CREATE TABLE AS SELECT](create-table-as.md) para concatenar y convertir las columnas de fecha y hora en formato de marca temporal. En el siguiente ejemplo se utiliza una consulta CTAS para crear una nueva tabla con una columna `derived_timestamp`.

```
CREATE TABLE iis_w3c_logs_w_timestamp AS
SELECT 
  date_parse(concat(date_col,' ', time_col),'%Y-%m-%d %H:%i:%s') as derived_timestamp, 
  c_ip, 
  s_ip, 
  cs_method, 
  cs_uri_stem, 
  sc_status, 
  sc_bytes, 
  cs_bytes, 
  time_taken, 
  cs_version
FROM iis_w3c_logs
```

Una vez creada la tabla, puede consultar la nueva columna de marca temporal directamente, como en el siguiente ejemplo.

```
SELECT derived_timestamp, cs_uri_stem, time_taken
FROM iis_w3c_logs_w_timestamp
WHERE cs_method = 'GET' AND sc_status = '200'
```

En la siguiente imagen, se muestran los resultados de la consulta.

![\[La consulta del archivo de registro extendido de W3C genera una tabla con una columna de marca temporal derivada.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/querying-iis-logs-1a.png)


# Consulta del formato de archivo de los registros de IIS
<a name="querying-iis-logs-iis-log-file-format"></a>

A diferencia del formato extendido de W3C, el [formato de archivo de registro de IIS](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc728311(v%3dws.10)) tiene un conjunto fijo de campos e incluye una coma como delimitador. El LazySimpleSerDe trata la coma como el delimitador y el espacio después de la coma como el inicio del siguiente campo.

En el siguiente ejemplo, se muestran datos de ejemplo en el formato de archivo de registro de IIS.

```
203.0.113.15, -, 2020-02-24, 22:48:38, W3SVC2, SERVER5, 198.51.100.4, 254, 501, 488, 200, 0, GET, /index.htm, -, 
203.0.113.4, -, 2020-02-24, 22:48:39, W3SVC2, SERVER6, 198.51.100.6, 147, 411, 388, 200, 0, GET, /about.html, -, 
203.0.113.11, -, 2020-02-24, 22:48:40, W3SVC2, SERVER7, 198.51.100.18, 170, 531, 468, 200, 0, GET, /image.png, -, 
203.0.113.8, -, 2020-02-24, 22:48:41, W3SVC2, SERVER8, 198.51.100.14, 125, 711, 868, 200, 0, GET, /intro.htm, -,
```

## Creación de una tabla en Athena para los archivos de los registros de IIS
<a name="querying-iis-logs-creating-a-table-in-athena-for-iis-log-files"></a>

Para consultar los registros de formato de archivo de registro de IIS almacenados en Amazon S3, debe crear un esquema de tabla de modo que Athena pueda leer los datos de registro.

**Para crear una tabla en Athena para registros de formato de archivo de registro de IIS**

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 la consola de Athena, teniendo en cuenta los puntos a continuación:

   1. Para especificar el delimitador de coma, utilice `FIELDS TERMINATED BY ','`.

   1. Modifique los valores en LOCATION 's3://amzn-s3-demo-bucket/*iis-log-file-folder*/' para señalar los archivos de registro de formato de los registros de IIS en Amazon S3.

   ```
   CREATE EXTERNAL TABLE `iis_format_logs`(
   client_ip_address string,
   user_name string,
   request_date string,
   request_time string,
   service_and_instance string,
   server_name string,
   server_ip_address string,
   time_taken_millisec string,
   client_bytes_sent string,
   server_bytes_sent string,
   service_status_code string,
   windows_status_code string,
   request_type string,
   target_of_operation string,
   script_parameters string
      )
   ROW FORMAT DELIMITED
     FIELDS TERMINATED BY ','
   STORED AS INPUTFORMAT
     'org.apache.hadoop.mapred.TextInputFormat'
   OUTPUTFORMAT
     'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION
     's3://amzn-s3-demo-bucket/iis-log-file-folder/'
   ```

1. Ejecute la consulta en la consola de Athena para registrar la tabla `iis_format_logs`. Cuando se complete la consulta, los registros estarán listos para su consulta desde Athena.

## Ejemplo de consulta Select de formato de registro de IIS
<a name="querying-iis-logs-example-iis-log-format-select-query"></a>

En la siguiente consulta de ejemplo se selecciona la fecha, la hora, el destino de la solicitud y el tiempo que demora en milisegundos de la tabla `iis_format_logs`. La cláusula `WHERE` filtra los casos en los que el tipo de solicitud es `GET` y el código de estado HTTP es `200` (satisfactorio). En la consulta, tenga en cuenta que los espacios iniciales en `' GET'` y `' 200'` son necesarios para que la consulta sea correcta. 

```
SELECT request_date, request_time, target_of_operation, time_taken_millisec
FROM iis_format_logs
WHERE request_type = ' GET' AND service_status_code = ' 200'
```

En la siguiente imagen se muestran resultados de la consulta de los datos de muestra.

![\[Resultados de consulta de ejemplo en Athena de archivos de registro en formato de archivo de registro de IIS almacenados en Amazon S3.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/querying-iis-logs-2.png)


# Consulta del formato del archivo de los registros de NCSA
<a name="querying-iis-logs-ncsa-log-file-format"></a>

IIS también utiliza el formato de [registro NCSA](https://docs.microsoft.com/en-us/windows/win32/http/ncsa-logging), que tiene un número fijo de campos en formato de texto ASCII separados por espacios. La estructura es similar al formato de registro común utilizado para los registros de acceso de Apache. Los campos en el formato de datos de registro común de NCSA incluyen la dirección IP del cliente, el ID del cliente (no se utiliza normalmente), el dominio\$1 ID de usuario, la marca temporal 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, se muestran los datos en el formato de registro común de NCSA documentado para IIS.

```
198.51.100.7 - ExampleCorp\Li [10/Oct/2019:13:55:36 -0700] "GET /logo.gif HTTP/1.0" 200 232
198.51.100.14 - AnyCompany\Jorge [24/Nov/2019:10:49:52 -0700] "GET /index.html HTTP/1.1" 200 2165
198.51.100.22 - ExampleCorp\Mateo [27/Dec/2019:11:38:12 -0700] "GET /about.html HTTP/1.1" 200 1287
198.51.100.9 - AnyCompany\Nikki [11/Jan/2020:11:40:11 -0700] "GET /image.png HTTP/1.1" 404 230
198.51.100.2 - ExampleCorp\Ana [15/Feb/2019:10:12:22 -0700] "GET /favicon.ico HTTP/1.1" 404 30
198.51.100.13 - AnyCompany\Saanvi [14/Mar/2019:11:40:33 -0700] "GET /intro.html HTTP/1.1" 200 1608
198.51.100.11 - ExampleCorp\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 NCSA de IIS
<a name="querying-iis-logs-ncsa-creating-a-table-in-athena"></a>

Para la instrucción `CREATE TABLE`, puede utilizar [El SerDe de Grok](grok-serde.md) y un patrón grok similar al de los [registros del servidor web de Apache](querying-apache-logs.md). A diferencia de los registros de Apache, el patrón grok utiliza `%{DATA:user_id}` para el tercer campo en lugar de `%{USERNAME:user_id}` para dar cuenta de la presencia de la barra invertida en `domain\user_id`. 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*.

**Para crear una tabla en Athena para los registros del servidor web NCSA de IIS**

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/iis-ncsa-logs/'` para apuntar a los registros NCSA de IIS en Amazon S3.

   ```
   CREATE EXTERNAL TABLE iis_ncsa_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} %{DATA: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/iis-ncsa-logs/';
   ```

1. Ejecute la consulta en la consola de Athena para registrar la tabla `iis_ncsa_logs`. Cuando se complete la consulta, los registros estarán listos para su consulta desde Athena.

## Ejemplo de consultas Select para registros NCSA de IIS
<a name="querying-iis-logs-ncsa-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 `iis_ncsa_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 iis_ncsa_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 NCSA de IIS desde Athena para entradas HTTP 404.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/querying-iis-logs-3.png)


**Example – Filtrar solicitudes correctas de un dominio en particular**  
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 `iis_ncsa_logs`. La cláusula `WHERE` filtra solicitudes con código de estado HTTP `200` (satisfactorio) de los usuarios en el dominio `AnyCompany`.  

```
SELECT user_id, request_received_time, client_request, server_status
FROM iis_ncsa_logs
WHERE server_status = '200' AND user_id LIKE 'AnyCompany%'
```
En la imagen siguiente se muestran los resultados de la consulta en el Editor de consultas de Athena.  

![\[Consulta de un registro NCSA de IIS desde Athena para entradas HTTP 200.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/querying-iis-logs-4.png)
