Configuration de l'échantillonnage adaptatif - AWS X-Ray

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration de l'échantillonnage adaptatif

L'absence de traces critiques lors de pics d'anomalies peut compliquer l'analyse des causes profondes. Cependant, le maintien de taux d'échantillonnage élevés coûte cher. L'échantillonnage adaptatif X-Ray fournit une visibilité complète des anomalies et contrôle les coûts pendant les opérations normales. Avec l'échantillonnage adaptatif, vous définissez une fréquence d'échantillonnage maximale, et X-Ray s'ajuste automatiquement dans cette limite. X-Ray calcule le boost minimum nécessaire pour capturer les traces d'erreur. Si votre taux de référence capture suffisamment de données, aucune augmentation ne se produit. Vous ne payez pour un échantillonnage supplémentaire qu'en cas de besoin.

Avantages de l'utilisation de l'échantillonnage adaptatif :

  • Visibilité complète des incidents — Obtenez des traces complètes des incidents sans intervention manuelle. X-Ray ajuste automatiquement les taux d'échantillonnage pour capturer les traces d'erreur, puis revient à des taux normaux.

  • Visibilité des causes premières : identifiez toujours la source des problèmes. X-Ray capture les données d'erreur critiques même lorsque l'échantillonnage complet des traces n'est pas déclenché.

  • Optimisation des coûts — De brèves périodes d'échantillonnage (jusqu'à 1 minute) et des périodes de refroidissement automatique évitent le suréchantillonnage. Vous ne payez que pour les données dont vous avez besoin pour diagnostiquer les problèmes.

Plateformes SDKs et plateformes prises en charge

SDK pris en charge — L'échantillonnage adaptatif nécessite la dernière version du SDK ADOT.

Langage pris en charge : Java (version v2.11.5 ou supérieure)

Votre application doit être instrumentée avec le SDK ADOT pris en charge et exécutée conjointement avec l'Amazon CloudWatch Agent ou le Collector. OpenTelemetry

Par exemple, Amazon EC2, Amazon ECS et Amazon EKS sont des plateformes courantes sur lesquelles AWS Application Signals fournit des conseils pour activer le SDK ADOT et Amazon CloudWatch Agent.

Choisissez votre approche d'échantillonnage adaptatif

L'échantillonnage adaptatif prend en charge deux approches, Sampling Boost et Anomaly Span Capture. Ils peuvent être appliqués indépendamment ou combinés ensemble.

Amélioration de l'échantillonnage

L'amplification adaptative de l'échantillonnage est basée sur des règles d'échantillonnage et fonctionne avec le modèle d'échantillonnage basé sur la tête X-Ray existant. L'échantillonnage basé sur la tête signifie que les décisions d'échantillonnage sont prises au niveau du service racine et que l'indicateur d'échantillonnage est transmis en aval à tous les services de la chaîne d'appels.

  • Boost basé sur des règles — Le boost est toujours lié à une règle d'échantillonnage X-Ray spécifique. Chaque règle peut définir son propre taux d'augmentation maximal et son propre comportement de refroidissement.

  • Échantillonnage basé sur la tête : les décisions d'échantillonnage sont prises au niveau du service racine, et l'indicateur d'échantillonnage est transmis en aval à tous les services de la chaîne d'appels.

  • Géré par les anomalies — X-Ray s'appuie sur le SDK pour signaler les statistiques relatives aux anomalies. Lorsque X-Ray détecte des anomalies telles que des erreurs ou une latence élevée, il utilise ces statistiques pour calculer un taux d'augmentation approprié (jusqu'au maximum configuré).

Signalement d'anomalies

Chaque service applicatif de la chaîne d'appels peut émettre des statistiques sur les anomalies via le SDK requis :

  • Service racine : doit être exécuté sur un SDK et une plate-forme compatibles pour permettre l'augmentation de l'échantillonnage. Si le service root n'est pas pris en charge, aucun boost ne sera effectué.

  • Services en aval : les services en aval signalent uniquement les anomalies ; ils ne peuvent pas prendre de décisions d'échantillonnage. Lorsqu'un service en aval exécute un SDK compatible, les anomalies détectées peuvent déclencher une augmentation de l'échantillonnage. Lorsqu'un service en aval n'est pas pris en charge (par exemple, l'exécution d'un ancien SDK), les anomalies sur ce service ne déclenchent pas de boost. Ces services peuvent toujours propager le contexte en aval lorsqu'ils suivent une propagation de contexte standard (comme le contexte de trace et les bagages du W3C). Cela garantit que les services pris SDKs en charge par d'autres services en aval peuvent signaler les anomalies qui déclenchent un boost.

Améliorez le calendrier et la portée

  • Délai de déclenchement : vous pouvez vous attendre à ce que l'augmentation de l'échantillonnage commence 10 secondes seulement après la détection d'une anomalie par X-Ray.

  • Période d'amplification — Une fois que X-Ray a déclenché un boost, celui-ci dure jusqu'à 1 minute avant de revenir à la fréquence d'échantillonnage de base.

  • Accélérer le temps de refroidissement — Une fois qu'un boost a été activé, X-Ray n'en déclenchera pas un autre pour la même règle tant que la fenêtre de refroidissement n'est pas passée.

    Par exemple, lorsque vous réglez sur cooldown 10 minutes, une fois qu'un boost est terminé, aucun nouveau boost ne peut être déclenché avant la fenêtre de 10 minutes suivante.

    Cas particulier : lorsque vous réglez cooldown sur 1 minute, et comme un boost lui-même peut durer jusqu'à 1 minute, les boosts peuvent effectivement être déclenchés en continu si l'anomalie persiste.

Note

Utilisez des plateformes SDKs et des plateformes prises en charge pour votre service racine. Sampling Boost ne fonctionne qu'avec SDKs les plateformes prises en charge. Bien que le boost d'échantillonnage ait une forte probabilité de capturer des traces d'anomalies, il se peut qu'il ne capture pas toutes les traces d'anomalie.

Améliorez la visibilité

Lorsqu'une règle d'échantillonnage est configurée avec un boost d'échantillonnage adaptatif, X-Ray émet automatiquement des métriques automatiques qui vous permettent de surveiller l'activité du boost.

  • Nom de la métriqueSamplingRate

  • DimensionRuleName (définie sur le nom réel de la règle)

Chaque règle SamplingRateBoost activée publiera son taux d'échantillonnage effectif, y compris le taux de référence et toute augmentation temporaire. Cela vous permet de :

  • Suivez le moment où les boosts sont déclenchés

  • Surveillez le taux d'échantillonnage effectif pour chaque règle

  • Corrélez les boosters avec les anomalies de l'application (telles que les pics d'erreur ou les événements de latence)

