Configuración de muestreo flexible - AWS X-Ray

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configuración de muestreo flexible

La falta de rastros críticos durante los picos de anomalías puede dificultar el análisis de la causa raíz. Sin embargo, mantener altas tasas de muestreo resulta caro. El muestreo adaptativo de X-Ray proporciona una visibilidad completa de las anomalías y controla los costos durante las operaciones normales. Con el muestreo adaptativo, se establece una frecuencia de muestreo máxima y X-Ray se ajusta automáticamente dentro de ese límite. X-Ray calcula el impulso mínimo necesario para capturar los rastros de errores. Si la velocidad de referencia captura suficientes datos, no se produce ningún aumento. Solo pagará por el muestreo adicional cuando sea necesario.

Beneficios de utilizar el muestreo adaptativo:

  • Visibilidad completa de los incidentes: obtenga un seguimiento completo de los incidentes sin intervención manual. X-Ray ajusta automáticamente las velocidades de muestreo para capturar los rastros de error y, a continuación, vuelve a las tasas normales.

  • Visibilidad de la causa raíz: compruebe siempre el origen de los problemas. X-Ray captura datos de errores críticos incluso cuando no se desencadena el muestreo de rastros completos.

  • Optimice los costos: los breves aumentos de muestreo (hasta 1 minuto) y los periodos de recuperación automáticos evitan el sobremuestreo. Solo pagará por los datos que necesite para diagnosticar problemas.

Plataformas y SDK compatibles

SDK compatible: el muestreo adaptativo requiere la versión más reciente del ADOT SDK.

Lenguaje compatible: Java (versión 2.11.5 o superior)

La aplicación debe estar equipada con el ADOT SDK compatible y ejecutarse junto con el agente de Amazon CloudWatch o el recopilador de OpenTelemetry.

Por ejemplo, Amazon EC2, Amazon ECS y Amazon EKS son plataformas comunes en las que las señales de aplicación de AWS proporcionan orientación para habilitar ADOT SDK y el agente de Amazon CloudWatch.

Elección del enfoque de muestreo adaptativo

El muestreo adaptativo admite dos enfoques: potenciación del muestreo y captura de intervalos de anomalías. Se pueden aplicar de forma independiente o se pueden combinar entre sí.

Potenciación del muestreo

La potenciación del muestreo adaptativo se basa en las reglas de muestreo y funciona con el modelo de muestreo existente basado en encabezados de X-Ray. El muestreo basado en encabezados significa que las decisiones de muestreo se toman en el servicio raíz y el indicador de muestreo se transmite posteriormente a todos los servicios de la cadena de llamadas.

  • Aumento basado en reglas: el impulso siempre está vinculado a una regla específica de muestreo de X-Ray. Cada regla puede definir su propia velocidad máxima de aumento y comportamiento de enfriamiento.

  • Muestreo basado en encabezados: significa que las decisiones de muestreo se toman en el servicio raíz y el indicador de muestreo se transmite posteriormente a todos los servicios de la cadena de llamadas.

  • Impulsado por anomalías: X-Ray se basa en el SDK para informar de las estadísticas de anomalías. Cuando X-Ray detecta anomalías, como errores o una latencia alta, utiliza estas estadísticas para calcular una tasa de aumento adecuada (hasta el máximo configurado).

Informes de anomalías

Todos los servicios de aplicaciones de la cadena de llamadas pueden emitir estadísticas de anomalías a través del SDK necesario:

  • Servicio raíz: se debe ejecutar en una plataforma y un SDK compatibles para poder aumentar el muestreo. Si el servicio raíz no es compatible, no se producirá ningún impulso.

  • Servicios posteriores: los servicios posteriores solo informan de anomalías; no pueden tomar decisiones de muestreo. Cuando un servicio posterior ejecuta un SDK compatible, las anomalías detectadas pueden desencadenar un aumento del muestreo. Cuando un servicio posterior no es compatible (por ejemplo, si se ejecuta un SDK anterior), las anomalías de ese servicio no desencadenarán un aumento. Estos servicios aún pueden propagar el contexto posterior si siguen la propagación de contexto estándar (como el contexto y equipaje de rastros de W3C). Esto garantiza que los SDK compatibles en otros servicios posteriores puedan detectar anomalías que desencadenen un aumento.

Aumento del tiempo y el alcance

  • Retraso de desencadenamiento: puede esperar que el aumento de muestreo comience tan solo 10 segundos después de que X-Ray detecte una anomalía.

  • Periodo de refuerzo: después de que X-Ray desencadene un impulso, dura hasta 1 minuto antes de volver a la frecuencia de muestreo base.

  • Aumentar el tiempo de enfriamiento: después de que se produzca un aumento, X-Ray no desencadenará otro aumento con la misma regla hasta que haya pasado el periodo de enfriamiento.

    Por ejemplo, si establece cooldown en 10 minutos, una vez que finalice un aumento, no se podrá desencadenar ningún nuevo impulso hasta que pasen los siguientes 10 minutos.

    Caso especial: si establece cooldown en 1 minuto, y dado que un impulso en sí mismo puede durar hasta 1 minuto, los aumentos pueden desencadenarse de forma continua si la anomalía persiste.

