Criar e consultar uma tabela para logs de fluxo da Amazon VPC
O procedimento a seguir cria uma tabela da Amazon VPC para os logs de fluxo da Amazon VPC. Ao criar um log de fluxo em um formato personalizado, você cria uma tabela com campos que correspondem aos campos especificados quando criou o log de fluxo, na mesma ordem em que os especificou.
Para criar uma tabela do Athena para logs de fluxo da Amazon VPC
-
Insira uma instrução DDL como a que se segue no editor de consultas do console do Athena, seguindo as diretrizes na seção Considerações e limitações. A instrução do exemplo cria uma tabela com as colunas de logs de fluxo da Amazon VPC nas versões 2 a 5, conforme documentado em Registros de log de fluxo. Se você usar outro conjunto ou outra ordem de colunas, modifique a instrução conforme apropriado.
CREATE EXTERNAL TABLE IF NOT EXISTS `vpc_flow_logs` ( version int, account_id string, interface_id string, srcaddr string, dstaddr string, srcport int, dstport int, protocol bigint, packets bigint, bytes bigint, start bigint, `end` bigint, action string, log_status string, vpc_id string, subnet_id string, instance_id string, tcp_flags int, type string, pkt_srcaddr string, pkt_dstaddr string, region string, az_id string, sublocation_type string, sublocation_id string, pkt_src_aws_service string, pkt_dst_aws_service string, flow_direction string, traffic_path int ) PARTITIONED BY (`date` date) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LOCATION 's3://amzn-s3-demo-bucket/
prefix
/AWSLogs/{account_id}
/vpcflowlogs/{region_code}
/' TBLPROPERTIES ("skip.header.line.count"="1");Observe os seguintes pontos:
-
A consulta especifica
ROW FORMAT DELIMITED
e omite a especificação de um SerDe. Isso significa que a consulta usa Lazy Simple SerDe para arquivos CSV, TSV e com delimitação personalizada. Nesta consulta, os campos terminam com um espaço. -
A cláusula
PARTITIONED BY
usa o tipodate
. Isso torna possível usar operadores matemáticos em consultas para selecionar qual é mais antiga ou mais recente em relação a uma determinada data.nota
Como
date
é uma palavra-chave reservada em instruções DDL, é necessário fazer o escape dela com acentos graves. Para ter mais informações, consulte Escapar palavras-chave reservadas em consultas. -
Para um log de fluxo da VPC com um formato personalizado diferente, modifique os campos para que correspondam aos campos especificados ao criar o log de fluxo.
-
-
Modifique
LOCATION 's3://amzn-s3-demo-bucket/
para apontar para o bucket do Amazon S3 que contém os dados de log.prefix
/AWSLogs/{account_id}
/vpcflowlogs/{region_code}
/' -
Execute a consulta no console do Athena. Depois que a consulta for concluída, o Athena registrará a tabela
vpc_flow_logs
, preparando os dados dela para você fazer as consultas. -
Crie partições para poder ler os dados, conforme o exemplo de consulta a seguir. Esta consulta cria uma única partição para uma data especificada. Substitua os espaços reservados por data e local, conforme necessário.
nota
Esta consulta cria apenas uma única partição, para uma data especificada por você. Para automatizar o processo, use um script que execute essa consulta e crie partições dessa maneira para
year/month/day
ou use uma instruçãoCREATE TABLE
que especifique a projeção das partições.ALTER TABLE vpc_flow_logs ADD PARTITION (`date`='
YYYY-MM-dd
') LOCATION 's3://amzn-s3-demo-bucket/prefix
/AWSLogs/{account_id}
/vpcflowlogs/{region_code}
/YYYY
/MM
/dd
';
Exemplos de consulta para a tabela vpc_flow_logs
Use o editor de consultas no console do Athena para executar instruções SQL na tabela criada. É possível salvar as consultas, visualizar consultas anteriores ou baixar os resultados da consulta no formato CSV. Nos exemplos a seguir, substitua vpc_flow_logs
pelo nome da tabela. Modifique os valores das colunas e outras variáveis de acordo com os seus requisitos.
A consulta de exemplo a seguir lista um máximo de 100 logs de fluxo para a data especificada.
SELECT * FROM vpc_flow_logs WHERE date = DATE('2020-05-04') LIMIT 100;
A consulta a seguir lista todas as conexões TCP rejeitadas e usa a coluna de partição de data recém-criada, date
, para extrair dela o dia da semana em que ocorreram esses eventos.
SELECT day_of_week(date) AS day, date, interface_id, srcaddr, action, protocol FROM vpc_flow_logs WHERE action = 'REJECT' AND protocol = 6 LIMIT 100;
Para ver qual dos servidores está recebendo o maior número de solicitações HTTPS, use a consulta a seguir. Ela conta o número de pacotes recebidos na porta HTTPS 443, agrupa-os por endereço IP de destino e retorna os 10 principais da última semana.
SELECT SUM(packets) AS packetcount, dstaddr FROM vpc_flow_logs WHERE dstport = 443 AND date > current_date - interval '7' day GROUP BY dstaddr ORDER BY packetcount DESC LIMIT 10;