

# Consultar logs de consultas do Amazon Route 53 Resolver
<a name="querying-r53-resolver-logs"></a>

Você pode criar tabelas do Athena para seus logs de consulta do Amazon Route 53 Resolver e consultá-las no Athena.

O log de consulta do Route 53 Resolver é destinado ao registro de consultas de DNS feitas por recursos em uma VPC, recursos on-premises que usam endpoints do Resolver de entrada, consultas que usam um endpoint do Resolver de saída para resolução de DNS recursiva e consultas que usam regras de firewall de DNS do Route 53 Resolver para bloquear, permitir ou monitorar uma lista de domínios. Para obter mais informações sobre o log de consulta do Resolver, veja [Log de consulta do Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-query-logs.html) no *Guia do desenvolvedor do Amazon Route 53*. Para obter informações sobre cada um dos campos nos logs, consulte [Valores que aparecem em logs de consultas do Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-query-logs-format.html) no *Guia do desenvolvedor do Amazon Route 53*.

**Topics**
+ [Criar a tabela de logs de consulta do resolvedor](querying-r53-resolver-logs-creating-the-table.md)
+ [Usar projeção de partições](querying-r53-resolver-logs-partitioning-example.md)
+ [Consultas de exemplo](querying-r53-resolver-logs-example-queries.md)

# Criar a tabela de logs de consulta do resolvedor
<a name="querying-r53-resolver-logs-creating-the-table"></a>

Você pode usar o editor de consultas no console do Athena para criar e consultar uma tabela com os logs de consulta do Route 53 Resolver.

**Para criar e consultar uma tabela do Athena com os logs de consulta do Route 53 Resolver**

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

1. No editor de consultas do Athena, insira a instrução `CREATE TABLE` a seguir. Substitua os valores da cláusula `LOCATION` pelos correspondentes ao local dos logs do Resolver no Amazon S3.

   ```
   CREATE EXTERNAL TABLE r53_rlogs (
     version string,
     account_id string,
     region string,
     vpc_id string,
     query_timestamp string,
     query_name string,
     query_type string,
     query_class
       string,
     rcode string,
     answers array<
       struct<
         Rdata: string,
         Type: string,
         Class: string>
       >,
     srcaddr string,
     srcport int,
     transport string,
     srcids struct<
       instance: string,
       resolver_endpoint: string
       >,
     firewall_rule_action string,
     firewall_rule_group_id string,
     firewall_domain_list_id string
    )
        
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/aws_account_id/vpcdnsquerylogs/{vpc-id}/'
   ```

   Como os dados de log de consulta do Resolver estão no formato JSON, a instrução CREATE TABLE usa a [Biblioteca SerDe do JSON](json-serde.md) para analisar os dados.
**nota**  
O SerDe espera que cada documento JSON esteja em uma única linha de texto, sem caracteres de terminação de linha separando os campos no registro. Se o texto JSON estiver formatado para impressão, você poderá receber uma mensagem de erro como HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object (HIVE\$1CURSOR\$1ERROR: a linha não é um objeto JSON válido) ou HIVE\$1CURSOR\$1ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE\$1CURSOR\$1ERROR: JSONParseException: Fim de entrada inesperado: marcador de fechamento esperado para OBJECT) quando tentar consultar a tabela após criá-la. Para obter mais informações, consulte [JSON Data Files](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) na documentação do OpenX SerDe no GitHub. 

1. Selecione **Executar consulta**. A instrução cria uma tabela do Athena chamada `r53_rlogs` com colunas que representam cada um dos campos em seus dados de log do Resolver.

1. No editor de consultas do console do Athena, execute a consulta a seguir para verificar se a tabela foi criada.

   ```
   SELECT * FROM "r53_rlogs" LIMIT 10
   ```

# Usar projeção de partições
<a name="querying-r53-resolver-logs-partitioning-example"></a>

O exemplo a seguir mostra uma declaração `CREATE TABLE` para logs de consulta do Resolver que usa projeção de partição e é particionada por VPC e por data. Para obter mais informações sobre projeção de partições, consulte [Usar projeção de partições com o Amazon Athena](partition-projection.md).

