Muestreo de seguimientos

En este documento, se presenta el concepto de muestreo, que hace referencia a si los datos de un intervalo se envían a Cloud Trace. Cuando los datos de un intervalo se envían a Cloud Trace, ese intervalo se muestrea. Cuando se registran los datos de cada intervalo de un seguimiento, este se completa. Sin embargo, a menudo, los seguimientos tienen intervalos faltantes porque cada componente instrumentado en un sistema de seguimiento distribuido decide por separado si registra o no el intervalo que procesa.

Aunque cada componente toma su propia decisión sobre si el intervalo que procesa se muestrea, esa decisión puede verse influenciada por la decisión de muestreo del elemento superior. Por ejemplo, supongamos que cada componente tiene una regla que dice "si se muestrea el intervalo superior, entonces muestrear el intervalo actual; de lo contrario, muestre el 50% de los intervalos". En este caso, se cumple lo siguiente:

  • El intervalo raíz determina si se muestrearon todos los intervalos del seguimiento.
  • Cuando se realiza un muestreo del intervalo raíz, se toman muestras de todos los intervalos del seguimiento. Por lo tanto, el registro está completo.

Los componentes pueden pasar su decisión de muestreo al elemento secundario a través del contexto. Por ejemplo, en el encabezado traceparent del World Wide Web Consortium (W3C), la marca sampled almacena la decisión de muestreo del elemento superior.

No confundas el muestreo con la propagación de contexto. El muestreo se refiere a si un componente registra datos sobre un intervalo. La propagación del contexto se refiere a si la información sobre el intervalo, como el ID de intervalo, se pasa a los componentes secundarios.

Estrategias de muestreo

Las decisiones de muestreo pueden basarse en la cabeza o en la cola. En el muestreo basado en la cabeza, la decisión de muestreo se toma cuando el componente que procesa el intervalo recibe la solicitud. En el muestreo basado en la cola, la decisión de muestreo se retrasa hasta que todo el seguimiento está disponible.

Es posible que encuentres la frase "muestreo del 100%" en la documentación de los sistemas de seguimiento distribuido. Esta frase puede aplicarse a un seguimiento o a un componente. Cuando se aplica a un seguimiento, significa que se muestrearon todos los intervalos, o lo equivalente, que el seguimiento está completo. Cuando se aplica a un componente, significa que el componente toma muestras de cada intervalo que procesa.

Muestreo basado en la cabeza

Las muestras basadas en la cabeza normalmente se configuran para muestrear intervalos o usar una estrategia de muestreo probabilística:

  • Con las configuraciones siempre de muestra, todos los componentes que abarcan el servicio y que pueden escribir datos de seguimiento, toman muestras de los intervalos que procesan. Lo ideal sería que todos los seguimientos estén completos y, por lo tanto, tengas la información necesaria para solucionar fallas. Este tipo de configuración puede hacer que excedas las quotas o los límites de tus costos de almacenamiento.

  • Con el muestreo probabilístico, no se muestrean todos los intervalos. El comportamiento real de este enfoque depende de la implementación del componente. En algunas implementaciones, todos los intervalos tienen la misma probabilidad de ser muestreados. En otros, la decisión de muestreo del elemento superior influye en si se muestreará un intervalo.

Es posible que los seguimientos no contengan todos los intervalos. Esto podría ser esperable debido al uso del muestreo probabilístico, a la cuota o a componentes que procesan una solicitud, pero no muestran el intervalo.

Muestreo basado en colas

Cloud Trace no es compatible con el muestreo basado en colas. Las decisiones de muestreo se deben tomar en los componentes que envían datos a Cloud Trace.

Si deseas usar un muestreo basado en la cola, puedes usar un servidor intermediario que reciba información de seguimiento que retransmita datos a Cloud Trace después de tomar una decisión de muestreo. Por ejemplo, puedes usar el colector de OpenTelemetry con el procesador de muestreo final para tomar una decisión de muestreo retrasada.

Si planeas usar el muestreo final, ten en cuenta lo siguiente:

  • Debes almacenar todos los intervalos en un seguimiento antes de tomar una decisión de muestreo. Por lo tanto, es posible que necesites una gran cantidad de almacenamiento temporal o que incurras en otras sobrecargas.
  • En general, todos los componentes que pueden generar intervalos para el seguimiento deben coordinarse. Por lo general, los desarrolladores que usan OpenTelemetry enrutan todos los intervalos para el mismo ID de seguimiento al mismo colector.

Servicios de muestreo y de Google Cloud

Cada servicio de Google Cloud toma sus propias decisiones de muestreo, y no todos los servicios de Google Cloud son de muestra. Es decir, puede que un servicio nunca envíe datos a Cloud Trace.

Cuando el muestreo es compatible con un servicio de Google Cloud, ese servicio suele implementar lo siguiente:

  • Una tasa de muestreo predeterminada.
  • Un mecanismo para usar la decisión de muestreo del elemento superior como una sugerencia de si se debe muestrear el intervalo
  • Tasa de muestreo máxima

Si deseas solicitar que un servicio de Google Cloud agregue compatibilidad con el muestreo, usa la Herramienta de seguimiento de errores de Google.

¿Qué sigue?