nota

Use los SDK y las plataformas compatibles para el servicio raíz. La potenciación del muestreo solo funciona con los SDK y las plataformas compatibles. Aunque la potenciación del muestreo tiene una alta probabilidad de captar rastros de anomalías, es posible que no capte todos los rastros de anomalías.

Aumento de la visibilidad

Cuando se configura una regla de muestreo con un aumento de muestreo adaptativo, X-Ray emite automáticamente métricas vendidas que le permiten supervisar la actividad del aumento.

  • Nombre de métricaSamplingRate

  • Dimensión: RuleName (establecida con el nombre real de la regla)

Cada regla con SamplingRateBoost habilitado publicará su frecuencia de muestreo efectiva, incluida la frecuencia de referencia y cualquier aumento temporal. Esto le permite:

  • Realización de un seguimiento de cuándo se desencadenan los aumentos

  • Supervisión de la frecuencia de muestreo efectiva de cada regla

  • Correlación de los aumentos con las anomalías de las aplicaciones (como picos de error o eventos de latencia)

Puede ver estas métricas en Métricas de Amazon CloudWatch, en el espacio de nombres AWS/X-Ray. El valor de la métrica es un número de punto flotante entre 0 y 1, que representa la frecuencia de muestreo efectiva.

Configuración de potenciación de muestreo mediante reglas de muestreo de X-Ray

Puede habilitar el muestreo adaptativo directamente en las reglas de muestreo de X-Ray existentes agregando un campo de SamplingRateBoost nuevo. Para obtener más información, consulte Configuración de reglas de muestreo. Esto proporciona una forma centralizada de habilitar el muestreo adaptativo sin modificar el código de la aplicación ni aplicar la implementación de la aplicación. Al habilitar el muestreo adaptativo, X-Ray aumenta automáticamente el muestreo durante anomalías como picos de error o valores atípicos de latencia, a la vez que mantiene las frecuencias de muestreo dentro del máximo configurado. SamplingRateBoost se puede aplicar a cualquier regla de muestreo personalizada, excepto a la regla de muestreo Default.

El campo SamplingRateBoost define el límite superior y el comportamiento del muestreo provocado por anomalías.

"SamplingRateBoost": { "MaxRate": 0.25, "CooldownWindowMinutes": 10 }

MaxRate define la frecuencia de muestreo máxima que aplicará X-Ray cuando detecte anomalías. El intervalo de valores es 0.0 a 1.0. Por ejemplo, "MaxRate": 0.25 permite que el muestreo aumente hasta un 25 % de las solicitudes durante un periodo de anomalías. X-Ray determina la frecuencia adecuada entre la línea base y la máxima, en función de la actividad de la anomalía.

CooldownWindowMinutes define el intervalo de tiempo (en minutos) en el que solo se puede desencadenar un aumento de la frecuencia de muestreo. Una vez que se produce un aumento, no se permiten más aumentos hasta la siguiente ventana. El tipo de valor es entero (minutos).

Regla de ejemplo con muestreo adaptativo

{ "RuleName": "MyAdaptiveRule", "Priority": 1, "ReservoirSize": 1, "FixedRate": 0.05, "ServiceName": "*", "ServiceType": "*", "Host": "*", "HTTPMethod": "*", "URLPath": "*", "SamplingRateBoost": { "MaxRate": 0.25, "CooldownWindowMinutes": 10 } }

En este ejemplo, el muestreo de referencia es del 5 % (FixedRate: 0.05). Durante las anomalías, X-Ray puede aumentar el muestreo hasta un 25 % (MaxRate: 0.25). Aumente solo una vez cada 10 minutos.

Configuración de estado anómalo

Cuando no se proporciona una configuración de condición de anomalía, el ADOT SDK utiliza los códigos de error HTTP 5xx como condición de anomalía predeterminada para desencadenar el aumento del muestreo.

También puede refinar las condiciones de las anomalías de forma local en el ADOT SDK compatible mediante variables de entorno. Para obtener más información, consulte Configuración de SDK local.

Captura de intervalos de anomalías

La captura de intervalos de anomalías garantiza que los intervalos críticos que representan anomalías se registren siempre, incluso si no se ha muestreado todo el rastro. Esta característica complementa el impulso del muestreo al centrarse en capturar la anomalía en sí misma, en lugar de aumentar el muestreo para rastros futuros.

Cuando el ADOT SDK detecta una anomalía, emite ese intervalo inmediatamente, independientemente de la decisión de muestreo. Como el SDK solo emite intervalos relacionados con la anomalía, estos rastros son parciales, no transacciones completas integrales.

Una vez que ADOT SDK detecta un intervalo de anomalías, intenta emitir tantos intervalos como sea posible a partir del mismo rastro. Todos los intervalos emitidos en virtud de esta característica se etiquetan con el atributo, aws.trace.flag.sampled = 0. Esto le permite distinguir fácilmente los rastros parciales (captura de anomalías) de los rastros completos (muestreo normal) en la búsqueda y el análisis de las transacciones.

