Consulta de los registros de Application Load Balancer
Un Application Load Balancer aplicaciones es una opción de equilibro de carga de Elastic Load Balancing que permite la distribución del tráfico en una implementación de microservicios con contenedores. La consulta de los registros del Equilibrador de carga de aplicación le permite ver el origen del tráfico, la latencia y los bytes transferidos a instancias de Elastic Load Balancing y desde dichas instancias y las aplicaciones de backend. Para obtener más información, consulte Registros de acceso para el equilibrador de carga de aplicación y Registros de conexión para el equilibrador de carga de aplicación en la Guía del usuario para equilibradores de carga de aplicación.
Temas
- Requisitos previos
- Creación de la tabla para los registros de acceso de ALB
- Creación de la tabla para los registros de acceso del ALB en Athena mediante la proyección de particiones
- Consultas de ejemplo para registros de acceso del ALB
- Creación de la tabla para los registros de conexión del ALB
- Creación de la tabla para los registros de conexión del ALB en Athena mediante la proyección de particiones
- Consultas de ejemplo para registros de conexión del ALB
- Recursos adicionales de
Requisitos previos
-
Habilite el registro de acceso o el registro de conexión para que los registros del equilibrador de carga de aplicación se puedan guardar en el bucket de Amazon S3.
-
Una base de datos en la que contener la tabla que creará para Athena. Para crear una base de datos, puede utilizar Athena o la consola de AWS Glue. Para obtener más información, consulte Creación de bases de datos en Athena en esta guía o Trabajo con bases de datos en la consola de AWS Glue en la Guía para desarrolladores de AWS Glue.
Creación de la tabla para los registros de acceso de ALB
-
Copie y pegue la siguiente instrucción
CREATE TABLE
en el editor de consultas de la Consola de Athena y, a continuación, modifíquela según sea necesario para sus propios requisitos de entrada de registros. Para obtener más información acerca de cómo empezar a usar la consola de Athena, consulte Introducción. Sustituya la ruta de la cláusulaLOCATION
por la ubicación de la carpeta de registro de acceso de Amazon S3. Para obtener más información sobre la ubicación del archivo de registro de acceso, consulte Archivos de registro de acceso en la Guía del usuario para equilibradores de carga de aplicación.Para obtener información sobre cada campo del archivo de registro, consulte Entradas de registro de acceso en la Guía del usuario de los equilibradores de carga de aplicaciones.
nota
La siguiente instrucción
CREATE TABLE
de ejemplo incluye las columnasclassification
,classification_reason
yconn_trace_id
(“ID de trazabilidad”, o TID) agregadas recientemente. Para crear una tabla para los registros de acceso al equilibrador de carga de aplicaciones que no contenga estas entradas, elimine las columnas correspondientes de la instrucciónCREATE TABLE
y modifique la expresión regular en consecuencia.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
/' -
Ejecute la consulta en la consola de Athena. Cuando la consulta finaliza, Athena registra la tabla
alb_access_logs
, dejando los datos que contiene listos para efectuar consultas.
Creación de la tabla para los registros de acceso del ALB en Athena mediante la proyección de particiones
Dado que los registros de acceso del ALB tienen una estructura conocida, cuyo esquema de partición puede especificarse de antemano, es posible reducir el tiempo de ejecución de las consultas y automatizar la administración de particiones mediante la característica de proyección de particiones de Athena. La proyección de particiones agrega de forma automática nuevas particiones a medida que se agregan nuevos datos. Esto hace que no sea necesario agregar particiones manualmente mediante ALTER TABLE ADD PARTITION
.
El siguiente ejemplo de instrucción CREATE TABLE
utiliza de manera automática la proyección de particiones en registros de acceso del ALB desde una fecha especificada hasta el presente para una sola región de AWS. La instrucción se basa en el ejemplo de la sección anterior, pero agrega las cláusulas PARTITIONED BY
y TBLPROPERTIES
para habilitar la proyección de la partición. En las cláusulas LOCATION
y storage.location.template
, reemplace los marcadores de posición por valores que identifiquen la ubicación del bucket de Amazon S3 de los registros del ALB. Para obtener más información sobre la ubicación del archivo de registro de acceso, consulte Archivos de registro de acceso en la Guía del usuario para equilibradores de carga de aplicación. En projection.day.range
, reemplace 2022
/01
/01
por la fecha de inicio que desee utilizar. Una vez ejecutada la consulta correctamente, puede consultar la tabla. No tiene que ejecutar ALTER TABLE ADD PARTITION
para cargar las particiones. Para obtener información sobre cada campo del archivo de registro, consulte Acceso a las entradas del registro.
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}" )
Para obtener más información sobre la proyección de particiones, consulte Proyección de particiones con Amazon Athena.
Consultas de ejemplo para registros de acceso del ALB
La siguiente consulta cuenta el número de solicitudes HTTP GET que el equilibrador de carga ha recibido, agrupadas en función de la dirección IP del cliente:
SELECT COUNT(request_verb) AS count, request_verb, client_ip FROM alb_access_logs GROUP BY request_verb, client_ip LIMIT 100;
Otra consulta muestra las direcciones URL visitadas por los usuarios del navegador Safari:
SELECT request_url FROM alb_access_logs WHERE user_agent LIKE '%Safari%' LIMIT 10;
En la siguiente consulta, se muestran registros que tienen valores de código de estado de ELB superiores o iguales a 500.
SELECT * FROM alb_access_logs WHERE elb_status_code >= 500
En el siguiente ejemplo, se muestra cómo analizar los registros por 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 siguiente consulta examina la tabla que utiliza la proyección de particiones en busca de todos los registros de acceso al equilibrador de carga de aplicaciones del día especificado.
SELECT * FROM alb_access_logs WHERE day = '2022/02/12'
Creación de la tabla para los registros de conexión del ALB
-
Copie y pegue la siguiente instrucción
CREATE TABLE
de ejemplo en el editor de consultas de la Consola de Athena y, a continuación, modifíquela según sea necesario para satisfacer sus propios requisitos de entrada de registros. Para obtener más información acerca de cómo empezar a usar la consola de Athena, consulte Introducción. Sustituya la ruta de la cláusulaLOCATION
por la ubicación de la carpeta del registro de conexiones de Amazon S3. Para obtener más información sobre la ubicación del archivo de registro de conexión, consulte Archivos de registro de conexión en la Guía del usuario para equilibradores de carga de aplicación. Para obtener información sobre cada campo del archivo de registro, consulte Entradas del registro de conexión.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
/' -
Ejecute la consulta en la consola de Athena. Cuando la consulta finaliza, Athena registra la tabla
alb_connection_logs
, dejando los datos que contiene listos para efectuar consultas.
Creación de la tabla para los registros de conexión del ALB en Athena mediante la proyección de particiones
Dado que los registros de conexión del ALB tienen una estructura conocida, cuyo esquema de partición puede especificarse de antemano, es posible reducir el tiempo de ejecución de las consultas y automatizar la administración de particiones mediante la característica de proyección de particiones de Athena. La proyección de particiones agrega de forma automática nuevas particiones a medida que se agregan nuevos datos. Esto hace que no sea necesario agregar particiones manualmente mediante ALTER TABLE ADD PARTITION
.
El siguiente ejemplo de instrucción CREATE TABLE
utiliza de manera automática la proyección de particiones en registros de conexión del ALB desde una fecha especificada hasta el presente para una sola región de AWS. La instrucción se basa en el ejemplo de la sección anterior, pero agrega las cláusulas PARTITIONED BY
y TBLPROPERTIES
para habilitar la proyección de la partición. En las cláusulas LOCATION
y storage.location.template
, reemplace los marcadores de posición por valores que identifiquen la ubicación del bucket de Amazon S3 de los registros de conexión del ALB. Para obtener más información sobre la ubicación del archivo de registro de conexión, consulte Archivos de registro de conexión en la Guía del usuario para equilibradores de carga de aplicación. Para projection.day.range
, reemplace 2023
/01
/01
por la fecha de inicio que quiere utilizar. Una vez ejecutada la consulta correctamente, puede consultar la tabla. No tiene que ejecutar ALTER TABLE ADD PARTITION
para cargar las particiones. Para obtener información sobre cada campo del archivo de registro, consulte Entradas del registro de conexión.
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}" )
Para obtener más información sobre la proyección de particiones, consulte Proyección de particiones con Amazon Athena.
Consultas de ejemplo para registros de conexión del ALB
El siguiente recuento de consultas se produce cuando el valor de tls_verify_status
no era 'Success'
, agrupadas por dirección IP del cliente:
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 siguiente consulta busca los incidentes en los que el valor de tls_handshake_latency
fuera superior a 2 segundos en el intervalo de tiempo especificado:
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);
Recursos adicionales de
-
¿Cómo analizo los registros de acceso al Equilibrador de carga de aplicación mediante Amazon Athena
en el Centro de conocimientos de AWS. -
Para obtener información sobre los códigos de estado HTTP de Elastic Load Balancing, consulte Solución de problemas de equilibradores de carga de aplicación en la Guía del usuario para equilibradores de carga de aplicación.
-
Catalogue y analice los registros del Equilibrador de carga de aplicación de forma más eficiente con clasificadores AWS Glue personalizados y Amazon Athena
en el Blog de macrodatos de AWS.