Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Interrogation des journaux de l'Application Load Balancer
Application Load Balancer est une option de répartition de charge pour Elastic Load Balancing qui permet la distribution du trafic dans un déploiement de microservices à l'aide de conteneurs. L'interrogation des journaux de l'Application Load Balancer vous permet de connaître la source du trafic et la latence, ainsi que les octets transférés vers et depuis les instances Elastic Load Balancing et les applications backend. Pour plus d'informations, consultez les journaux d'accès de votre Application Load Balancer et les journaux de connexion de votre Application Load Balancer dans le Guide de l'utilisateur des Application Load Balancers.
Rubriques
- Prérequis
- Création de la table pour les journaux d'accès ALB
- Création de la table pour les journaux d'accès ALB dans Athena à l'aide de la projection de partitions
- Exemples de requêtes pour les journaux d'accès ALB
- Création de la table pour les journaux de connexion ALB
- Création de la table pour les journaux de connexion ALB dans Athena à l'aide de la projection de partitions
- Exemples de requêtes pour les journaux de connexion ALB
- Consultez aussi
Prérequis
-
Activez la journalisation des accès ou la journalisation des connexions afin que les journaux Application Load Balancer puissent être enregistrés dans votre compartiment Amazon S3.
-
Une base de données pour contenir la table que vous allez créer pour Athena. Pour créer une base de données, vous pouvez utiliser l'Athena ou AWS Glue la console. Pour de plus amples informations, veuillez consulter Création de bases de données dans Athena dans ce guide ou Utilisation des bases de données sur la console AWS glue dans le Guide du développeur AWS Glue .
Création de la table pour les journaux d'accès ALB
-
Copiez et collez l'instruction
CREATE TABLE
suivante dans l'éditeur de requête de la console Athena. Pour plus d'informations sur le démarrage avec la console Athena, veuillez consulter la rubrique Mise en route. Remplacez les valeurs dansLOCATION 's3://
par celles correspondant à l'emplacement de votre compartiment Simple Storage Service (Amazon S3). Pour plus d'informations sur chaque champ, consultez la rubrique Entrées du journal d'accès du Guide de l'utilisateur Application Load Balancer.DOC-EXAMPLE-BUCKET
/AWSLogs/<ACCOUNT-NUMBER>
/elasticloadbalancing/<REGION>
/'Note
L'instruction
CREATE TABLE
suivante comprend les colonnesclassification
etclassification_reason
récemment ajoutées. Pour créer une table pour les journaux d'accès Application Load Balancer qui ne contiennent pas ces entrées, supprimez ces deux colonnes de l'instructionCREATE TABLE
et modifiez la regex en conséquence.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>
/' -
Exécutez la requête dans la console Athena. Une fois que la requête est terminée, Athena enregistre la table
alb_access_logs
, de telle sorte que les données soient prêtes pour que vous puissiez émettre des requêtes.
Création de la table pour les journaux d'accès ALB dans Athena à l'aide de la projection de partitions
Les journaux d'accès ALB ayant une structure connue dont vous pouvez spécifier le schéma de partition à l'avance, vous pouvez réduire le temps d'exécution des requêtes et automatiser la gestion des partitions en utilisant la fonction de projection de partition Athena. La projection des partitions ajoute automatiquement de nouvelles partitions à mesure que de nouvelles données sont ajoutées. Vous n'avez donc plus besoin d'ajouter manuellement des partitions à l'aide de la commande ALTER TABLE ADD PARTITION
.
L'exemple d'CREATE TABLE
instruction suivant utilise automatiquement la projection de partition sur les journaux d'accès ALB à partir d'une date spécifiée jusqu'à aujourd'hui pour une seule AWS
région. L'instruction se base sur l'exemple de la section précédente, mais ajoute les clauses PARTITIONED BY
et TBLPROPERTIES
pour activer la projection de partition. Dans les storage.location.template
clauses LOCATION
et, remplacez les espaces réservés par des valeurs identifiant l'emplacement du compartiment Amazon S3 de vos journaux d'accès ALB. Pour projection.day.range
, remplacez 2022
/01
/01
par la date de début que vous souhaitez utiliser. Après avoir exécuté la requête avec succès, vous pouvez interroger la table. Vous n'avez pas besoin d'exécuter ALTER TABLE ADD PARTITION
pour charger les partitions.
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}" )
Pour plus d'informations sur la projection de partition, voir Projection de partition avec Amazon Athena.
Exemples de requêtes pour les journaux d'accès ALB
La requête suivante compte le nombre de demandes HTTP GET reçues par l'équilibreur de charge et regroupées par l'adresse IP du client:
SELECT COUNT(request_verb) AS count, request_verb, client_ip FROM alb_logs GROUP BY request_verb, client_ip LIMIT 100;
Une autre requête affiche les URL visitées par les utilisateurs du navigateur Safari:
SELECT request_url FROM alb_logs WHERE user_agent LIKE '%Safari%' LIMIT 10;
La requête suivante montre les enregistrements dont les valeurs de code d'état ELB sont supérieures ou égales à 500.
SELECT * FROM alb_logs WHERE elb_status_code >= 500
L'exemple suivant montre comment analyser les journaux par datetime
:
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;
La requête suivante interroge la table qui utilise la projection de partitions pour tous les journaux ALB à partir du jour spécifié.
SELECT * FROM alb_logs WHERE day = '2022/02/12'
Création de la table pour les journaux de connexion ALB
-
Copiez et collez l'instruction
CREATE TABLE
suivante dans l'éditeur de requête de la console Athena. Pour plus d'informations sur le démarrage avec la console Athena, veuillez consulter la rubrique Mise en route. Remplacez les valeurs dansLOCATION 's3://
par celles correspondant à l'emplacement de votre compartiment Simple Storage Service (Amazon S3). Pour plus d'informations sur chaque champ, consultez les entrées du journal des connexions dans le guide de l'utilisateur pour les équilibreurs de charge d'application.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>
/' -
Exécutez la requête dans la console Athena. Une fois que la requête est terminée, Athena enregistre la table
alb_connection_logs
, de telle sorte que les données soient prêtes pour que vous puissiez émettre des requêtes.
Création de la table pour les journaux de connexion ALB dans Athena à l'aide de la projection de partitions
Comme les journaux de connexion ALB ont une structure connue dont vous pouvez spécifier le schéma de partition à l'avance, vous pouvez réduire le temps d'exécution des requêtes et automatiser la gestion des partitions en utilisant la fonction de projection de partition Athena. La projection des partitions ajoute automatiquement de nouvelles partitions à mesure que de nouvelles données sont ajoutées. Vous n'avez donc plus besoin d'ajouter manuellement des partitions à l'aide de la commande ALTER TABLE ADD PARTITION
.
L'exemple d'CREATE TABLE
instruction suivant utilise automatiquement la projection de partition sur les journaux de connexion ALB à partir d'une date spécifiée jusqu'à aujourd'hui pour une seule AWS région. L'instruction se base sur l'exemple de la section précédente, mais ajoute les clauses PARTITIONED BY
et TBLPROPERTIES
pour activer la projection de partition. Dans les storage.location.template
clauses LOCATION
et, remplacez les espaces réservés par des valeurs identifiant l'emplacement du compartiment Amazon S3 de vos journaux de connexion ALB. Pourprojection.day.range
, remplacez 2023
/01
/01
par la date de début que vous souhaitez utiliser. Après avoir exécuté la requête avec succès, vous pouvez interroger la table. Vous n'avez pas besoin d'exécuter ALTER TABLE ADD PARTITION
pour charger les partitions.
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}" )
Pour plus d'informations sur la projection de partition, voir Projection de partition avec Amazon Athena.
Exemples de requêtes pour les journaux de connexion ALB
Les requêtes suivantes comptent les occurrences pour lesquelles la valeur de n'tls_verify_status
était pas'Success'
, groupées par adresse IP du client :
SELECT DISTINCT client_ip, count() AS count FROM alb_connection_logs WHERE tls_verify_status != 'Success' GROUP BY client_ip ORDER BY count() DESC;
La requête suivante recherche les occurrences pour lesquelles la valeur de tls_handshake_latency
était supérieure à 2 secondes dans la plage de temps spécifiée :
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);
Consultez aussi
-
Comment analyser mes journaux d'accès Application Load Balancer avec Amazon Athena ?
dans le Centre de connaissances AWS . -
Pour plus d'informations sur les codes d'état HTTP dans Elastic Load Balancing, consultez la section Résolution des problèmes de vos Application Load Balancers dans le Guide de l'utilisateur des Application Load Balancers.
-
Cataloguez et analysez les journaux d'Application Load Balancer de manière plus efficace grâce à des classificateurs AWS Glue personnalisés et à Amazon Athena sur
le Big Data Blog.AWS