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
- Ressources supplémentaires
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'
CREATE TABLE
instruction suivante dans l'éditeur de requêtes de la console Athena, puis modifiez-la selon vos propres exigences en matière de saisie dans le journal. Pour plus d'informations sur le démarrage avec la console Athena, veuillez consulter la rubrique Mise en route. Remplacez le chemin indiqué dans laLOCATION
clause par l'emplacement de votre dossier de journal d'accès Amazon S3. Pour plus d'informations sur l'emplacement des fichiers journaux d'accès, consultez la section Fichiers journaux d'accès dans le Guide de l'utilisateur des équilibreurs de charge d'application.Pour plus d'informations sur chaque champ du fichier journal, consultez les entrées du journal d'accès dans le guide de l'utilisateur pour les équilibreurs de charge d'application.
Note
L'exemple d'
CREATE TABLE
instruction suivant inclut les colonnesclassification
,classification_reason
, etconn_trace_id
(« ID de traçabilité », ou TID) 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 les colonnes correspondantes de l'CREATE TABLE
instruction et modifiez l'expression régulière 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, 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
/' -
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 plus d'informations sur l'emplacement des fichiers journaux d'accès, consultez la section Fichiers journaux d'accès dans le Guide de l'utilisateur des équilibreurs de charge d'application. 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. Pour plus d'informations sur chaque champ du fichier journal, consultez la section Entrées du journal d'accès.
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}" )
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_access_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_access_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_access_logs WHERE elb_status_code >= 500
L'exemple suivant montre comment analyser les journaux par datetime
:
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;
La requête suivante interroge la table qui utilise la projection de partition pour tous les journaux d'accès ALB à partir du jour spécifié.
SELECT * FROM alb_access_logs WHERE day = '2022/02/12'
Création de la table pour les journaux de connexion ALB
-
Copiez et collez l'exemple d'
CREATE TABLE
instruction suivant dans l'éditeur de requêtes de la console Athena, puis modifiez-le selon vos propres exigences en matière de saisie dans le journal. Pour plus d'informations sur le démarrage avec la console Athena, veuillez consulter la rubrique Mise en route. Remplacez le chemin indiqué dans laLOCATION
clause par l'emplacement du dossier de votre journal de connexion Amazon S3. Pour plus d'informations sur l'emplacement des fichiers journaux de connexion, consultez la section Fichiers journaux de connexion dans le Guide de l'utilisateur des équilibreurs de charge d'application. Pour plus d'informations sur chaque champ du fichier journal, consultez la section Entrées du journal des connexions.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
/' -
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. Pour plus d'informations sur l'emplacement des fichiers journaux de connexion, consultez la section Fichiers journaux de connexion dans le Guide de l'utilisateur des équilibreurs de charge d'application. 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. Pour plus d'informations sur chaque champ du fichier journal, consultez la section Entrées du journal des connexions.
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}" )
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);
Ressources supplémentaires
-
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