Como usar o Amazon Athena para analisar meus logs de acesso do Application Load Balancer?
4 minuto de leitura
0
Quero usar o Amazon Athena para analisar meus logs de acesso do Application Load Balancer.
Breve descrição
O Elastic Load Balancing não ativa logs de acesso por padrão. Ao ativar logs de acesso, você deve especificar um bucket do Amazon Simple Storage Service (Amazon S3). O Athena analisa logs de acesso do Application Load Balancer e do Classic Load Balancer e os armazena no bucket do Amazon S3.
Observação: essa resolução somente é aplicável a Application Load Balancers.
Resolução
Crie um banco de dados e uma tabela para os logs do Application Load Balancer
Conclua as seguintes etapas:
- Abra o console do Athena.
- Para criar um banco de dados, execute o comando a seguir no Editor de Consultas:
Observação: é uma prática recomendada criar o banco de dados na mesma região da AWS que o bucket do Amazon S3.CREATE DATABASE alb_db
- No banco de dados, crie uma tabela alb_logs para os logs do Application Load Balancer.
Consulta de exemplo:
Observação: na consulta anterior, substitua o nome da tabela e os locais do S3 pelo nome da sua tabela e seus locais do S3. Para projection.day.range, substitua 2022/01/01 por uma data de início. Para melhorar o desempenho da consulta, crie uma tabela com projeção de partição.CREATE EXTERNAL TABLE IF NOT EXISTS alb_logs( type string, time string, elb string, client_ip string, client_port int, target_ip string, target_port int, request_processing_time double, target_processing_time double, response_processing_time double, elb_status_code int, target_status_code string, received_bytes bigint, sent_bytes bigint, request_verb string, request_url string, request_proto string, user_agent string, ssl_cipher string, ssl_protocol string, target_group_arn string, trace_id string, domain_name string, chosen_cert_arn string, matched_rule_priority string, request_creation_time string, actions_executed string, redirect_url string, lambda_error_reason string, target_port_list string, target_status_code_list string, classification string, classification_reason string, conn_trace_id string ) PARTITIONED BY(day STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES( 'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) (.*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-_]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\s]+?)\" \"([^\s]+)\" \"([^ ]*)\" \"([^ ]*)\" ?([^ ]*)?( .*)?') LOCATION 's3://<your-alb-logs-directory>/AWSLogs/<ACCOUNT-ID>/elasticloadbalancing/<REGION>/' TBLPROPERTIES( "projection.enabled" = "true", "projection.day.type" = "date", "projection.day.range" = "2022/01/01,NOW", "projection.day.format" = "yyyy/MM/dd", "projection.day.interval" = "1", "projection.day.interval.unit" = "DAYS", "storage.location.template" = "s3://<your-alb-logs-directory>/AWSLogs/<ACCOUNT-ID>/elasticloadbalancing/<REGION>/${day}" )
- Para criar uma tabela com partições armazenadas no Catálogo de Dados do AWS Glue, execute a seguinte consulta:
Observação: na consulta anterior, substitua o nome da tabela e os locais do S3 pelo nome da sua tabela e seus locais do S3.CREATE EXTERNAL TABLE IF NOT EXISTS alb_logs_partitioned(type string, time string, elb string, client_ip string, client_port int, target_ip string, target_port int, request_processing_time double, target_processing_time double, response_processing_time double, elb_status_code int, target_status_code string, received_bytes bigint, sent_bytes bigint, request_verb string, request_url string, request_proto string, user_agent string, ssl_cipher string, ssl_protocol string, target_group_arn string, trace_id string, domain_name string, chosen_cert_arn string, matched_rule_priority string, request_creation_time string, actions_executed string, redirect_url string, lambda_error_reason string, target_port_list string, target_status_code_list string, classification string, classification_reason string, conn_trace_id string ) PARTITIONED BY(day string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES( 'serialization.format' = '1', 'input.regex' ='([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) (.*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-_]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\s]+?)\" \"([^\s]+)\" \"([^ ]*)\" \"([^ ]*)\" ?([^ ]*)?( .*)?') LOCATION 's3://<your-alb-logs-directory>/AWSLogs/<ACCOUNT-ID>/elasticloadbalancing/<REGION>/'
- (Opcional) Para carregar as partições, execute a seguinte instrução DDL ALTER TABLE ADD PARTITION:
Observação: se sua tabela usar projeção de partição, ignore a etapa de carregamento de partições. Não use um crawler do AWS Glue nos logs do Application Load Balancer.ALTER TABLE alb_logs_partitioned ADD PARTITION (day = '2022/05/21') LOCATION's3://<your-alb-logs-directory>/AWSLogs/<ACCOUNT-ID>/elasticloadbalancing/<REGION>/2022/05/21/'
- No painel de navegação, em Tabelas, escolha Visualizar tabela.
- Na janela Resultados, visualize os dados dos logs de acesso do Application Load Balancer.
Observação: para executar instruções SQL na tabela, use o Editor de consultas.
Informações relacionadas
Vídeos relacionados

Assista ao vídeo da Islam para saber mais (4:21)

AWS OFICIALAtualizada há 10 meses
Sem comentários
Conteúdo relevante
- feita há um mêslg...
- feita há um mêslg...
- feita há 5 diaslg...
- feita há 3 meseslg...
- AWS OFICIALAtualizada há 3 anos
- Por que os clientes não conseguem se conectar ao meu balanceador de carga do Elastic Load Balancing?AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 3 meses