En este documento se presenta el concepto de muestreo, que hace referencia a si se envían datos de un intervalo a Cloud Trace. Cuando se envían datos de un intervalo a Cloud Trace, ese intervalo se muestrea. Cuando se registran los datos de cada intervalo de una traza, la traza se completa. Sin embargo, las trazas suelen tener tramos que faltan porque cada componente instrumentado de un sistema de trazado distribuido decide de forma independiente si registra o no el tramo que está procesando.
Aunque cada componente toma su propia decisión sobre si se muestrea el intervalo que está procesando, esa decisión puede verse influida por la decisión de muestreo del elemento superior. Por ejemplo, supongamos que cada componente tiene una regla que dice: "si el intervalo superior se muestrea, muestrea el intervalo actual; de lo contrario, muestrea el 50% de los intervalos". En este caso, se cumple lo siguiente:
- El intervalo raíz determina si se muestrean todos los intervalos del rastreo.
- Cuando se muestrea el intervalo raíz, se muestrean todos los intervalos del rastreo. Por lo tanto, el rastreo se ha completado.
Los componentes pueden transmitir su decisión de muestreo al elemento secundario mediante el contexto.
Por ejemplo, en el encabezado traceparent
del Consorcio World Wide Web (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 hace referencia a si un componente registra datos sobre un intervalo. La propagación del contexto hace referencia a si la información sobre el intervalo, como el ID del intervalo, se transfiere a los componentes secundarios.
Estrategias de muestreo
Las decisiones de muestreo pueden basarse en el encabezado o en la cola. 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 está disponible toda la traza.
Es posible que veas la frase "muestreo del 100 %" en la documentación de los sistemas de seguimiento distribuido. Esta frase puede aplicarse a un rastreo o a un componente. Cuando se aplica a un rastreo, significa que se han tomado muestras de todos los intervalos o, lo que es lo mismo, que el rastreo está completo. Cuando se aplica a un componente, significa que el componente muestrea cada intervalo que procesa.
Muestreo basado en el encabezado
Los muestreadores basados en encabezados suelen configurarse para muestrear siempre los intervalos o para usar una estrategia de muestreo probabilístico:
Con las configuraciones de muestreo constante, todos los componentes que abarca el servicio y que pueden escribir datos de traza muestrean los intervalos que procesan. Lo ideal es que todas las trazas estén completas y, por lo tanto, tengas la información necesaria para solucionar los fallos. Este tipo de configuración puede provocar que superes las cuotas o los límites de coste 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, la decisión de muestreo del elemento superior influye en si se muestrea un intervalo.
Es posible que los rastreos no contengan todos los intervalos. Esto puede deberse al uso de un muestreo probabilístico o a que se haya alcanzado la cuota o a que haya componentes que procesen una solicitud, pero no muestreen el 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 quieres usar el muestreo basado en la cola, puedes usar un servidor intermediario que reciba información de la traza y reenvíe los datos a Cloud Trace después de tomar una decisión de muestreo. Por ejemplo, puedes usar OpenTelemetry Collector con Tail Sampling Processor para tomar una decisión de muestreo retrasada.
Si tiene previsto usar el muestreo de cola, tenga en cuenta lo siguiente:
- Debes almacenar todos los intervalos en un rastreo 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 otros gastos generales.
- Por lo general, todos los componentes que pueden generar intervalos de seguimiento deben coordinarse. Normalmente, los desarrolladores que usan OpenTelemetry dirigen todos los spans del mismo ID de rastreo al mismo recolector.
Muestreo y servicios de Google Cloud
Cada servicio toma sus propias decisiones de muestreo y no todos los servicios muestrean. Google Cloud Google Cloud Es decir, es posible que un servicio nunca envíe datos a Cloud Trace.
Cuando un servicio admite el muestreo, normalmente implementa lo siguiente: Google Cloud
- Una frecuencia de muestreo predeterminada.
- Mecanismo para usar la decisión de muestreo del elemento superior como pista para determinar si se debe muestrear el intervalo.
- Frecuencia de muestreo máxima.
Para solicitar que un servicio añada compatibilidad con el muestreo, usa Google Issue Tracker. Google Cloud
Siguientes pasos
Para saber cómo elegir una estrategia de muestreo por nombre de intervalo, consulta Muestreo remoto de Jaeger.
Te recomendamos que consultes la siguiente documentación de código abierto para determinar qué enfoque de muestreo es el más adecuado para tus aplicaciones en desarrollo y desplegadas:
Google Cloud Documentación del servicio: