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:

  1. Abra o console do Athena.
  2. Para criar um banco de dados, execute o comando a seguir no Editor de Consultas:
    CREATE DATABASE alb_db
    Observação: é uma prática recomendada criar o banco de dados na mesma região da AWS que o bucket do Amazon S3.
  3. No banco de dados, crie uma tabela alb_logs para os logs do Application Load Balancer.
    Consulta de exemplo:
    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}"
    )
    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.
  4. Para criar uma tabela com partições armazenadas no Catálogo de Dados do AWS Glue, execute a seguinte consulta:
    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>/'
    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.
  5. (Opcional) Para carregar as partições, execute a seguinte instrução DDL ALTER TABLE ADD PARTITION:
    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/'
    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.
  6. No painel de navegação, em Tabelas, escolha Visualizar tabela.
  7. 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

Entradas do log de acesso

Consultar logs do Application Load Balancer

AWS OFICIAL
AWS OFICIALAtualizada há 10 meses