El muestreo de seguimiento determina qué solicitudes y segmentos ingiere Cloud Trace, lo que te ayuda a controlar los costos de almacenamiento y a mantenerte dentro de las cuotas mientras capturas datos suficientes para solucionar problemas de rendimiento de la aplicación. Cuando se registra cada intervalo en una solicitud de extremo a extremo, el seguimiento se completa. Sin embargo, para administrar grandes volúmenes de solicitudes, los componentes de un sistema de seguimiento distribuido suelen muestrear solo un subconjunto de seguimientos o seguir las decisiones de muestreo de los segmentos superiores.
El muestreo es distinto de la propagación del contexto. El muestreo controla si un componente registra datos de segmentos. Por el contrario, la propagación del contexto pasa identificadores de seguimiento entre los componentes para que los segmentos muestreados se puedan vincular.
Estrategias de muestreo
Las decisiones de muestreo pueden basarse en el encabezado o en la cola. En el muestreo basado en el encabezado, la decisión de muestreo se toma cuando el componente que procesa el segmento recibe la solicitud. En el muestreo basado en la cola, la decisión de muestreo se retrasa hasta que esté disponible el seguimiento completo.
Es posible que encuentres la frase "muestreo del 100%" en la documentación de los sistemas de seguimiento distribuido. Esta frase se puede aplicar a un seguimiento o a un componente. Cuando se aplica a un seguimiento, significa que se muestrearon todos los segmentos o, de manera equivalente, que el seguimiento está completo. Cuando se aplica a un componente, significa que el componente muestrea cada segmento que procesa.
Muestreo basado en el encabezado
Los muestreadores basados en el encabezado suelen configurarse para muestrear siempre los segmentos o para usar una estrategia de muestreo probabilístico:
Con las configuraciones de muestreo siempre, los componentes que procesan y escriben datos de seguimiento muestrean cada segmento. Lo ideal es que todos los seguimientos estén completos y, por lo tanto, tengas la información necesaria para solucionar problemas de fallas. Sin embargo, una configuración de muestreo siempre puede hacer que superes las cuotas o los límites de costos de almacenamiento.
Con el muestreo probabilístico, no se muestrean todos los segmentos. El comportamiento real de este enfoque depende de la implementación del componente. En algunas implementaciones, todos los segmentos tienen la misma probabilidad de muestreo. En otras, la decisión de muestreo del elemento superior influye en si se muestrea un segmento.
Es posible que un seguimiento no contenga todos los intervalos. Si usas el muestreo probabilístico , superas la cuota o usas componentes que procesan, pero no muestrean segmentos, se esperan seguimientos incompletos.
Muestreo basado en la cola
Cloud Trace no admite el muestreo basado en la cola; las decisiones de muestreo se deben tomar en los componentes que envían datos a Cloud Trace.
Si usas el muestreo basado en la cola, también puedes usar un servidor intermediario para recibir datos de seguimiento, evaluar las decisiones de muestreo y retransmitir los segmentos muestreados a Trace. Por ejemplo, puedes usar un recopilador de OpenTelemetry con el procesador de muestreo de cola para tomar una decisión de muestreo retrasada.
Si planeas usar el muestreo de cola, ten en cuenta lo siguiente:
- Debes almacenar todos los segmentos 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 otra sobrecarga.
- En general, todos los componentes que pueden generar segmentos para un seguimiento deben coordinarse. Por lo general, los desarrolladores que usan OpenTelemetry enrutan todos los segmentos para el mismo ID de seguimiento al mismo recopilador.
Los componentes toman decisiones de muestreo
Cada componente toma su propia decisión sobre si muestrear el segmento que está procesando. Sin embargo, la decisión de muestreo del elemento superior, que puede estar disponible para el componente a través del contexto de seguimiento, puede influir en la decisión del componente. Las aplicaciones que usan el
traceparent encabezado pueden pasar la decisión de muestreo del elemento superior
con la sampled marca.
Por ejemplo, supongamos que cada componente tiene una regla que dice "si se muestrea el segmento superior, muestrea el segmento actual; de lo contrario, muestrea el 50% de los segmentos". En esta situación, se cumple lo siguiente:
- El segmento raíz determina si se muestrean todos los segmentos del seguimiento.
- Cuando se muestrea el segmento raíz, se muestrean todos los segmentos del seguimiento. Por lo tanto, el seguimiento está completo.
Muestreo y Google Cloud servicios
Cada Google Cloud servicio toma sus propias decisiones de muestreo, y no todos los Google Cloud servicios muestran. Es decir, es posible que un servicio nunca envíe datos a Cloud Trace.
Cuando un Google Cloud servicioadmite el muestreo, 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 sobre si se debe muestrear el segmento
- Tasa de muestreo máxima
Para solicitar que un Google Cloud servicioagregue compatibilidad con el muestreo, usa el Issue Tracker de Google.
¿Qué sigue?
Para obtener información sobre cómo elegir una estrategia de muestreo por nombre de segmento, 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 el mejor para tus aplicaciones implementadas y en desarrollo:
Google Cloud Documentación del servicio: