Realiza un seguimiento del tráfico entrante con Cloud Trace

En este documento, se explica cómo configurar el seguimiento distribuido para los balanceadores de cargas de aplicaciones con Cloud Trace. Creas una política de telemetría que se orienta a la regla de reenvío de tu balanceador de cargas y, luego, ves los seguimientos resultantes en Cloud Trace.

En los ejemplos de este documento, se usa una aplicación de comercio electrónico que tiene la siguiente arquitectura:

  • Un balanceador de cargas de aplicaciones externo global que recibe el tráfico de los clientes para una tienda web.
  • Un balanceador de cargas de aplicaciones interno regional que enruta las solicitudes de confirmación de la compra desde la tienda hasta los servicios internos de carrito, inventario y pago.

Para obtener información sobre cómo funciona el seguimiento distribuido, incluidos los modos de muestreo y el manejo de encabezados de contexto de seguimiento, consulta Descripción general del seguimiento distribuido.

Antes de comenzar

  1. Habilita la API de Cloud Trace y la API de Network Services en tu proyecto:

    gcloud services enable \
        cloudtrace.googleapis.com \
        networkservices.googleapis.com
    
  2. Asegúrate de tener implementado un balanceador de cargas compatible. Para obtener más información, consulta lo siguiente:

  3. Toma nota del nombre y el alcance de la regla de reenvío de tu balanceador de cargas. El permiso de la regla de reenvío depende del tipo de balanceador de cargas:

    • Regla de reenvío global: Se usa en los balanceadores de cargas de aplicaciones externos globales y en los balanceadores de cargas de aplicaciones internos entre regiones.
    • Regla de reenvío regional: la usan los balanceadores de cargas de aplicaciones externos regionales y los balanceadores de cargas de aplicaciones internos regionales.

    Para enumerar las reglas de reenvío en tu proyecto, usa el comando gcloud compute forwarding-rules list:

    gcloud compute forwarding-rules list
    

Roles obligatorios

Para obtener los permisos que necesitas para configurar las políticas de telemetría y ver los seguimientos, pídele a tu administrador que te otorgue los siguientes roles de Identity and Access Management (IAM) en tu proyecto:

Para permitir que el balanceador de cargas escriba intervalos de seguimiento en Cloud Trace, otorga el rol de agente de Cloud Trace (roles/cloudtrace.agent) en tu proyecto a las siguientes cuentas de servicio:

  • Agente de servicio de Compute Engine: service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
  • Agente de servicio de seguridad de redes: service-PROJECT_NUMBER@gcp-sa-networksecurity.iam.gserviceaccount.com
  • Las cuentas de servicio de tus cargas de trabajo de backend, si tus backends exportan sus propios intervalos a Cloud Trace. Sin este rol, Cloud Trace solo muestra el intervalo del balanceador de cargas, y el seguimiento no contiene intervalos de backend.

Reemplaza PROJECT_NUMBER por el número del proyecto deGoogle Cloud .

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Configuración de la política de telemetría

Define una política de telemetría en un archivo YAML que use el siguiente formato:

name: "projects/PROJECT_ID/locations/LOCATION/telemetryPolicies/POLICY_NAME"
displayName: "DISPLAY_NAME"
telemetryTarget:
  resources:
  - "FORWARDING_RULE_URI"
tracingConfiguration:
  samplingRate: SAMPLING_RATE
  parentBasedSampling:
    enabled: ENABLE_PARENT_BASED_SAMPLING
    samplingRate: PARENT_BASED_SAMPLING_RATE

En la siguiente tabla, se describen los campos de una política de telemetría:

Campo Descripción
name

Es el nombre del recurso de la política de telemetría. Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
  • LOCATION: Es la ubicación de la política de telemetría, que debe coincidir con el alcance de las reglas de reenvío a las que se orienta la política. Para las reglas de reenvío globales, usa global. Para las reglas de reenvío regionales, usa la región de la regla de reenvío, como us-central1.
  • POLICY_NAME: Es el nombre de la política de telemetría. El nombre debe tener entre 4 y 63 caracteres, comenzar con una letra minúscula, contener solo letras minúsculas, números y guiones, y terminar con una letra minúscula o un número.
