En este documento, se presenta el concepto de muestreo, que se refiere a si los datos de un intervalo se envían a Cloud Trace. Cuando se envían datos de un intervalo a Cloud Trace, se toman muestras de ese intervalo. Cuando se registran los datos de cada período de un seguimiento, este se completa. Sin embargo, a menudo, los registros tienen intervalos faltantes porque cada componente instrumentado en un sistema de seguimiento distribuido decide de forma independiente si registrar o no el intervalo que está procesando.
Aunque cada componente toma su propia decisión sobre si se muestrea el intervalo que está procesando, esa decisión puede estar 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, muestrea el intervalo actual; de lo contrario, muestrea el 50% de los intervalos". En esta situación, se cumple lo siguiente:
- El intervalo raíz determina si se toman muestras de todos los intervalos del seguimiento.
- Cuando se toma una muestra del intervalo raíz, se toman muestras de todos los intervalos del seguimiento. Por lo tanto, el seguimiento está completo.
Los componentes pueden pasar su decisión de muestreo al elemento secundario mediante el 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 del contexto. El muestreo hace referencia a si un componente registra datos sobre un intervalo. La propagación de contexto hace referencia 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 parte superior o en la parte inferior. En el muestreo basado en encabezados, 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 distribuidos. Esta frase puede aplicarse a un registro o a un componente. Cuando se aplica a un seguimiento, significa que se tomaron muestras de todos los intervalos o, de manera 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
Por lo general, los generadores de muestras basados en encabezados se configuran para muestrear siempre intervalos o usar una estrategia de muestreo probabilístico:
Con las configuraciones de siempre tomar muestras, todos los componentes que atienden intervalos y que pueden escribir datos de seguimiento toman muestras de los intervalos que procesan. Lo ideal es que todos los registros estén completos y, por lo tanto, tengas la información necesaria para solucionar los problemas. Este tipo de configuración podría hacer que superes las cuotas o los límites de 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 muestreo. En otros casos, la decisión de muestreo del elemento superior influye en si se muestrea un intervalo.
Es posible que los registros no contengan todos los tramos. Esto puede deberse al uso del muestreo probabilístico, a la cuota o a los componentes que procesan una solicitud, pero no toman muestras del intervalo.
Muestreo basado en la cola
Cloud Trace no admite el muestreo basado en la cola. Las decisiones de muestreo deben tomarse en los componentes que envían datos a Cloud Trace.
Si deseas usar el muestreo basado en el extremo, puedes usar un servidor intermediario que reciba información de seguimiento que reenvíe 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 de cola para tomar una decisión de muestreo diferido.
Si planeas usar el muestreo de cola, ten en cuenta lo siguiente:
- Debes almacenar todos los intervalos en un registro antes de tomar una decisión de muestreo. Por lo tanto, es posible que necesites una gran cantidad de almacenamiento temporal o 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 del mismo ID de seguimiento al mismo recopilador.
Muestreo y servicios de Google Cloud
Cada servicio de Google Cloud toma sus propias decisiones de muestreo y no todos los servicios de Google Cloud toman muestras. Es decir, es posible que un servicio nunca envíe datos a Cloud Trace.
Cuando un servicio de Google Cloud admite el muestreo, por lo general, implementa lo siguiente:
- Una tasa de muestreo predeterminada.
- Un mecanismo para usar la decisión de muestreo del elemento superior como una sugerencia sobre si se debe muestrear el intervalo.
- Tasa de muestreo máxima.
Para solicitar que un servicio de Google Cloud agregue compatibilidad con el muestreo, usa el Sistema de seguimiento de errores de Google.
¿Qué sigue?
Para obtener información sobre cómo elegir una estrategia de muestreo por nombre de intervalo, consulta Muestreo remoto de Jaeger.
Te recomendamos que revises la siguiente documentación de código abierto para ayudarte a determinar qué enfoque de muestreo es mejor para tus aplicaciones en desarrollo y, luego, implementadas:
Documentación de los servicios de Google Cloud: