Abfragen von Application-Load-Balancer-Protokollen - Amazon Athena

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Abfragen von Application-Load-Balancer-Protokollen

Ein Application Load Balancer ist eine Lastverteilungsoption für Elastic Load Balancing, die eine Verteilung des Datenverkehrs in einer Microservices-Bereitstellung mit Containern ermöglicht. Durch das Abfragen von Application Load Balancer-Protokollen können Sie die Datenverkehrsquelle, die Latenz und die Bytes anzeigen, die zwischen Elastic Load Balancing-Instances und Backend-Anwendungen übermittelt werden. Weitere Informationen finden Sie unter Zugriffsprotokolle für Ihren Application Load Balancer und Verbindungsprotokolle für Ihren Application Load Balancer im Benutzerhandbuch für Application Load Balancer.

Voraussetzungen

Die Tabelle für ALB-Zugriffsprotokolle erstellen

  1. Kopieren Sie die folgende CREATE TABLE-Anweisung und fügen Sie sie in den Abfrage-Editor der Athena-Konsole ein. Weitere Informationen zu den ersten Schritten mit der Athena-Konsole finden Sie unter Erste Schritte. Ersetzen Sie die Werte in LOCATION 's3://DOC-EXAMPLE-BUCKET/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/' mit denen, die Ihrem Amazon-S3-Bucket-Standort entsprechen. Informationen zu den einzelnen Feldern finden Sie unter Zugriffsprotokoll-Einträge im Benutzerhandbuch für Application Load Balancer.

    Anmerkung

    Die folgende CREATE TABLE-Anweisung enthält die kürzlich hinzugefügtenclassification- und classification_reason-Spalten. Um eine Tabelle für Application Load Balancer-Zugriffsprotokolle zu erstellen, die diese Einträge nicht enthalten, entfernen Sie diese beiden Spalten aus der CREATE TABLE-Anweisung und ändern Sie die Regex entsprechend.

    CREATE EXTERNAL TABLE IF NOT EXISTS alb_access_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 ) 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://DOC-EXAMPLE-BUCKET/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/'
  2. Führen Sie die Abfrage in der Athena-Konsole aus. Nach Beendigung der Abfrage registriert Athena die alb_access_logs-Tabelle, sodass Sie die Daten zum Ausgeben von Abfragen nutzen können.

Erstellen der Tabelle für ALB-Zugriffsprotokolle in Athena mithilfe der Partitionsprojektion

Da ALB-Zugriffsprotokolle eine bekannte Struktur haben, deren Partitionsschema Sie im Voraus angeben können, können Sie die Abfragelaufzeit reduzieren und die Partitionsverwaltung automatisieren, indem Sie die Athena-Partitionsprojektionsfunktion verwenden. Partitionsprojektion fügt automatisch neue Partitionen hinzu, wenn neue Daten hinzugefügt werden. Dadurch entfällt die Notwendigkeit, Partitionen manuell mithilfe von ALTER TABLE ADD PARTITION hinzuzufügen.

Die folgende CREATE TABLE Beispielanweisung verwendet automatisch die Partitionsprojektion für ALB-Zugriffsprotokolle von einem bestimmten Datum bis heute für eine einzelne Region. AWS Die Anweisung basiert auf dem Beispiel im vorherigen Abschnitt, fügt jedoch PARTITIONED BY- und TBLPROPERTIES-Klauseln hinzu, um die Partitionsprojektion zu ermöglichen. Ersetzen Sie in den storage.location.template Klauseln LOCATION und die Platzhalter durch Werte, die den Amazon S3 S3-Bucket-Speicherort Ihrer ALB-Zugriffsprotokolle identifizieren. Ersetzen Sie für projection.day.range den 01.01.2022 durch das Startdatum, das Sie verwenden möchten. Nach dem erfolgreichen Ausführen der Abfrage können Sie die Tabelle abfragen. Sie müssen ALTER TABLE ADD PARTITION nicht ausführen, um die Partitionen zu laden.

CREATE EXTERNAL TABLE IF NOT EXISTS alb_access_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 ) 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://DOC-EXAMPLE-BUCKET/AWSLogs/<ACCOUNT-NUMBER>/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://DOC-EXAMPLE-BUCKET/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/${day}" )

Weitere Informationen zur Partitionsprojektion finden Sie unter Partitionsprojektion mit Amazon Athena.

Beispielabfragen für ALB-Zugriffsprotokolle

Bei der folgenden Abfrage wird die Anzahl der HTTP GET-Anfragen gezählt und nach Client-IP-Adressen gruppiert, die vom Load Balancer empfangen wurden:

SELECT COUNT(request_verb) AS count, request_verb, client_ip FROM alb_logs GROUP BY request_verb, client_ip LIMIT 100;

Eine weitere Abfrage zeigt die URLs, die von Safari-Browser-Benutzern besucht wurden:

SELECT request_url FROM alb_logs WHERE user_agent LIKE '%Safari%' LIMIT 10;

Die folgende Abfrage zeigt Datensätze mit ELB-Statuscodewerten größer oder gleich 500.

SELECT * FROM alb_logs WHERE elb_status_code >= 500

Im folgenden Beispiel wird gezeigt, wie Sie die Protokolle nach datetime durchsuchen:

SELECT client_ip, sum(received_bytes) FROM alb_logs WHERE parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') BETWEEN parse_datetime('2018-05-30-12:00:00','yyyy-MM-dd-HH:mm:ss') AND parse_datetime('2018-05-31-00:00:00','yyyy-MM-dd-HH:mm:ss') GROUP BY client_ip;

