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.
Themen
- Voraussetzungen
- Die Tabelle für ALB-Zugriffsprotokolle erstellen
- Erstellen der Tabelle für ALB-Zugriffsprotokolle in Athena mithilfe der Partitionsprojektion
- Beispielabfragen für ALB-Zugriffsprotokolle
- Die Tabelle für ALB-Verbindungsprotokolle wird erstellt
- Erstellen der Tabelle für ALB-Verbindungsprotokolle in Athena mithilfe der Partitionsprojektion
- Beispielabfragen für ALB-Verbindungsprotokolle
- Weitere Informationen finden Sie auch unter
Voraussetzungen
-
Aktivieren Sie die Zugriffs - oder Verbindungsprotokollierung, damit die Application Load Balancer Balancer-Protokolle in Ihrem Amazon S3 S3-Bucket gespeichert werden können.
-
Eine Datenbank, die die Tabelle enthält, die Sie für Athena erstellen werden. Um eine Datenbank zu erstellen, können Sie Athena oder die AWS Glue Konsole verwenden. Weitere Informationen finden Sie unter Erstellen von Datenbanken in Athena in diesem Leitfaden oder unter Arbeiten mit Datenbanken in der AWS -Glue-Konsole im Entwicklerhandbuch für AWS Glue .
Die Tabelle für ALB-Zugriffsprotokolle erstellen
-
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 inLOCATION 's3://
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.DOC-EXAMPLE-BUCKET
/AWSLogs/<ACCOUNT-NUMBER>
/elasticloadbalancing/<REGION>
/'Anmerkung
Die folgende
CREATE TABLE
-Anweisung enthält die kürzlich hinzugefügtenclassification
- undclassification_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 derCREATE 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>
/' -
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
-
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 inLOCATION 's3://
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.DOC-EXAMPLE-BUCKET
/AWSLogs/<ACCOUNT-NUMBER>
/elasticloadbalancing/<REGION>
/'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>
/' -
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/
durch das Startdatum, das Sie verwenden möchten. Nach dem erfolgreichen Ausführen der Abfrage können Sie die Tabelle abfragen. Sie müssen 01
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
-
Wie analysiere ich meine Zugriffsprotokolle von Application Load Balancer mit Amazon Athena
im AWS Knowledge Center. -
Informationen zu den HTTP-Statuscodes in Elastic Load Balancing finden Sie unter Fehlerbehebung bei Ihren Application Load Balancers im Benutzerhandbuch für Application Load Balancer.
-
Katalogisieren und analysieren Sie Application Load Balancer Balancer-Protokolle effizienter mit AWS Glue benutzerdefinierten Klassifikatoren und Amazon Athena
im AWS Big Data-Blog.