Vous pouvez consulter ces statistiques dans Amazon CloudWatch Metrics, sous l'espace de noms AWS/X-Ray. La valeur métrique est un nombre à virgule flottante compris entre 0 et 1, représentant le taux d'échantillonnage effectif.

Configurer l'amplification de l'échantillonnage à l'aide des règles d'échantillonnage X-Ray

Vous pouvez activer l'échantillonnage adaptatif directement dans vos règles d'échantillonnage X-Ray existantes en ajoutant un nouveau SamplingRateBoost champ. Pour plus d'informations, consultez la section Personnalisation des règles d'échantillonnage. Cela fournit un moyen centralisé d'activer l'échantillonnage adaptatif sans modifier le code de l'application ni appliquer le déploiement de l'application. Lorsque vous activez l'échantillonnage adaptatif, X-Ray augmente automatiquement l'échantillonnage en cas d'anomalies telles que les pics d'erreur ou les valeurs aberrantes de latence, tout en maintenant les taux d'échantillonnage dans les limites de votre maximum configuré. SamplingRateBoostpeut être appliqué à n'importe quelle règle d'échantillonnage personnalisée, à l'exception de la règle Default d'échantillonnage.

Le SamplingRateBoost champ définit la limite supérieure et le comportement de l'échantillonnage basé sur les anomalies.

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

MaxRateDéfinit le taux d'échantillonnage maximal que X-Ray appliquera lorsqu'il détectera des anomalies. La plage de valeurs est 0.0 de1.0. Par exemple, "MaxRate": 0.25 permet à l'échantillonnage d'augmenter jusqu'à 25 % des demandes pendant une fenêtre d'anomalie. X-Ray détermine le taux approprié entre votre valeur de référence et le maximum, en fonction de l'activité anormale.

Il CooldownWindowMinutes définit la fenêtre temporelle (en minutes) dans laquelle une seule augmentation de la fréquence d'échantillonnage peut être déclenchée. Après un boost, aucun autre boost n'est autorisé jusqu'à la fenêtre suivante. Le type de valeur est entier (minutes).

Exemple de règle avec échantillonnage adaptatif

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

Dans cet exemple, l'échantillonnage de référence est de 5 % (FixedRate: 0.05). Lors d'anomalies, X-Ray peut augmenter l'échantillonnage jusqu'à 25 % (MaxRate: 0.25). Boostez uniquement une fois toutes les 10 minutes.

Configuration des conditions d'anomalie

Lorsqu'aucune configuration de condition d'anomalie n'est fournie, le SDK ADOT utilise les codes d'erreur HTTP 5xx comme condition d'anomalie par défaut pour déclencher l'augmentation de l'échantillonnage.

Vous pouvez également affiner les conditions d'anomalie localement dans le SDK ADOT pris en charge à l'aide de variables d'environnement. Pour de plus amples informations, veuillez consulter Configuration du SDK local.

L'anomalie s'étend sur toute la durée de capture

La capture de la plage d'anomalies garantit que les plages critiques représentant des anomalies sont toujours enregistrées, même si la trace complète n'est pas échantillonnée. Cette fonctionnalité complète l'amélioration de l'échantillonnage en se concentrant sur la capture de l'anomalie elle-même, plutôt que sur l'augmentation de l'échantillonnage pour les futures traces.