Die folgende Abfrage fragt die Tabelle ab, die die Partitionsprojektion für alle ALB-Protokolle vom angegebenen Tag verwendet.

SELECT * FROM alb_logs WHERE day = '2022/02/12'

Die Tabelle für ALB-Verbindungsprotokolle wird erstellt

  1. Kopieren Sie die folgende CREATE TABLE-Anweisung und fügen Sie sie in den Abfrage-Editor der Athena-Konsole ein. Weitere Informationen zu den ersten Schritten mit der Athena-Konsole finden Sie unter Erste Schritte. Ersetzen Sie die Werte in LOCATION 's3://DOC-EXAMPLE-BUCKET/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/' mit denen, die Ihrem Amazon-S3-Bucket-Standort entsprechen. Informationen zu den einzelnen Feldern finden Sie unter Verbindungsprotokolleinträge im Benutzerhandbuch für Application Load Balancers.

    CREATE EXTERNAL TABLE IF NOT EXISTS alb_connection_logs ( time string, client_ip string, client_port int, listener_port int, tls_protocol string, tls_cipher string, tls_handshake_latency double, leaf_client_cert_subject string, leaf_client_cert_validity string, leaf_client_cert_serial_number string, tls_verify_status string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([A-Za-z0-9.-]*) ([^ ]*) ([-.0-9]*) \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*)') LOCATION 's3://<DOC-EXAMPLE-BUCKET>/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/'
  2. Führen Sie die Abfrage in der Athena-Konsole aus. Nach Beendigung der Abfrage registriert Athena die alb_connection_logs-Tabelle, sodass Sie die Daten zum Ausgeben von Abfragen nutzen können.

Erstellen der Tabelle für ALB-Verbindungsprotokolle in Athena mithilfe der Partitionsprojektion

Da ALB-Verbindungsprotokolle eine bekannte Struktur haben, deren Partitionsschema Sie im Voraus angeben können, können Sie die Abfragelaufzeit reduzieren und die Partitionsverwaltung automatisieren, indem Sie die Athena-Partitionsprojektionsfunktion verwenden. Partitionsprojektion fügt automatisch neue Partitionen hinzu, wenn neue Daten hinzugefügt werden. Dadurch entfällt die Notwendigkeit, Partitionen manuell mithilfe von ALTER TABLE ADD PARTITION hinzuzufügen.

Die folgende CREATE TABLE Beispielanweisung verwendet automatisch die Partitionsprojektion für ALB-Verbindungsprotokolle von einem bestimmten Datum bis heute für eine einzelne Region. AWS Die Anweisung basiert auf dem Beispiel im vorherigen Abschnitt, fügt jedoch PARTITIONED BY- und TBLPROPERTIES-Klauseln hinzu, um die Partitionsprojektion zu ermöglichen. Ersetzen Sie in den storage.location.template Klauseln LOCATION und die Platzhalter durch Werte, die den Amazon S3 S3-Bucket-Speicherort Ihrer ALB-Verbindungsprotokolle identifizieren. Ersetzen Sie für projection.day.range 2023/01/01 durch das Startdatum, das Sie verwenden möchten. Nach dem erfolgreichen Ausführen der Abfrage können Sie die Tabelle abfragen. Sie müssen ALTER TABLE ADD PARTITION nicht ausführen, um die Partitionen zu laden.

CREATE EXTERNAL TABLE IF NOT EXISTS alb_connection_logs ( time string, client_ip string, client_port int, listener_port int, tls_protocol string, tls_cipher string, tls_handshake_latency double, leaf_client_cert_subject string, leaf_client_cert_validity string, leaf_client_cert_serial_number string, tls_verify_status 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]*) ([A-Za-z0-9.-]*) ([^ ]*) ([-.0-9]*) \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*)') LOCATION 's3://DOC-EXAMPLE-BUCKET/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/' TBLPROPERTIES ( "projection.enabled" = "true", "projection.day.type" = "date", "projection.day.range" = "2023/01/01,NOW", "projection.day.format" = "yyyy/MM/dd", "projection.day.interval" = "1", "projection.day.interval.unit" = "DAYS", "storage.location.template" = "s3://DOC-EXAMPLE-BUCKET/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/${day}" )

Weitere Informationen zur Partitionsprojektion finden Sie unter Partitionsprojektion mit Amazon Athena.

Beispielabfragen für ALB-Verbindungsprotokolle

Bei der folgenden Abfrage werden Vorkommen gezählt, bei denen der Wert für nicht tls_verify_status angegeben wurde'Success', gruppiert nach Client-IP-Adresse:

SELECT DISTINCT client_ip, count() AS count FROM alb_connection_logs WHERE tls_verify_status != 'Success' GROUP BY client_ip ORDER BY count() DESC;

Die folgende Abfrage sucht nach Ereignissen, bei denen der Wert für im angegebenen Zeitraum mehr als 2 Sekunden tls_handshake_latency betrug:

SELECT * FROM alb_connection_logs WHERE ( parse_datetime(time, 'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') BETWEEN parse_datetime('2024-01-01-00:00:00', 'yyyy-MM-dd-HH:mm:ss') AND parse_datetime('2024-03-20-00:00:00', 'yyyy-MM-dd-HH:mm:ss') ) AND (tls_handshake_latency >= 2.0);

Weitere Informationen finden Sie auch unter