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 Ressourcen
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, fügen Sie sie in den Abfrage-Editor der Athena-Konsole ein und ändern Sie sie dann nach Bedarf für Ihre eigenen Protokolleintragsanforderungen. Weitere Informationen zu den ersten Schritten mit der Athena-Konsole finden Sie unter Erste Schritte. Ersetzen Sie den Pfad in derLOCATION
Klausel durch den Speicherort Ihres Amazon S3 S3-Zugriffsprotokollordners. Weitere Informationen zum Speicherort der Zugriffs-Protokolldateien finden Sie unter Zugriffs-Protokolldateien im Benutzerhandbuch für Application Load Balancers.Informationen zu den einzelnen Protokolldateifeldern finden Sie unter Zugriffs-Protokolleinträge im Benutzerhandbuch für Application Load Balancers.
Anmerkung
Die folgende
CREATE TABLE
Beispielanweisung enthält die kürzlich hinzugefügtenclassification
Spaltenclassification_reason
, undconn_trace_id
('Traceability ID' oder TID). Um eine Tabelle für Application Load Balancer Balancer-Zugriffsprotokolle zu erstellen, die diese Einträge nicht enthalten, entfernen Sie die entsprechenden Spalten aus derCREATE TABLE
Anweisung und ändern Sie den regulären Ausdruck 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, conn_trace_id 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/
access-log-folder-path
/' -
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. Weitere Informationen zum Speicherort der Zugriffs-Protokolldateien finden Sie unter Zugriffs-Protokolldateien im Benutzerhandbuch für Application Load Balancers. 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. Informationen zu den einzelnen Protokolldateifeldern finden Sie unter Zugriffsprotokolleinträge.
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, 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://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_access_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_access_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_access_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_access_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;
Mit der folgenden Abfrage wird die Tabelle abgefragt, die die Partitionsprojektion für alle ALB-Zugriffsprotokolle des angegebenen Tages verwendet.
SELECT * FROM alb_access_logs WHERE day = '2022/02/12'
Die Tabelle für ALB-Verbindungsprotokolle wird erstellt
-
Kopieren Sie die folgende
CREATE TABLE
Beispielanweisung, fügen Sie sie in den Abfrage-Editor der Athena-Konsole ein und ändern Sie sie dann nach Bedarf für Ihre eigenen Protokolleintragsanforderungen. Weitere Informationen zu den ersten Schritten mit der Athena-Konsole finden Sie unter Erste Schritte. Ersetzen Sie den Pfad in derLOCATION
Klausel durch den Speicherort Ihres Amazon S3 S3-Verbindungsprotokollordners. Weitere Informationen zum Speicherort der Verbindungsprotokolldateien finden Sie unter Verbindungsprotokolldateien im Benutzerhandbuch für Application Load Balancers. Informationen zu den einzelnen Protokolldateifeldern finden Sie unter Verbindungsprotokolleinträge.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, conn_trace_id 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/
connection-log-folder-path
/' -
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. Weitere Informationen zum Speicherort der Verbindungsprotokolldateien finden Sie unter Verbindungsprotokolldateien im Benutzerhandbuch für Application Load Balancers. 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. Informationen zu den einzelnen Protokolldateifeldern finden Sie unter Verbindungsprotokolleinträge.
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, 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]*) ([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 Ressourcen
-
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.