Registros y supervisión del balanceo de cargas HTTP(S)

En este documento se proporciona la información que necesitas para comprender los registros y la supervisión de Stackdriver para el balanceo de cargas HTTP(S).

Registro

Puedes habilitar, inhabilitar y ver registros para un servicio de backend de balanceo de cargas HTTP(S).

De forma predeterminada, un balanceador de cargas HTTP(S) registra todas las solicitudes en Stackdriver Logging. Si cambias la configuración del servicio de backend, puedes inhabilitar el registro por completo o configurar el balanceador de cargas para registrar solo una fracción aleatoria de solicitudes, lo que ahorra espacio de almacenamiento y costo.

Inhabilita o modifica el registro en un servicio de backend existente

Console

  1. Ve a la página Balanceo de cargas de Google Cloud Platform Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en el nombre del balanceador de cargas.
  3. Haz clic en Editar.
  4. Haz clic en Configuración de backend.
  5. Haz clic en el lápiz Editar junto al servicio de backend.
  6. Haz clic en Configuración avanzada (afinidad de sesión, tiempo de espera para el desvío de conexión).
  7. Desmarca Habilitar registro para inhabilitar por completo el registro.
  8. Si dejas habilitado el registro, puedes configurar una fracción de Tasa de muestreo diferente. Puedes configurarla entre 0.0 y 1.0 (valor predeterminado). Para reducir el número de registros almacenados al 20%, configura el valor en 0.2.
  9. Haz clic en Actualizar.

gcloud

Inhabilita el registro por completo

gcloud beta compute backend-services update [BACKEND_SERVICE] \
 --no-enable-logging

donde

  • --no-enable-logging inhabilita el registro para ese servicio de backend.

Modifica la tasa de muestreo de registro

gcloud beta compute backend-services update [BACKEND_SERVICE] \
 --logging-sample-rate=[VALUE]

donde

  • --logging-sample-rate te permite especificar un valor de 0.0 a 1.0, en el que 0.0 significa que no hay paquetes registrados y 1.0 significa que el 100% de los paquetes están registrados.

Habilita el registro en un servicio de backend existente

Console

  1. Ve a la página Balanceo de cargas de Google Cloud Platform Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en el nombre del balanceador de cargas.
  3. Haz clic en Editar.
  4. Haz clic en Configuración de backend.
  5. Haz clic en lápiz/Editar vínculo junto al servicio de backend.
  6. Haz clic en Configuración avanzada (afinidad de sesión, tiempo de espera para el desvío de conexión).
  7. Haz clic en Habilitar registro.
  8. Configura una fracción de Tasa de muestreo. Puedes configurarla entre 0.0 y 1.0 (valor predeterminado).
  9. Haz clic en Actualizar.

gcloud

gcloud beta compute backend-services update [BACKEND_SERVICE] \
 --enable-logging \
 --logging-sample-rate=[VALUE]

donde

  • --enable-logging habilita el registro para ese servicio de backend.
  • --logging-sample-rate te permite especificar un valor de 0.0 a 1.0, en el que 0.0 significa que no hay paquetes registrados y 1.0 significa que el 100% de los paquetes están registrados. Solo es significativo con el parámetro --enable-logging. Habilitar el registro, pero configurar la tasa de muestreo en 0.0 equivale a inhabilitar el registro.

Ver registros

Para ver los registros, ve a Visor de registros.

Los registros HTTP(S) se indexan primero mediante la regla de reenvío y, a continuación, mediante el mapa de URL.

  • Para ver todos los registros en el primer menú desplegable, selecciona Balanceador de cargas HTTP de Cloud > Todas las reglas de reenvío.
  • Para ver los registros correspondientes a una sola regla de reenvío, selecciona un solo nombre de regla de reenvío de la lista.
  • Para ver los registros correspondientes a un solo mapa de URL que utiliza la regla de reenvío, destaca una regla de reenvío y elige el mapa de URL de interés.

Los campos de registro de tipo booleano normalmente aparecen solo si tienen el valor true. Si un campo booleano tiene un valor de false, ese campo se omitirá del registro.

La codificación UTF-8 se aplica a los campos de registro. Los caracteres que no son caracteres UTF-8 se reemplazan con signos de interrogación.

