El muestreo de registros determina qué solicitudes y períodos Cloud Trace admite, lo que te ayuda a controlar los costos de almacenamiento y a mantenerte dentro de las cuotas, a la vez que capturas suficientes datos para solucionar problemas de rendimiento. Para administrar grandes volúmenes de solicitudes, los componentes de un sistema de seguimiento distribuido suelen tomar muestras solo de un subconjunto de seguimientos o seguir las decisiones de muestreo de los intervalos principales.
El muestreo es distinto de la propagación de contexto: el muestreo controla si un componente registra datos de intervalo, mientras que la propagación de contexto pasa identificadores de seguimiento entre componentes para que se puedan vincular los intervalos muestreados.
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 toda la traza 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 registro o a un componente. Cuando se aplica a un registro, significa que se tomaron muestras de todos los intervalos o, de manera equivalente, que el registro 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 siempre, los componentes que procesan y escriben datos de seguimiento muestrean cada intervalo. Lo ideal es que todos los registros estén completos y, por lo tanto, tengas la información necesaria para solucionar problemas de fallas. Sin embargo, una configuración de muestreo constante podría 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 un registro no contenga todos los intervalos. Si usas un muestreo probabilístico, superas la cuota o usas componentes que procesan, pero no muestrean intervalos, se esperan registros incompletos.
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 usas el muestreo basado en la cola, también puedes usar un servidor intermedio para recibir datos de seguimiento, evaluar las decisiones de muestreo y retransmitir los intervalos 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 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 registro deben coordinarse. Por lo general, los desarrolladores que usan OpenTelemetry enrutan todos los intervalos del mismo ID de seguimiento al mismo recopilador.
Los componentes toman decisiones de muestreo
Cada componente toma su propia decisión sobre si debe muestrear el intervalo que está procesando. Sin embargo, la decisión de muestreo del componente principal, que podría 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 encabezado traceparent pueden pasar la decisión de muestreo del elemento superior con la marca sampled.
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.
Servicios de muestreo y Google Cloud
Cada servicio de Google Cloud toma sus propias decisiones de muestreo, y no todos los servicios de Google Cloud muestrean. Es decir, es posible que un servicio nunca envíe datos a Cloud Trace.
Cuando un Google Cloud servicio admite el muestreo, por lo general, implementa lo siguiente:
- Es una frecuencia de muestreo predeterminada.
- Es un mecanismo para usar la decisión de muestreo de la entidad principal como una sugerencia sobre si se debe muestrear el intervalo.
- Es la tasa de muestreo máxima.
Para solicitar que un servicio 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 :