Wie analysiere ich meine Application Load Balancer-Zugriffsprotokolle mit Amazon Athena?

Lesedauer: 4 Minute
0

Ich möchte meine Application Load Balancer-Zugriffsprotokolle mit Amazon Athena analysieren.

Kurzbeschreibung

Elastic Load Balancing aktiviert die Zugriffsprotokolle standardmäßig nicht. Wenn Sie die Zugriffsprotokolle aktivieren, geben Sie einen Amazon Simple Storage Service (Amazon S3)-Bucket an. Athena analysiert die Zugriffsprotokolle von Application Load Balancer und Classic Load Balancer und speichert die Protokolle im Amazon S3-Bucket.

Hinweis: Diese Lösung gilt nur für Application Load Balancer.

Lösung

Erstellen Sie eine Datenbank und eine Tabelle für Application Load Balancer-Protokolle

Führen Sie die folgenden Schritte aus:

  1. Öffnen Sie die Athena-Konsole.
  2. Um eine Datenbank zu erstellen, führen Sie den folgenden Befehl im Abfrage-Editor aus:
    CREATE DATABASE alb_db
    Hinweis: Es hat sich bewährt, die Datenbank in derselben AWS-Region wie der Amazon S3-Bucket zu erstellen.
  3. Erstellen Sie in der Datenbank eine alb_logs-Tabelle für die Application Load Balancer-Protokolle.
    Beispielabfrage:
    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}"
    )
    Hinweis: Ersetzen Sie in der vorherigen Abfrage den Tabellennamen und die S3-Speicherorte durch Ihren Tabellennamen und die S3-Speicherorte. Ersetzen Sie 2022/01/01 für projection.day.range durch ein Startdatum. Für eine bessere Abfrageleistung können Sie eine Tabelle mit Partitionsprojektion erstellen.
  4. Um eine Tabelle mit Partitionen zu erstellen, die im AWS Glue-Datenkatalog gespeichert sind, führen Sie die folgende Abfrage aus:
    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>/'
    Hinweis: Ersetzen Sie in der vorherigen Abfrage den Tabellennamen und die S3-Speicherorte durch Ihren Tabellennamen und die S3-Speicherorte.
  5. (Optional) Um die Partitionen zu laden, führen Sie die folgende ALTER TABLE ADD PARTITION DDL-Anweisung aus:
    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/'
    Hinweis: Wenn Ihre Tabelle Partitionsprojektion verwendet, überspringen Sie den Schritt Partitionen laden. Verwenden Sie keinen AWS Glue-Crawler für die Application Load Balancer-Protokolle.
  6. Wählen Sie im Navigationsbereich unter Tabellen die Option Tabellenvorschau aus.
  7. Sie können die Daten aus den Application Load Balancer-Zugriffsprotokollen im Ergebnis-Fenster einsehen.
    Hinweis: Verwenden Sie den Abfrage-Editor, um SQL-Anweisungen für die Tabelle auszuführen.

Ähnliche Informationen

Protokolleinträge aufrufen

Application Load Balancer-Protokolle abfragen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 9 Monaten