Puedes configurar la exportación de las métricas basadas en los registros de Stackdriver para los registros de recursos del balanceador de cargas HTTP(S) de Cloud (resource.type=http_load_balancer). Las métricas creadas se basan en el recurso "Regla de balanceo de cargas HTTP de Google Cloud (métricas basadas en registros)" (l7_lb_rule), que está disponible en los paneles de Stackdriver Monitoring en lugar del recurso https_lb_rule:

Ir a Monitoring

¿Qué se registra?

Las entradas de registro de balanceo de cargas HTTP(S) contienen información útil para supervisar y depurar el tráfico de HTTP(S). Las entradas de registro contienen los siguientes tipos de información:

  • La información general que se muestra en la mayoría de los registros de GCP, como la intensidad, el ID del proyecto, el número del proyecto, la marca de tiempo, etcétera.
  • Campos de registro de HttpRequest. Sin embargo, HttpRequest.protocol y HttpRequest.latency no se propagan para los registros de Stackdriver de balanceo de cargas HTTP(S).
  • Un campo statusDetails dentro de structPayload. Este campo contiene una string que explica por qué el balanceador de cargas mostró el estado HTTP que creó. Las siguientes tablas contienen más explicaciones sobre estas strings de registro.

Mensajes de éxito HTTP de stateDetail

statusDetails (exitoso) Significado Códigos de respuesta adjuntos comunes
byte_range_caching La solicitud HTTP se entregó mediante el almacenamiento en caché de rango de bytes. Cualquier código de respuesta almacenable en caché es posible.
response_from_cache La solicitud HTTP se entregó desde la caché. Cualquier código de respuesta almacenable en caché es posible.
response_from_cache_validated El código de retorno se configuró a partir de una entrada almacenada en caché que validó un backend. Cualquier código de respuesta almacenable en caché es posible.
response_sent_by_backend La solicitud HTTP se envió correctamente al backend. Se muestran desde el backend de VM: cualquier código de respuesta es posible.

Mensajes de error HTTP de stateDetail

