Comment puis-je utiliser Amazon Athena pour analyser mes journaux d’accès à l’Application Load Balance ?

Lecture de 4 minute(s)
0

Je souhaite utiliser Amazon Athena pour analyser mes journaux d’accès à l’Application Load Balancer.

Brève description

Elastic Load Balancing n’active pas la journalisation des accès par défaut. Lorsque vous activez la journalisation des accès, vous devez indiquer un compartiment Amazon Simple Storage Service (Amazon S3). Athena analyse les journaux d’accès à l’Application Load Balancer et au Classic Load Balancer et stocke les journaux dans le compartiment Amazon S3.

Remarque : cette résolution s’applique uniquement aux ](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html)Application Load Balancers[.

Résolution

Créer une base de données et une table pour les journaux Application Load Balancer

Procédez comme suit :

  1. Ouvrez la console Athena.
  2. Pour créer une base de données, exécutez la commande suivante dans l’éditeur de requête :
    CREATE DATABASE alb_db
    Remarque : il est recommandé de créer la base de données dans la même Région AWS que le compartiment S3.
  3. Dans la base de données, créez une table alb_logs pour les journaux Application Load Balancer.
    Exemple de requête :
    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}"
    )
    Remarque : dans la requête précédente, remplacez le nom de la table et les emplacements S3 par le nom de votre table et vps emplacements S3. Pour le champ projection.day.range, remplacez la valeur 2022/01/01 par une date de début. Pour améliorer les performances des requêtes, vous pouvez créer une table avec une projection des partitions.
  4. Pour créer une table contenant des partitions stockées dans le catalogue de données AWS Glue, exécutez la requête suivante :
    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>/'
    Remarque : dans la requête précédente, remplacez le nom de la table et les emplacements S3 par le nom de votre table et vps emplacements S3.
  5. (Facultatif) Pour charger les partitions, exécutez l’instruction DDL ALTER TABLE ADD PARTITION suivante :
    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/'
    Remarque : si votre table utilise une projection de partitions, ignorez l’étape de chargement des partitions. N’utilisez pas de robot AWS Glue dans les journaux Application Load Balancer.
  6. Dans le volet de navigation, sous Table, choisissez Aperçu de la table.
  7. Dans la fenêtre Résultats, vous pouvez consulter les données des journaux d’accès à l’Application Load Balancer.
    Remarque : pour exécuter des instructions SQL sur la table, utilisez l’éditeur de requête.

Informations connexes

Entrées des journaux d’accès

Interrogation des journaux Application Load Balancer

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 9 mois