

# 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
```