statusDetails (error) Significado Códigos de respuesta adjuntos comunes
aborted_request_due_to_backend_early_response Se anuló una solicitud con cuerpo debido a que el backend envió una respuesta anticipada con un código de error. La respuesta se reenvió al cliente. La solicitud se terminó. 4XX o 5XX
backend_503_propagated_as_error El backend envió una respuesta de error 503. Este código de error puede indicar un problema de rendimiento o configuración en el backend. 503
backend_connection_closed_after_partial_response_sent Se cerró la conexión de backend inesperadamente después de que se enviara una respuesta parcial al cliente. Se muestran desde el backend de VM: cualquier código de respuesta es posible. Un 0 indica que el backend no envió encabezados de respuesta completos.
backend_connection_closed_before_data_sent_to_client El backend cerró inesperadamente su conexión con el balanceador de cargas antes de que la respuesta se enviara al cliente. Esto puede suceder si el balanceador de cargas envía tráfico a otra entidad como, por ejemplo, un balanceador de cargas externo que se ejecuta en una instancia de VM, que tiene un tiempo de espera TCP menor que el tiempo de espera de 10 minutos (600 segundos) del balanceador de cargas HTTP(S). La configuración manual del tiempo de espera TCP (keepalive) en el servicio de destino a más de 600 segundos puede solucionar este problema. 502
backend_early_response_with_non_error_status El backend envió una respuesta sin errores (1XX o 2XX) a una solicitud antes de recibir todo el cuerpo de la solicitud. 502
backend_interim_response_not_supported El backend envió una respuesta provisional 1XX a la solicitud en un contexto en que las respuestas provisionales no son compatibles. 502
backend_response_corrupted El cuerpo de la respuesta HTTP que envió el backend tiene una codificación de transferencia fragmentada no válida o está dañado. Cualquier código de respuesta posible según la naturaleza del daño. A menudo, 502.
backend_timeout Se agotó el tiempo de espera del backend mientras se generaba una respuesta. 502
body_not_allowed El cliente envió una solicitud HTTP con un cuerpo, pero el método HTTP utilizado no permite un cuerpo. 400
byte_range_caching_aborted El balanceador de cargas anuló una respuesta debido a intervalos de bytes inconsistentes. 2XX
byte_range_caching_forwarded_backend_response El balanceador de cargas no pudo entregar una respuesta mediante el almacenamiento en caché de rango de bytes, pero pudo entregar una respuesta desde el backend. Se muestran desde el backend: cualquier código de respuesta es posible.
byte_range_caching_retrieval_abandoned El usuario canceló una solicitud de rango de bytes o una solicitud de validación que inició Cloud CDN. Se muestran desde el backend: cualquier código de respuesta es posible.
byte_range_caching_retrieval_from_backend_failed_after_partial_response Se produjo un error con una solicitud de rango de bytes o una solicitud de validación que inició Cloud CDN. Consulta la entrada de registro correspondiente de Stackdriver Logging de la solicitud que inició Cloud CDN para obtener el estado detallado del backend. 2XX
cache_lookup_failed_after_partial_response El balanceador de cargas no pudo entregar una respuesta completa de la memoria caché debido a un error interno. 2XX
cache_lookup_timeout_after_partial_response Se agotó el tiempo de espera de la secuencia de búsqueda de caché porque el cliente no recuperó el contenido de manera oportuna. 2XX
client_disconnected_after_partial_response La conexión con el cliente se interrumpió después de que el balanceador de cargas envió una respuesta parcial. Se muestran desde el backend de VM: cualquier código de respuesta es posible.
client_disconnected_before_any_response La conexión con el cliente se interrumpió antes de que el balanceador de cargas envíe cualquier respuesta. 0
client_timed_out El balanceador de cargas inactivó la conexión del cliente debido a la falta de progreso cuando se enviaba la solicitud o la respuesta. 0 o 408
denied_by_security_policy El balanceador de cargas rechazó esta solicitud debido a una política de seguridad de Cloud Armor. Se configuran en la política de seguridad.
error_uncompressing_gzipped_body Se produjo un error cuando se descomprimía una respuesta HTTP comprimida. 503
failed_to_connect_to_backend No se pudo conectar el balanceador de cargas al backend. 502
failed_to_pick_backend El balanceador de cargas no pudo elegir un backend en buen estado para manejar la solicitud. 502
failed_to_negotiate_alpn El balanceador de cargas y el backend no pudieron negociar un protocolo de capa de aplicación (como HTTP/2) para comunicarse entre sí a través de TLS. 502
headers_too_long Los encabezados de solicitud eran mayores que el máximo permitido. 413
http_version_not_supported No se admite la versión HTTP. Actualmente, solo se admiten HTTP 0.9, 1.0, 1.1 y 2.0. 400
internal_error Error interno en el balanceador de cargas. 4XX
invalid_http2_client_header_format Los encabezados HTTP/2 del cliente no son válidos. 400
malformed_chunked_body El cuerpo de la solicitud estaba codificado en un fragmento incorrecto. 411
request_loop_detected El balanceador de cargas detectó un bucle de solicitud. Esto podría deberse a una configuración incorrecta en la que el backend reenvió la solicitud al balanceador de cargas. 502
required_body_but_no_content_length La solicitud HTTP requiere un cuerpo, pero los encabezados de solicitud no incluían una longitud de contenido ni un encabezado fragmentado de codificación de transferencia. 400 o 403
secure_url_rejected Se recibió una solicitud con una URL https:// a través de una conexión HTTP/1.1 de texto sin formato. 400
ssl_san_verification_failed El balanceador de cargas no pudo encontrar un SAN (Nombre alternativo del asunto) en el certificado SSL que presentó el backend que coincide con el nombre de host configurado. 502
ssl_certificate_chain_verification_failed El certificado SSL que presentó el backend no superó la verificación del certificado SSL. 502
unsupported_method El cliente proporcionó un método de solicitud HTTP no compatible. 400
upgrade_header_rejected La solicitud HTTP del cliente contenía el encabezado Actualizar y se rechazó. 400
uri_too_long El URI de solicitud HTTP era mayor que la longitud máxima permitida. 414
websocket_closed Se cerró la conexión de Websockets.
websocket_handshake_failed Se produjo un error en el protocolo de enlace de Websockets. Cualquier código de respuesta posible según la naturaleza de la falla del protocolo de enlace.

