Consultar os logs do Amazon Route 53 Resolver - Amazon Athena

Consultar os logs do Amazon Route 53 Resolver

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 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 no Guia do desenvolvedor do Amazon Route 53.

Criar a tabela de logs de consulta do Resolver

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/.

  2. 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://DOC-EXAMPLE-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 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_CURSOR_ERROR: Row is not a valid JSON Object (HIVE_CURSOR_ERROR: a linha não é um objeto JSON válido) ou HIVE_CURSOR_ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE_CURSOR_ERROR: 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 na documentação do OpenX SerDe no GitHub.

  3. 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.

  4. 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

Exemplo de particionamento

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 Projeção de partições com o Amazon Athena.

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://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/route53-query-logging/AWSLogs/aws_account_id/vpcdnsquerylogs/${vpc}/${date}/' )

Consultas de exemplo

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_timestamp

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

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 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 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 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';