displayName Es opcional. Un nombre legible por humanos (DISPLAY_NAME) para la política de telemetría.
telemetryTarget.resources

Es una lista de los nombres de recursos completos (FORWARDING_RULE_URI) de las reglas de reenvío a las que se aplica la política. Puedes especificar hasta 50 recursos. Usa uno de los siguientes formatos:

  • Regla de reenvío global: //compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/FORWARDING_RULE_NAME
  • Regla de reenvío regional: //compute.googleapis.com/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME
Reemplaza lo siguiente:
  • FORWARDING_RULE_NAME: el nombre de la regla de reenvío
  • REGION: Es la región de la regla de reenvío, como us-central1.
tracingConfiguration.samplingRate Es la proporción de solicitudes que se deben rastrear (SAMPLING_RATE), especificada como un valor de 0.0 (0%) a 1.0 (100%). Por ejemplo, 0.01 toma muestras del 1% de las solicitudes. El valor predeterminado es 0.0.
tracingConfiguration.parentBasedSampling.enabled Es opcional. Si el balanceador de cargas respeta la marca de muestreo en el encabezado traceparent de W3C entrante (ENABLE_PARENT_BASED_SAMPLING) es true o false. El valor predeterminado es false. Solo se admite en balanceadores de cargas de aplicaciones internos.
tracingConfiguration.parentBasedSampling.samplingRate Es opcional. Es la proporción de solicitudes de muestreo ascendente para realizar un seguimiento (PARENT_BASED_SAMPLING_RATE), especificada como un valor de 0.0 a 1.0. Por ejemplo, 1.0 realiza un seguimiento de todas las solicitudes que un cliente o servicio upstream ya muestreó.

Configura el seguimiento para un balanceador de cargas externo

En este ejemplo, se configura el muestreo probabilístico en la regla de reenvío de un balanceador de cargas de aplicaciones externo global para una tienda de comercio electrónico. Una tasa de muestreo de 0.01 realiza un seguimiento del 1% de las solicitudes, lo que captura la latencia y los errores perimetrales, a la vez que mantiene predecibles los costos de transferencia de Cloud Trace durante el tráfico alto.

  1. Crea un archivo YAML llamado storefront-tracing-policy.yaml:

    cat <<EOF > storefront-tracing-policy.yaml
    name: "projects/PROJECT_ID/locations/global/telemetryPolicies/storefront-tracing-policy"
    displayName: "Tracing policy for the storefront load balancer"
    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/FORWARDING_RULE_NAME"
    tracingConfiguration:
      samplingRate: 0.01
    EOF
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto deGoogle Cloud .
    • FORWARDING_RULE_NAME: el nombre de la regla de reenvío global de tu balanceador de cargas

    Para un balanceador de cargas de aplicaciones externo regional, reemplaza global en el nombre de la política por la región de la regla de reenvío y usa el formato de regla de reenvío regional.

  2. Importa la política de telemetría con el comando gcloud beta network-services telemetry-policies import:

    gcloud beta network-services telemetry-policies import storefront-tracing-policy \
        --source=storefront-tracing-policy.yaml \
        --location=global
    

Configura el seguimiento para un balanceador de cargas interno

En este ejemplo, se configura un balanceador de cargas de aplicaciones interno regional para los servicios de pago y confirmación de la compra internos. La política usa la siguiente configuración de muestreo:

  • Una samplingRate de referencia del 0.01 (1%) para las solicitudes que no tienen una decisión de muestreo ascendente.
  • Muestreo basado en el elemento superior con un samplingRate de 1.0 (100%), de modo que cada solicitud de confirmación de la compra que ya se muestreó en la tienda o por cualquier servicio ascendente se rastree en el balanceador de cargas interno.