Registro para lista de IP denegadas y permitidas

Las siguientes entradas de registro en el Visor de registros son para el registro de la lista de IP denegadas y permitidas de HTTP(S) y, además, incluyen la siguiente estructura en jsonPayload. Los detalles de la solicitud HTTP aparecen en el mensaje httpRequest.

  • status_details (string): una descripción textual del código de respuesta
  • enforced_security_policy: la regla de política de seguridad que se aplicó en realidad
    • resultado (string): ACCEPT, DENY o UNKNOWN_OUTCOME
    • configured_action (string): igual que el resultado
    • nombre (string): nombre de la política de seguridad
    • prioridad (número): prioridad de regla coincidente
  • preview_security_policy: se propaga si la solicitud alcanzó una regla configurada para la vista previa (presente solo cuando una regla de vista previa hubiera tenido prioridad sobre la regla aplicada)
    • resultado (string): ACCEPT, DENY o UNKNOWN_OUTCOME
    • configured_action (string): igual que el resultado
    • nombre (string): nombre de la política de seguridad
    • prioridad (número): prioridad de regla coincidente

Puedes interactuar con los registros del balanceador de cargas HTTP(S) mediante la API de Stackdriver Logging. La API de Logging proporciona maneras de filtrar de forma interactiva registros que tienen configurados campos específicos y exportar registros coincidentes a Stackdriver Console, Google Cloud Storage, BigQuery o Cloud Pub/Sub. Para obtener más información sobre la API de Stackdriver Logging, consulta cómo ver registros.

Supervisión

El balanceo de cargas HTTP(S) exporta los datos de supervisión a Stackdriver.

Las métricas de supervisión pueden usarse para los siguientes propósitos:

  • Evaluar la configuración, el uso y el rendimiento de un balanceador de cargas
  • Solucionar problemas
  • Mejorar el uso de recursos y la experiencia del usuario

Además de los paneles predefinidos en Stackdriver, puedes crear paneles personalizados, configurar alertas y consultar las métricas a través de la API de Stackdriver Monitoring.

Visualiza los paneles de Stackdriver Monitoring

  1. Ve a Monitoring en Google Cloud Platform Console.
    Ir a Monitoring
  2. Selecciona Recursos > Balanceadores de cargas de Google Cloud.
  3. Haz clic en el nombre del balanceador de cargas.

En el panel izquierdo, puedes ver varios detalles de este balanceador de cargas HTTP(S). En el panel derecho, puedes ver grafos de serie temporal. Haz clic en el vínculo Desglose para ver desgloses específicos.

Define alertas de Stackdriver

Puedes definir alertas de Stackdriver a través de varias métricas de balanceo de cargas HTTP(S):

  1. Ve a Monitoring en Google Cloud Platform Console.
    Ir a Monitoring
  2. Selecciona Alertas > Crear una política.
  3. Haz clic en Agregar condición y selecciona el tipo de condición.
  4. Selecciona métricas y filtros. Para las métricas, el tipo de recurso es balanceador de cargas HTTP(S).
  5. Haz clic en Guardar condición.
  6. Ingresa el nombre de la política y haz clic en Guardar política.

Define paneles personalizados de Stackdriver

Puedes crear paneles personalizados de Stackdriver a través de las métricas de balanceo de cargas HTTP(S):

  1. Ve a Monitoring en Google Cloud Platform Console.
    Ir a Monitoring
  2. Selecciona Paneles > Crear panel.
  3. Haz clic en Agregar gráfico.
  4. Ponle un título al gráfico.
  5. Selecciona métricas y filtros. Para las métricas, el tipo de recurso es balanceador de cargas HTTP(S).
  6. Haz clic en Guardar.

Frecuencia y retención de informes de métricas

