

# Consultar logs do servidor Web armazenados no Amazon S3
<a name="querying-web-server-logs"></a>

Você pode usar o Athena para consultar logs do servidor Web armazenados no Amazon S3. Os tópicos desta seção mostram como criar tabelas no Athena para consultar logs do servidor Web em uma variedade de formatos.

**Topics**
+ [Consulta de logs do Apache armazenados no Amazon S3](querying-apache-logs.md)
+ [Consultar logs do Internet Information Server (IIS) armazenados no Amazon S3](querying-iis-logs.md)

# Consulta de logs do Apache armazenados no Amazon S3
<a name="querying-apache-logs"></a>

Você pode usar o Amazon Athena para consultar [arquivos de log do servidor HTTP do Apache](https://httpd.apache.org/docs/2.4/logs.html) armazenados em sua conta do Amazon S3. Este tópico mostra como criar esquemas de tabela para consultar os arquivos de [log de acesso](https://httpd.apache.org/docs/2.4/logs.html#accesslog) do Apache no formato de log comum.

Os campos no formato de log comum incluem endereço IP do cliente, ID do cliente, ID do usuário, carimbo de data/hora de recebimento da solicitação, texto da solicitação do cliente, código de status do servidor e tamanho do objeto retornado ao cliente.

O exemplo de dados a seguir mostra o formato de log comum do 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
```

## Criar uma tabela no Athena para logs do Apache
<a name="querying-apache-logs-creating-a-table-in-athena"></a>

Antes de consultar os logs do Apache armazenados no Amazon S3, você deve criar um esquema de tabela para o Athena no qual ele possa ler os dados do log. Para criar uma tabela do Athena de logs do Apache, você pode usar [Grok SerDe](grok-serde.md). Para obter mais informações sobre como usar o SerDe do Grok, consulte [Escrever classificadores grok personalizados](https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-grok) no *Guia do desenvolvedor do AWS Glue*.

**Para criar uma tabela no Athena para logs do servidor Web do Apache**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Cole a instrução DDL a seguir no editor de consultas do Athena. Modifique os valores em `LOCATION 's3://amzn-s3-demo-bucket/apache-log-folder/'` para apontar para seus logs do Apache no 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. Execute a consulta no console do Athena para registrar a tabela `apache_logs`. Quando a consulta for concluída, os logs estarão prontos para você consultar no Athena.

### Consultas de exemplo
<a name="querying-apache-logs-example-select-queries"></a>

**Example – Filtro para erros 404**  
A consulta de exemplo a seguir seleciona a hora de recebimento da solicitação, o texto da solicitação do cliente e o código de status do servidor da tabela `apache_logs`. A cláusula `WHERE` filtra o código de status HTTP `404` (página não encontrada).  

```
SELECT request_received_time, client_request, server_status
FROM apache_logs
WHERE server_status = '404'
```
A imagem a seguir mostra os resultados da consulta no editor de consultas do Athena.  

![\[Consultar entradas HTTP 404 em um log do Apache pelo Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-apache-logs-1.png)


**Example – Filtro para solicitações com êxito**  
A consulta de exemplo a seguir seleciona o ID do usuário, a hora de recebimento da solicitação, o texto da solicitação do cliente e o código de status do servidor da tabela `apache_logs`. A cláusula `WHERE` filtra o código de status HTTP `200` (com êxito).  

```
SELECT user_id, request_received_time, client_request, server_status
FROM apache_logs
WHERE server_status = '200'
```
A imagem a seguir mostra os resultados da consulta no editor de consultas do Athena.  

![\[Consultar entradas HTTP 200 em um log do Apache pelo Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-apache-logs-2.png)


**Example – Filtrar por carimbo de data/hora**  
O exemplo a seguir consulta registros cujo horário de recebimento da solicitação é superior ao horário no carimbo de data/hora especificado.  

```
SELECT * FROM apache_logs WHERE request_received_time > 10/Oct/2023:00:00:00
```

# Consultar logs do Internet Information Server (IIS) armazenados no Amazon S3
<a name="querying-iis-logs"></a>

Você pode usar o Amazon Athena para consultar os logs do servidor Web do Microsoft Internet Information Server (IIS) armazenados na sua conta do Amazon S3. O IIS usa uma [variedade](https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms525807(v%3Dvs.90)) de formatos de arquivo de log, mas este tópico mostra como criar esquemas de tabela para consultar logs no formato de arquivo de log do IIs e estendido do W3C usando o Athena.

Como os formatos de arquivo de log do IIS e estendido do W3C usam delimitadores de caractere único (espaços e vírgulas, respectivamente) e não têm valores entre aspas, você pode usar o [LazySimpleSerDe](lazy-simple-serde.md) para criar tabelas do Athena para eles.

**Topics**
+ [Consultar o formato de arquivo de log estendido do W3C](querying-iis-logs-w3c-extended-log-file-format.md)
+ [Consultar o formato de arquivo de log do IIS](querying-iis-logs-iis-log-file-format.md)
+ [Consulta ao formato de arquivo de log do NCSA](querying-iis-logs-ncsa-log-file-format.md)

# Consultar o formato de arquivo de log estendido do W3C
<a name="querying-iis-logs-w3c-extended-log-file-format"></a>

O formato de dados de arquivo de log [estendido do W3C](https://docs.microsoft.com/en-us/windows/win32/http/w3c-logging) tem campos separados por espaços. Os campos que aparecem nos logs estendidos do W3C são determinados por um administrador do servidor Web que escolhe quais campos de log serão incluídos. Os dados de log de exemplo a seguir têm os campos `date, time`, `c-ip`, `s-ip`, `cs-method`, `cs-uri-stem`, `sc-status`, `sc-bytes`, `cs-bytes`, `time-taken` e `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
```

## Criar uma tabela no Athena para logs estendidos do W3C
<a name="querying-iis-logs-creating-a-table-in-athena-for-w3c-extended-logs"></a>

Antes de consultar os logs estendidos do W3C, você deve criar um esquema de tabela para que o Athena possa ler os dados do log.

**Para criar uma tabela no Athena para logs estendidos do W3C**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Cole uma instrução DDL como a seguinte no console do Athena, observando estes pontos:

   1. Adicione ou remova as colunas no exemplo para corresponder aos campos nos logs que você deseja consultar.

   1. Os nomes de colunas no formato de arquivo de log estendido do W3C contêm hifens (`-`). No entanto, de acordo com as [Convenções de nomenclatura do Athena](tables-databases-columns-names.md), a instrução de exemplo `CREATE TABLE` os substitui por sublinhados (`_`).

   1. Para especificar o delimitador de espaço, use `FIELDS TERMINATED BY ' '`.

   1. Modifique os valores em `LOCATION 's3://amzn-s3-demo-bucket/w3c-log-folder/'` para apontar para seus logs estendidos do W3C no 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. Execute a consulta no console do Athena para registrar a tabela `iis_w3c_logs`. Quando a consulta for concluída, os logs estarão prontos para você consultar no Athena.

## Exemplo de consulta select de log estendido do W3C
<a name="querying-iis-logs-example-w3c-extended-log-select-query"></a>

A consulta de exemplo a seguir seleciona data, hora, destino da solicitação e tempo gasto na solicitação da tabela `iis_w3c_logs`. A cláusula `WHERE` filtra os casos em que o método HTTP é `GET` e o código de status HTTP é `200` (com êxito).

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

A imagem a seguir mostra os resultados da consulta no editor de consultas do Athena.

![\[Exemplo de resultados de consulta no Athena de arquivos de log estendidos do W3C armazenados no Amazon S3.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-iis-logs-1.png)


## Combinar os campos de data e hora
<a name="querying-iis-logs-example-w3c-extended-log-combining-date-and-time"></a>

Os campos `date` e `time` delimitados por espaços são entradas separadas nos dados de origem do log, mas você pode combiná-los em um carimbo de data/hora, se desejar. Use as funções [concat()](https://prestodb.io/docs/current/functions/string.html#concat) e [date\$1parse()](https://prestodb.io/docs/current/functions/datetime.html#date_parse) em uma consulta [SELECT](select.md) ou [CREATE TABLE AS SELECT](create-table-as.md) para concatenar e converter as colunas de data e hora no formato de carimbo de data/hora. O exemplo a seguir usa a consulta CTAS para criar uma nova tabela com uma coluna `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
```

Depois de criar a tabela, consulte a nova coluna de carimbo de data/hora diretamente, como no exemplo a seguir.

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

A imagem a seguir mostra os resultados da consulta.

![\[Resultados da consulta de arquivo de log estendido do W3C em uma tabela com uma coluna de carimbo de data/hora derivada.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-iis-logs-1a.png)


# Consultar o formato de arquivo de log do IIS
<a name="querying-iis-logs-iis-log-file-format"></a>

Ao contrário do formato estendido do W3C, o [Formato de arquivo de log do IIS](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc728311(v%3dws.10)) tem um conjunto fixo de campos e inclui uma vírgula como delimitador. O LazySimpleSerDe trata a vírgula como o delimitador e o espaço após a vírgula como o início do próximo campo.

O exemplo a seguir apresenta dados de amostra no formato de arquivo de log do 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, -,
```

## Criar uma tabela no Athena para arquivos de log do IIS
<a name="querying-iis-logs-creating-a-table-in-athena-for-iis-log-files"></a>

Para consultar os logs no formato de arquivo de log do IIS no Amazon S3, crie primeiro um esquema de tabela para que o Athena possa ler os dados do log.

**Para criar uma tabela no Athena para logs no formato de arquivo de log do IIS**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Cole a seguinte instrução DDL no console do Athena, observando estes pontos:

   1. Para especificar a vírgula como delimitador, use `FIELDS TERMINATED BY ','`.

   1. Modifique os valores em LOCATION 's3://amzn-s3-demo-bucket/*iis-log-file-folder*/' para apontarem para seus arquivos de log no formato de log do IIS no 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. Execute a consulta no console do Athena para registrar a tabela `iis_format_logs`. Quando a consulta for concluída, os logs estarão prontos para você consultar no Athena.

## Exemplo de consulta select no formato de log do IIS
<a name="querying-iis-logs-example-iis-log-format-select-query"></a>

A consulta de exemplo a seguir seleciona data, hora, destino da solicitação e tempo gasto em milissegundos da tabela `iis_format_logs`. A cláusula `WHERE` filtra os casos em que o tipo de solicitação é `GET` e o código de status HTTP é `200` (com êxito). Na consulta, observe que os espaços à esquerda em `' GET'` e `' 200'` são necessários para que a consulta seja bem-sucedida. 

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

A imagem a seguir mostra os resultados da consulta dos dados de exemplo.

![\[Resultados da consulta de exemplo no Athena de arquivos de log no formato do IIS armazenados no Amazon S3.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-iis-logs-2.png)


# Consulta ao formato de arquivo de log do NCSA
<a name="querying-iis-logs-ncsa-log-file-format"></a>

O IIS também usa o formato de [log do NCSA](https://docs.microsoft.com/en-us/windows/win32/http/ncsa-logging), que tem um número fixo de campos em formato de texto ASCII separados por espaços. A estrutura é semelhante ao formato de log comum usado para logs de acesso do Apache. Os campos no formato de dados de log comum do NCSA incluem endereço IP do cliente, ID do cliente (não costuma ser usado), ID do usuário do domínio, carimbo de data/hora de recebimento da solicitação, texto da solicitação do cliente, código de status do servidor e tamanho do objeto retornado ao cliente.

O exemplo a seguir mostra os dados no formato de log comum do NCSA, conforme documentado para o 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
```

## Criar uma tabela no Athena para logs do NCSA do IIS
<a name="querying-iis-logs-ncsa-creating-a-table-in-athena"></a>

Na instrução `CREATE TABLE`, você pode usar [Grok SerDe](grok-serde.md) e um padrão do grok similar ao usado nos [logs do servidor Web do Apache](querying-apache-logs.md). Ao contrário dos logs do Apache, o padrão do grok usa `%{DATA:user_id}` para o terceiro campo, em vez de `%{USERNAME:user_id}` para considerar a presença da barra invertida em `domain\user_id`. Para obter mais informações sobre como usar o SerDe do Grok, consulte [Escrever classificadores grok personalizados](https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-grok) no *Guia do desenvolvedor do AWS Glue*.

**Para criar uma tabela no Athena para logs do servidor Web do NCSA do IIS**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Cole a instrução DDL a seguir no editor de consultas do Athena. Modifique os valores em `LOCATION 's3://amzn-s3-demo-bucket/iis-ncsa-logs/'` para apontar para seus logs do NCSA do IIS no 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. Execute a consulta no console do Athena para registrar a tabela `iis_ncsa_logs`. Quando a consulta for concluída, os logs estarão prontos para você consultar no Athena.

## Exemplo de consultas Select para logs do NCSA do IIS
<a name="querying-iis-logs-ncsa-example-select-queries"></a>

**Example – Filtragem de erros 404**  
A consulta de exemplo a seguir seleciona a hora de recebimento da solicitação, o texto da solicitação do cliente e o código de status do servidor da tabela `iis_ncsa_logs`. A cláusula `WHERE` filtra o código de status HTTP `404` (página não encontrada).  

```
SELECT request_received_time, client_request, server_status
FROM iis_ncsa_logs
WHERE server_status = '404'
```
A imagem a seguir mostra os resultados da consulta no editor de consultas do Athena.  

![\[Consultar entradas HTTP 404 em um log do NCSA do IIS pelo Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-iis-logs-3.png)


**Example – Filtragem de solicitações com êxito de um domínio específico**  
A consulta de exemplo a seguir seleciona o ID do usuário, a hora de recebimento da solicitação, o texto da solicitação do cliente e o código de status do servidor da tabela `iis_ncsa_logs`. A cláusula `WHERE` filtra as solicitações com código de status HTTP `200`(com êxito) de usuários no domínio `AnyCompany`.  

```
SELECT user_id, request_received_time, client_request, server_status
FROM iis_ncsa_logs
WHERE server_status = '200' AND user_id LIKE 'AnyCompany%'
```
A imagem a seguir mostra os resultados da consulta no editor de consultas do Athena.  

![\[Consultar entradas HTTP 200 em um log do NCSA do IIS pelo Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-iis-logs-4.png)