Para configurar la política, haz lo siguiente:

  1. Crea un archivo YAML llamado checkout-tracing-policy.yaml:

    cat <<EOF > checkout-tracing-policy.yaml
    name: "projects/PROJECT_ID/locations/REGION/telemetryPolicies/checkout-tracing-policy"
    displayName: "Tracing policy for the internal checkout load balancer"
    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME"
    tracingConfiguration:
      samplingRate: 0.01
      parentBasedSampling:
        enabled: true
        samplingRate: 1.0
    EOF
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto deGoogle Cloud .
    • REGION: Es la región de la regla de reenvío, como us-central1.
    • FORWARDING_RULE_NAME: el nombre de la regla de reenvío regional de tu balanceador de cargas

    Para un balanceador de cargas de aplicaciones interno entre regiones, usa global como la ubicación en el nombre de la política y el formato de regla de reenvío global.

  2. Importa la política de telemetría:

    gcloud beta network-services telemetry-policies import checkout-tracing-policy \
        --source=checkout-tracing-policy.yaml \
        --location=REGION
    

Verifica la política de telemetría

Para verificar que la política de telemetría exista y se oriente a las reglas de reenvío correctas, usa el comando gcloud beta network-services telemetry-policies describe:

gcloud beta network-services telemetry-policies describe POLICY_NAME \
    --location=LOCATION

Reemplaza lo siguiente:

  • POLICY_NAME: Es el nombre de la política de telemetría.
  • LOCATION: global o la región de la política de telemetría

Para enumerar todas las políticas de telemetría en una ubicación, usa el comando gcloud beta network-services telemetry-policies list:

gcloud beta network-services telemetry-policies list \
    --location=LOCATION

Actualiza una política de telemetría

Para cambiar la configuración de muestreo o aplicar la misma política a reglas de reenvío adicionales, haz lo siguiente:

  1. Edita el archivo YAML de la política. Por ejemplo, para aplicar la política de Storefront a varias reglas de reenvío globales, agrega cada regla de reenvío a la lista telemetryTarget.resources:

    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/storefront-https-fr"
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/cart-https-fr"
    
  2. Importa la política actualizada:

    gcloud beta network-services telemetry-policies import POLICY_NAME \
        --source=POLICY_FILE \
        --location=LOCATION
    

    Reemplaza POLICY_FILE por la ruta de acceso al archivo YAML de la política.

Ver seguimientos

Después de configurar el seguimiento y enviar tráfico a través del balanceador de cargas, consulta los seguimientos en la consola de Google Cloud :

  1. En la consola de Google Cloud , ve a la página Explorador de seguimiento.

    Ir al Explorador de seguimiento

  2. Seleccionar tu Google Cloud proyecto.

  3. En el campo Filtro, ingresa un filtro para encontrar los seguimientos que deseas inspeccionar. Por ejemplo, el ID del atributo o el umbral de latencia.

  4. De manera opcional, para explorar un seguimiento específico, ve a la barra de herramientas, haz clic en ID de seguimiento y, luego, ingresa el ID de seguimiento.

  5. Haz clic en un seguimiento para ver sus intervalos en las vistas de cronograma y gráfico.

  6. Inspecciona el intervalo del balanceador de cargas para ver detalles, como la duración total y el backend que entregó la solicitud.

Para obtener más información sobre el uso del Explorador de seguimiento, consulta Busca y explora seguimientos.

Correlaciona los seguimientos con los registros y las métricas

Puedes correlacionar los intervalos de seguimiento del balanceador de cargas con los registros y las métricas de solicitudes para aislar el origen de la latencia o los errores.

Correlaciona seguimientos con registros

Si habilitas el registro en tu servicio de backend, el balanceador de cargas agrega un campo trace a cada entrada de registro de solicitud para una solicitud de muestra. El campo usa el siguiente formato:

projects/PROJECT_ID/traces/TRACE_ID

Visualiza un seguimiento desde una entrada de registro del balanceador de cargas

  1. En la consola de Google Cloud , accede a la página Explorador de registros.

    Ve al Explorador de registros

  2. Expande una entrada de registro del balanceador de cargas.

  3. En el resumen de la entrada de registro, haz clic en el ícono de seguimiento.

    El ícono de seguimiento junto a un resumen de entrada de registro en el Explorador de registros.

  4. Selecciona Ver detalles de seguimiento.

El seguimiento se abre en la página Explorador de seguimiento.

Visualiza los registros del balanceador de cargas desde un seguimiento

  1. En la consola de Google Cloud , ve a la página Explorador de seguimiento.

    Ir al Explorador de seguimiento

  2. Haz clic en un seguimiento para abrir el panel Detalles.

  3. Haz clic en View Logs (Ver registros).