Las métricas de los balanceadores de cargas HTTP(S) se exportan a Stackdriver en lotes con nivel de detalle de 1 minuto. Los datos de supervisión se conservan durante seis (6) semanas. El panel proporciona un análisis de datos en intervalos predeterminados de 1 hora (una hora), 6 horas (seis horas), 1 día (un día), 1 semana (una semana) y 6 semanas (seis semanas). Puedes solicitar un análisis de forma manual en cualquier intervalo de 6 semanas a 1 minuto.

Supervisión de métricas para los balanceadores de cargas HTTP(S)

Las siguientes métricas para los balanceadores de cargas HTTP(S) se informan en Stackdriver:

Métrica Descripción
Recuento de solicitudes El número de solicitudes que entregó el balanceador de cargas HTTP(S)
Recuento de bytes de solicitudes El número de bytes enviados como solicitudes de los usuarios al balanceador de cargas HTTP(S)
Recuento de bytes de respuestas La cantidad de bytes enviados como respuestas del balanceador de cargas HTTP(S) a los usuarios
Latencias totales Una distribución de la latencia medida desde el momento en que el proxy del balanceador de cargas recibe el primer byte de la solicitud hasta que el proxy recibe un ACK del cliente solicitante en el último byte de respuesta. La solicitud/respuesta mide las latencias totales, por lo que las pausas entre solicitudes en la misma conexión con "Conexión: keep-alive" no afectan la medición. Por lo general, esta medida se reduce al percentil 95 en las vistas de Stackdriver.
Ejemplo: un balanceador de cargas tiene 1 solicitud por segundo del Reino Unido, todas con una latencia de 100 ms, y 9 solicitudes por segundo de los EE.UU., todas con una latencia de 50 ms. En un determinado momento, hubo 60 solicitudes del Reino Unido y 540 solicitudes de los EE.UU. Las métricas de supervisión conservan la distribución en todas las dimensiones. Puedes solicitar lo siguiente:
  • latencia general mediana (300/600): 50 ms
  • latencia mediana del Reino Unido (30/60): 100 ms
  • Latencia general del percentil 95 (570/600): 100 ms
  • y así sucesivamente…
RTT de frontend(*) Una distribución del RTT suavizado que se mide para cada conexión entre el cliente y el proxy (la pila de TCP realiza la medición). Por lo general, se reduce al percentil 95 en las vistas de Stackdriver.
Latencias de backend(*) Una distribución de la latencia medida desde que el momento en que el proxy envió el primer byte de la solicitud al backend hasta que el proxy recibió del backend el último byte de respuesta. Por lo general, se reduce al percentil 95 en las vistas de Stackdriver.
Fracción de clase de código de respuesta La fracción de respuestas totales del balanceador de cargas HTTP(S) que se encuentran en cada clase de código de respuesta (2XX, 4XX, …). En Stackdriver, este valor solo está disponible en los paneles predeterminados. No está disponible para los paneles personalizados. Puedes configurar alertas a través de la API.
Recuento de solicitudes de backend El número de solicitudes enviadas desde el balanceador de cargas HTTP(S) a los backends.
Recuento de bytes de solicitudes de backend El número de bytes enviados como solicitudes del balanceador de cargas HTTP(S) a los backends.
Recuento de bytes de respuesta de backend El número de bytes enviados como respuestas de los backends al balanceador de cargas HTTP(S).

(*) No se garantiza que la suma del RTT de frontend y las latencias de backend sea menor o igual que las latencias totales. Esto se debe a que, aunque sondeamos el RTT a través del socket del proxy al cliente en el momento en que se confirma la respuesta HTTP, confiamos en el informe del kernel para algunas de estas mediciones y no podemos garantizar que el kernel tendrá una medición del RTT para la respuesta HTTP dada. El resultado final es un valor suavizado de RTT que también se ve afectado por las respuestas HTTP anteriores, SYN/ACK y los protocolos de enlace SSL que no afectan los tiempos reales de las solicitudes HTTP actuales.

Filtra las dimensiones para las métricas del balanceador de cargas HTTP(S)

Las métricas se agregan para cada balanceador de cargas HTTP(S). Puedes filtrar métricas agregadas según las siguientes dimensiones(*):

Propiedad Descripción
ALCANCE DEL BACKEND El alcance de GCP (región o zona) del grupo de instancias del servicio de backend que entregó la conexión.