Lorsque le SDK ADOT détecte une anomalie, il émet cette plage immédiatement, quelle que soit la décision d'échantillonnage. Étant donné que le SDK émet uniquement des intervalles liés à l'anomalie, ces traces sont des traces partielles et non des transactions complètes. end-to-end

Une fois que le SDK ADOT détecte une plage d'anomalies, il tente d'émettre autant de plages que possible à partir de la même trace. Toutes les plages émises sous cette fonctionnalité sont étiquetées avec l'attribut,aws.trace.flag.sampled = 0. Cela vous permet de distinguer facilement les traces partielles (capture des anomalies) des traces complètes (échantillonnage normal) lors de la recherche et de l'analyse des transactions.

Nous vous recommandons d'intégrer Transaction Search pour consulter et interroger des traces partielles. L'exemple suivant montre une page Service dans la console Application Signals. ServiceC est configuré avec la capture de l'intervalle d'anomalie et fait partie d'une chaîne d'appels où l'augmentation de l'échantillonnage s'applique. Cette configuration génère des traces complètes et partielles. Vous pouvez utiliser aws.trace.flag.sampled cet attribut pour distinguer les types de traces.

L'anomalie s'étend sur toute la durée de capture

La capture des plages d'anomalies ne peut être activée ou personnalisée que via le. Configuration du SDK local

Configuration du SDK local

Vous pouvez configurer les fonctionnalités d'échantillonnage adaptatif dans le SDK ADOT en fournissant une configuration YAML via une variable d'environnement. La configuration locale permet un contrôle précis des conditions d'anomalie et des seuils.

Cela est nécessaire pour la capture de la plage d'anomalies et facultatif pour personnaliser les conditions d'amplification de l'échantillonnage. Voici un exemple de configuration :

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

Les définitions des champs sont indiquées ci-dessous :

  • version— Version du schéma pour le fichier de configuration

  • anomalyConditions— Définit les conditions dans lesquelles les anomalies sont détectées et comment elles sont utilisées

    • errorCodeRegex— Expression régulière définissant quels codes d'état HTTP sont considérés comme des anomalies

    • operations— Liste des opérations ou des points finaux auxquels s'applique la condition

    • highLatencyMs— Seuil de latence (en millisecondes) au-dessus duquel les intervalles sont considérés comme des anomalies

    • usage— Définit à quelle fonctionnalité la condition s'applique :

      • both— S'applique à l'augmentation de l'échantillonnage et à la capture de la plage d'anomalies (par défaut si l'utilisation n'est pas spécifiée)

      • sampling-boost— Utilisé uniquement pour déclencher des amplifications d'échantillonnage

      • anomaly-span-capture— Utilisé uniquement pour la capture de l'étendue des anomalies

  • anomalyCaptureLimit— Définit les limites du nombre de traces présentant des plages d'anomalies émises.

    anomalyTracesPerSecond— Nombre maximal de traces présentant des intervalles d'anomalie capturés par seconde, afin d'éviter un volume d'intervalle excessif (la valeur par défaut est 1 en l' anomalyCaptureLimit absence).

Note
  • AnomalyConditionsremplace la condition d'anomalie par défaut pour l'augmentation de l'échantillonnage (HTTP 5xx). Si vous souhaitez conserver la condition par défaut lors de l'utilisation de la configuration locale, vous devez l'inclure explicitement dans n'importe quel élément deAnomalyConditions.

  • Pour chaque anomalyConditions article :

    • Lorsque le operations champ est omis, la condition s'applique à toutes les opérations (niveau de service)

    • Lorsque le operations champ est présent mais défini sur une liste vide, la condition s'applique à l'absence d'opérations, ce qui rend cet élément non opérationnel

    • Lorsque errorCodeRegex les deux highLatencyMs sont omis, la condition n'a aucun critère d'anomalie à évaluer, ce qui rend cet élément non opérationnel

  • Relations logiques :

    • Entre les élémentsanomalyConditions, la relation est OR.

    • Au sein d'un même élément, plusieurs champs (par exemple, errorCodeRegex ethighLatencyMs) sont combinés avec AND.

      Par exemple :

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

      Cette condition signifie que le code d'état correspond à 429 ou 5xx ET que la latence est supérieure ou égale à 300 ms.

Appliquer la configuration locale au SDK ADOT

Vous pouvez appliquer la configuration locale au SDK ADOT en définissant la variable d'environnement. AWS_XRAY_ADAPTIVE_SAMPLING_CONFIG La valeur doit être un document YAML valide (en ligne ou imbriqué).

Par exemple, Amazon EC2 et Amazon ECS, définissez directement la variable d'environnement :

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

Pour Amazon EKS, définissez la variable d'environnement dans la spécification du pod en tant que YAML imbriqué :

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