Recomendamos incorporar Búsqueda de transacciones para ver y consultar los rastros parciales. El siguiente ejemplo muestra una página de servicio en la consola de señales de aplicaciones. El ServiceC está configurado con la captura de intervalos de anomalías y forma parte de una cadena de llamadas en la que se aplica el aumento de muestreo. Esta configuración genera rastros completos y parciales. Puede utilizar el atributo aws.trace.flag.sampled para distinguir entre los tipos de rastros.

Captura de intervalos de anomalías

La captura de intervalos de anomalías solo se puede habilitar o personalizar a través de Configuración de SDK local.

Configuración de SDK local

Puede configurar las características de muestreo adaptativo en el ADOT SDK proporcionando una configuración YAML a través de una variable de entorno. La configuración local proporciona un control minucioso sobre las condiciones de anomalía y los umbrales.

Esto es necesario para la captura de intervalos de anomalías y es opcional para personalizar las condiciones de potenciación del muestreo. A continuación, se muestra un ejemplo de la configuración:

version: 1.0 anomalyConditions: - errorCodeRegex: "^5\\d\\d$" usage: both - operations: - "/api" errorCodeRegex: "^429|5\\d\\d$" highLatencyMs: 300 usage: sampling-boost - highLatencyMs: 1000 usage: anomaly-span-capture anomalyCaptureLimit: anomalyTracesPerSecond: 1

Las definiciones de los campos son las siguientes:

  • version: versión esquemática del archivo de configuración

  • anomalyConditions: define las condiciones en las que se detectan las anomalías y cómo se utilizan

    • errorCodeRegex: expresión regular que define qué códigos de estado HTTP se consideran anomalías

    • operations: lista de operaciones o puntos de conexión a los que se aplica la condición

    • highLatencyMs: umbral de latencia (en milisegundos) por encima del cual los intervalos se consideran anomalías

    • usage: define a qué característica se aplica la condición:

      • both: se aplica a la potenciación del muestreo y a la captura de intervalos de anomalías (predeterminado si no se especifica el uso)

      • sampling-boost: se utiliza solo para desencadenar aumentos de muestreo

      • anomaly-span-capture: se utiliza solo para la captura de intervalos de anomalías

  • anomalyCaptureLimit: define los límites del número de rastros que se emiten con intervalos de anomalías.

    anomalyTracesPerSecond: número máximo de rastros con intervalos de anomalías capturados por segundo, para evitar un volumen de intervalo excesivo (el valor predeterminado es 1 si anomalyCaptureLimit no está presente).

nota
  • AnomalyConditions invalida la condición de anomalía predeterminada para el aumento del muestreo (HTTP 5xx). Si desea retener la condición predeterminada mientras utiliza la configuración local, debe incluirla explícitamente en cualquier elemento de AnomalyConditions.

  • Para cada elemento anomalyConditions:

    • Cuando el campo operations se omite, la condición se aplica a todas las operaciones (nivel de servicio)

    • Cuando el campo operations está presente pero está configurado en una lista vacía, la condición no se aplica a ninguna operación, por lo que ese elemento no es operativo

    • Si se omite errorCodeRegex y highLatencyMs, la condición no tiene ningún criterio de anomalía que evaluar, por lo que ese elemento no es operativo

  • Relaciones lógicas:

    • Entre los elementos de anomalyConditions, la relación es OR.

    • Dentro de un único elemento, varios campos (por ejemplo, errorCodeRegex y highLatencyMs) se combinan con AND.

      Por ejemplo:

      errorCodeRegex: "^429|5\\d\\d$" highLatencyMs: 300

      Esta condición significa que el código de estado coincide con 429 o 5xx Y una latencia ≥ 300 ms.

Aplicación de la configuración local al ADOT SDK

Puede aplicar la configuración local al ADOT SDK configurando la variable de entorno AWS_XRAY_ADAPTIVE_SAMPLING_CONFIG. El valor debe ser un documento YAML válido (integrado o anidado).

Por ejemplo, Amazon EC2 y Amazon ECS configuran la variable de entorno directamente:

AWS_XRAY_ADAPTIVE_SAMPLING_CONFIG="{version: 1.0, anomalyConditions: [{errorCodeRegex: \"^500$\", usage: \"sampling-boost\"}, {errorCodeRegex: \"^501$\", usage: \"anomaly-trace-capture\"}], anomalyCaptureLimit: {anomalyTracesPerSecond: 10}}"

Para Amazon EKS, defina la variable de entorno dentro de la especificación del pod como YAML anidado:

apiVersion: v1 kind: Pod metadata: name: adot-sample spec: containers: - name: adot-app image: my-app:latest env: - name: AWS_XRAY_ADAPTIVE_SAMPLING_CONFIG value: | version: 1.0 anomalyConditions: - errorCodeRegex: "^500$" usage: sampling-boost - errorCodeRegex: "^501$" usage: anomaly-trace-capture anomalyCaptureLimit: anomalyTracesPerSecond: 10