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, ese intervalo se muestra. Cuando se registran los datos de cada intervalo de un registro, el registro se completa. Sin embargo, las marcas suelen tener tramos faltantes porque cada componente instrumentado en un sistema de seguimiento distribuido decide de forma independiente si registrar o no el tramo que está procesando.
Si bien cada componente toma su propia decisión sobre si se muestrea el intervalo que está procesando, esa decisión puede verse influenciada por la decisión de muestreo del intervalo principal. Por ejemplo, supongamos que cada componente tiene una regla que dice "si se muestrea el intervalo principal, se debe muestrear el intervalo actual; de lo contrario, se debe muestrear el 50% de los intervalos". En este caso, se cumple lo siguiente:
- El intervalo raíz determina si se muestrean todos los intervalos del registro.
- Cuando se muestrea el intervalo raíz, se muestrean todos los intervalos del registro. Por lo tanto, el registro está completo.
Los componentes pueden pasar su decisión de muestreo al elemento secundario usando 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 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 del intervalo, se pasa 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 el encabezado, 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 el registro completo.
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 registro o a un componente. Cuando se aplica a un registro de seguimiento, significa que se tomaron muestras de todos los intervalos o, de manera equivalente, que el registro de seguimiento está completo. Cuando se aplica a un componente, significa que el componente muestrea cada intervalo que procesa.
Muestreo basado en la cabeza
Por lo general, los muestreadores basados en el encabezado se configuran para muestrear siempre los tramos o para usar una estrategia de muestreo probabilístico:
Con las configuraciones de muestreo constante, todos los componentes que abarcan los tramos de servicio y que pueden escribir datos de seguimiento muestrean los tramos que procesan. Lo ideal es que todos los registros estén completos y, por lo tanto, tengas la información necesaria para solucionar problemas de fallas. Este tipo de configuración puede hacer que excedas 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, la decisión de muestreo del elemento superior influye en si se muestrea un intervalo.
Es posible que los registros no contengan todos los intervalos. Esto puede deberse al uso del muestreo probabilístico, a la cuota o a los componentes que procesan una solicitud, pero no muestrean el intervalo.
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 deseas usar el muestreo basado en la cola, puedes usar un servidor intermedio que reciba información de seguimiento y retransmita datos a Cloud Trace después de tomar una decisión de muestreo. Por ejemplo, puedes usar el 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 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 otros gastos generales.
- En general, todos los componentes que pueden generar intervalos para un 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 Google Cloud servicios
Cada servicio Google Cloud toma sus propias decisiones de muestreo, y no todos los servicios Google Cloud muestrean. Es decir, es posible que un servicio nunca envíe datos a Cloud Trace.
Cuando un servicio Google Cloud admite el muestreo, suele implementar lo siguiente:
- Es una frecuencia de muestreo predeterminada.
- Es un mecanismo para usar la decisión de muestreo del elemento principal como sugerencia para determinar si se debe muestrear el intervalo.
- Es la tasa de muestreo máxima.
Para solicitar que un servicio de Google Cloud agregue compatibilidad con el muestreo, usa la Herramienta 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 el mejor para tus aplicaciones en desarrollo y las que ya se implementaron:
Documentación del servicioGoogle Cloud :