```
CREATE EXTERNAL TABLE r53_rlogs (
  version string,
  account_id string,
  region string,
  vpc_id string,
  query_timestamp string,
  query_name string,
  query_type string,
  query_class string,
  rcode string,
  answers array<
    struct<
      Rdata: string,
      Type: string,
      Class: string>
    >,
  srcaddr string,
  srcport int,
  transport string,
  srcids struct<
    instance: string,
    resolver_endpoint: string
    >,
  firewall_rule_action string,
  firewall_rule_group_id string,
  firewall_domain_list_id string
)
PARTITIONED BY (
`date` string,
`vpc` string
)
ROW FORMAT SERDE      'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT          'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION              's3://amzn-s3-demo-bucket/route53-query-logging/AWSLogs/aws_account_id/vpcdnsquerylogs/'
TBLPROPERTIES(
'projection.enabled' = 'true',
'projection.vpc.type' = 'enum',
'projection.vpc.values' = 'vpc-6446ae02',
'projection.date.type' = 'date',
'projection.date.range' = '2023/06/26,NOW',
'projection.date.format' = 'yyyy/MM/dd',
'projection.date.interval' = '1',
'projection.date.interval.unit' = 'DAYS',
'storage.location.template' = 's3://amzn-s3-demo-bucket/route53-query-logging/AWSLogs/aws_account_id/vpcdnsquerylogs/${vpc}/${date}/'
)
```

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

Os exemplos a seguir mostram algumas consultas do Athena que você pode executar em seus logs de consulta do Resolver.

## Exemplo 1: logs de consulta em ordem decrescente de query\$1timestamp
<a name="querying-r53-resolver-logs-example-1-query-logs-in-descending-query_timestamp-order"></a>

A consulta a seguir exibe os resultados do log em ordem decrescente de `query_timestamp`.

```
SELECT * FROM "r53_rlogs"
ORDER BY query_timestamp DESC
```

## Exemplo 2: logs de consulta com horários de início e de término específicos
<a name="querying-r53-resolver-logs-example-2-query-logs-within-specified-start-and-end-times"></a>

As consultas a seguir analisam os logs entre meia-noite e 8h no dia 24 de setembro de 2020. Substitua os horários de início e de término de acordo com os seus requisitos.

```
SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode
FROM "r53_rlogs"
WHERE (parse_datetime(query_timestamp,'yyyy-MM-dd''T''HH:mm:ss''Z')
     BETWEEN parse_datetime('2020-09-24-00:00:00','yyyy-MM-dd-HH:mm:ss') 
     AND parse_datetime('2020-09-24-00:08:00','yyyy-MM-dd-HH:mm:ss'))
ORDER BY query_timestamp DESC
```

## Exemplo 3: logs de consulta baseados em um padrão de nome especificado de consulta de DNS
<a name="querying-r53-resolver-logs-example-3-query-logs-based-on-a-specified-dns-query-name-pattern"></a>

A consulta a seguir seleciona os registros com nome de consulta que inclui a string “example.com”.

```
SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode, answers
FROM "r53_rlogs"
WHERE query_name LIKE '%example.com%'
ORDER BY query_timestamp DESC
```

## Exemplo 4: solicitações de log de consulta sem resposta
<a name="querying-r53-resolver-logs-example-4-query-log-requests-with-no-answer"></a>

A consulta a seguir seleciona as entradas de log em que a solicitação não recebeu resposta.

```
SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode, answers
FROM "r53_rlogs"
WHERE cardinality(answers) = 0
```

## Exemplo 5: logs de consulta com uma resposta específica
<a name="querying-r53-resolver-logs-example-5-query-logs-with-a-specific-answer"></a>

A consulta a seguir mostra os logs nos quais o valor `answer.Rdata` tem o endereço IP especificado.

```
SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode, answer.Rdata
FROM "r53_rlogs"
CROSS JOIN UNNEST(r53_rlogs.answers) as st(answer)
WHERE answer.Rdata='203.0.113.16';
```