Aparecerán las entradas de registro del balanceador de cargas para la solicitud.

Correlaciona los seguimientos con las métricas

Compara los picos de latencia en las métricas del balanceador de cargas con los desgloses de intervalos de seguimiento para determinar si la latencia se origina en el balanceador de cargas o en el backend. Puedes ver y consultar estas métricas en el Explorador de métricas en Cloud Monitoring. Usa las siguientes métricas:

  • Balanceador de cargas de aplicaciones externo global: loadbalancing.googleapis.com/https/total_latencies y loadbalancing.googleapis.com/https/backend_latencies
  • Balanceador de cargas de aplicaciones externo regional: loadbalancing.googleapis.com/https/external/regional/total_latencies
  • Balanceador de cargas de aplicaciones interno: loadbalancing.googleapis.com/https/internal/total_latencies

Inhabilita el seguimiento

Para dejar de realizar un seguimiento de las solicitudes de un balanceador de cargas, haz lo siguiente:

  • Quita la regla de reenvío de la lista telemetryTarget.resources de la política y, luego, importa la política actualizada.
  • Borra la política de telemetría con el comando gcloud beta network-services telemetry-policies delete:

    gcloud beta network-services telemetry-policies delete POLICY_NAME \
        --location=LOCATION
    

Prácticas recomendadas

Ten en cuenta las siguientes prácticas recomendadas cuando configures el seguimiento distribuido:

  • Ajusta las tasas de muestreo para tu volumen de tráfico: En el caso de las cargas de trabajo de producción con mucho tráfico, usa un samplingRate de 0.01 (1%) o 0.001 (0.1%) para equilibrar la observabilidad con los costos de transferencia de Cloud Trace.
  • Usa el muestreo basado en el elemento superior para arquitecturas de varios niveles: En los balanceadores de cargas de aplicaciones internos, habilita el muestreo basado en el elemento superior para que las solicitudes muestreadas upstream se rastreen en cada salto interno.
  • Instrumenta tus backends: Usa un SDK de OpenTelemetry con el propagador de contexto de seguimiento de W3C en tus servicios de backend para que los intervalos de backend se unan al seguimiento que inicia el balanceador de cargas.

Solucionar problemas

En esta sección, se describen los problemas comunes y sus soluciones.

Los seguimientos no aparecen en Cloud Trace

Si los seguimientos no aparecen en Cloud Trace, haz lo siguiente:

  1. Asegúrate de que la API de Cloud Trace esté habilitada en tu proyecto:

    gcloud services enable cloudtrace.googleapis.com \
        --project=PROJECT_ID
    
  2. Verifica que el rol de agente de Cloud Trace (roles/cloudtrace.agent) se otorgue a las cuentas de servicio que se indican en Roles obligatorios.

  3. Verifica que la política de telemetría exista en la ubicación correcta y que esté orientada a la regla de reenvío correcta. Para obtener más información, consulta Verifica la política de telemetría.

  4. Verifica el samplingRate configurado. Si el volumen de tráfico o la tasa de muestreo son bajos, es posible que el balanceador de cargas no capture los seguimientos de inmediato. Para confirmar que el seguimiento funciona, configura temporalmente samplingRate como 1.0 y, luego, restablece tu tasa de producción cuando termines de realizar las pruebas.

Los intervalos de seguimiento están desconectados o incompletos

Si los intervalos del balanceador de cargas aparecen como seguimientos raíz independientes en lugar de como parte de los seguimientos de tu aplicación, haz lo siguiente:

  1. En el caso de los balanceadores de cargas de aplicaciones internos, verifica que el muestreo basado en el elemento superior esté habilitado (parentBasedSampling.enabled: true) en la política de telemetría.

  2. Verifica que las cuentas de servicio de tus cargas de trabajo de cliente y de backend tengan el rol de agente de Cloud Trace (roles/cloudtrace.agent) para que sus intervalos se puedan exportar a Cloud Trace.

  3. Verifica que tus aplicaciones usen un SDK de OpenTelemetry con la propagación del contexto de seguimiento de W3C habilitada, de modo que el encabezado traceparent se propague entre los límites del servicio. Para obtener más información, consulta la documentación de propagación de contexto de OpenTelemetry.

¿Qué sigue?