Si no había ningún grupo de instancias disponible o si otra entidad entregó la solicitud, verás uno de los siguientes valores en lugar de la región o la zona del grupo de instancias del servicio de backend.
  • FRONTEND_5XX: Se produjo un error interno antes de que el proxy pudiera seleccionar un backend. El proxy mostró 5XX al cliente.
  • INVALID_BACKEND: El proxy no pudo encontrar un backend en buen estado para asignar la solicitud, por lo que mostró una respuesta 5XX al solicitante.
  • NO_BACKEND_SELECTED: Se produjo otra interrupción o un error antes de que se pudiera seleccionar un backend.
  • INVALID_BACKEND: El proxy no pudo encontrar un backend en buen estado válido, por lo que mostró 5xx al solicitante.
  • SERVED_FROM_BACKEND_BUCKET: Un depósito de backend manejó la solicitud, no un grupo de instancias del servicio de backend.
  • SERVED_FROM_CACHE: Una caché de proxy manejó la solicitud, por lo que no se asignó ningún backend.
  • MULTIPLE_BACKENDS: Varios backends entregaron la solicitud.

Cuando se elige este desglose, los gráficos muestran las métricas de backend (balanceador de cargas a backends) y no las métricas de frontend (cliente a balanceador de cargas).
ZONA DEL BACKEND Si el grupo de instancias era un grupo de instancias zonales, la zona de GCP del grupo de instancias que entregó la solicitud del usuario. (Ejemplos: us-central1-a, europe-west1-b, asia-east1-c)

Cuando se elige este desglose, los gráficos muestran las métricas de backend (balanceador de cargas a backends) y no las métricas de frontend (cliente a balanceador de cargas).
REGIÓN DEL BACKEND Si el grupo de instancias era un grupo de instancias regional, la región de GCP del grupo de instancias que entregó la solicitud del usuario. (Ejemplos: us-central1, europe-west1, asia-east1)

Cuando se elige este desglose, los gráficos muestran las métricas de backend (balanceador de cargas a backends) y no las métricas de frontend (cliente a balanceador de cargas).
CONTINENTE DEL PROXY El continente del proxy HTTP(S) que finalizó la conexión HTTP(S) del usuario. (Ejemplos: America, Europe, Asia).
GRUPO DE INSTANCIAS El nombre del grupo de instancias que entregó la solicitud del usuario.

Si no había ningún grupo de instancias disponible o si otra entidad entregó la solicitud, verás uno de los siguientes valores en lugar de un grupo de instancias.
  • FRONTEND_5XX: Se produjo un error interno antes de que el proxy pudiera seleccionar un backend. El proxy mostró 5XX al cliente.
  • INVALID_BACKEND: El proxy no pudo encontrar un backend en buen estado para asignar la solicitud, por lo que mostró una respuesta 5XX al solicitante.
  • NO_BACKEND_SELECTED: Se produjo otra interrupción o un error antes de que se pudiera seleccionar un backend.
  • INVALID_BACKEND: El proxy no pudo encontrar un backend en buen estado válido, por lo que mostró 5xx al solicitante.
  • SERVED_FROM_BACKEND_BUCKET: Un depósito de backend manejó la solicitud, no un grupo de instancias del servicio de backend.
  • SERVED_FROM_CACHE: Una caché de proxy manejó la solicitud, por lo que no se asignó ningún backend.
  • MULTIPLE_BACKENDS: Varios backends entregaron la solicitud.

Cuando se elige este desglose, los gráficos muestran las métricas de backend (balanceador de cargas a backends) y no las métricas de frontend (cliente a balanceador de cargas).
SERVICIO DE BACKEND El nombre del servicio de backend que entregó la solicitud del usuario.
REGLA DE URL COINCIDENTE La regla de ruta del mapa de URL que coincide con el prefijo de la solicitud HTTP(S) del usuario (hasta 50 caracteres).
REGLA DE REENVÍO El nombre de la regla de reenvío que utiliza el cliente para enviar la solicitud.

(*) Actualmente, la métrica "Fracción de clase de código de respuesta" está disponible solo para todo el balanceador de cargas, sin desgloses adicionales disponibles.

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...