Ce document présente le concept d'échantillonnage, qui indique si les données d'un délai sont envoyées à Cloud Trace. Lorsque les données d'un délai sont envoyées à Cloud Trace, ce délai est échantillonné. Lorsque les données de chaque intervalle d'une trace sont enregistrées, la trace est terminée. Toutefois, les traces comportent souvent des segments manquants, car chaque composant instrumenté d'un système de traçage distribué décide indépendamment d'enregistrer ou non le segment qu'il traite.
Bien que chaque composant prenne sa propre décision quant à l'échantillonnage de la période qu'il traite, cette décision peut être influencée par la décision d'échantillonnage du parent. Par exemple, supposons que chaque composant dispose d'une règle indiquant "si la période parente est échantillonnée, échantillonnez la période actuelle ; sinon, échantillonnez 50% des périodes". Dans ce scénario, les conditions suivantes sont vraies:
- Le segment racine détermine si tous les segments de la trace sont échantillonnés.
- Lorsque le segment racine est échantillonné, tous les segments de la trace sont échantillonnés. Par conséquent, la trace est terminée.
Les composants peuvent transmettre leur décision d'échantillonnage à l'enfant à l'aide du contexte.
Par exemple, dans l'en-tête traceparent
du World Wide Web Consortium (W3C), l'indicateur sampled
stocke la décision d'échantillonnage du parent.
Ne confondez pas l'échantillonnage avec la propagation du contexte. L'échantillonnage indique si un composant enregistre des données sur une période. La propagation de contexte indique si des informations sur la période, telles que l'ID de période, sont transmises aux composants enfants.
Stratégies d'échantillonnage
Les décisions d'échantillonnage peuvent être basées sur la tête ou sur la queue. Dans l'échantillonnage basé sur la tête, la décision d'échantillonnage est prise lorsque la requête est reçue par le composant qui traite la période. Dans l'échantillonnage basé sur la queue, la décision d'échantillonnage est retardée jusqu'à ce que la trace complète soit disponible.
Vous pouvez rencontrer l'expression "échantillonnage à 100 %" dans la documentation des systèmes de traçage distribués. Cette phrase peut s'appliquer à une trace ou à un composant. Lorsqu'il est appliqué à une trace, cela signifie que tous les délais ont été échantillonnés, ou, de manière équivalente, que la trace est complète. Lorsqu'il est appliqué à un composant, cela signifie que le composant échantillonne chaque étendue qu'il traite.
Échantillonnage basé sur la tête
Les échantillons basés sur la tête sont généralement configurés pour toujours échantillonner des plages ou pour utiliser une stratégie d'échantillonnage probabiliste:
Avec les configurations always sample (toujours échantillonner), tous les composants qui desservent des étendues et qui peuvent écrire des données de trace échantillonnent les étendues qu'ils traitent. Dans l'idéal, toutes les traces sont complètes et vous disposez donc des informations nécessaires pour résoudre les échecs. Ce type de configuration peut entraîner le dépassement de quotas ou de limites de coût de stockage.
Avec l'échantillonnage probabiliste, toutes les portées ne sont pas échantillonnées. Le comportement réel de cette approche dépend de l'implémentation du composant. Dans certaines implémentations, toutes les portées ont la même probabilité d'être échantillonnées. Dans d'autres cas, la décision d'échantillonnage du parent détermine si une étendue est échantillonnée.
Il est possible que les traces ne contiennent pas toutes les périodes. Cela peut être dû à l'utilisation d'un échantillonnage probabiliste, ou à des quotas, ou à des composants qui traitent une requête, mais n'échantillonnent pas la période.
Échantillonnage basé sur la queue
Cloud Trace n'est pas compatible avec l'échantillonnage basé sur la queue. Les décisions d'échantillonnage doivent être prises dans les composants qui envoient des données à Cloud Trace.
Si vous souhaitez utiliser l'échantillonnage basé sur la queue, vous pouvez utiliser un serveur intermédiaire qui reçoit des informations de traçage qui transmettent des données à Cloud Trace après avoir pris une décision d'échantillonnage. Par exemple, vous pouvez utiliser le collecteur OpenTelemetry avec le processeur d'échantillonnage de la queue pour prendre une décision d'échantillonnage différée.
Si vous prévoyez d'utiliser l'échantillonnage de queue, tenez compte des points suivants:
- Vous devez stocker toutes les périodes dans une trace avant de prendre une décision d'échantillonnage. Par conséquent, vous devrez peut-être utiliser une grande quantité d'espace de stockage temporaire ou supporter d'autres coûts.
- En règle générale, tous les composants pouvant générer des délais de trace doivent se coordonner. En règle générale, les développeurs qui utilisent OpenTelemetry acheminent tous les segments du même ID de trace vers le même collecteur.
Échantillonnage et services Google Cloud
Chaque service Google Cloud prend ses propres décisions d'échantillonnage, et tous les services Google Cloud ne procèdent pas à l'échantillonnage. Autrement dit, un service peut ne jamais envoyer de données à Cloud Trace.
Lorsqu'un service Google Cloud est compatible avec l'échantillonnage, il implémente généralement les éléments suivants:
- Taux d'échantillonnage par défaut.
- Mécanisme permettant d'utiliser la décision d'échantillonnage du parent comme indice pour déterminer si l'échantillonnage de la portée doit être effectué.
- Taux d'échantillonnage maximal.
Pour demander qu'un service Google Cloud prenne en charge l'échantillonnage, utilisez l'outil de suivi des problèmes Google.
Étape suivante
Pour savoir comment choisir une stratégie d'échantillonnage par nom de span, consultez Échantillonnage à distance Jaeger.
Nous vous recommandons de consulter la documentation Open Source suivante pour vous aider à déterminer l'approche d'échantillonnage la plus adaptée à vos applications en cours de développement et déployées:
Documentation sur les services Google Cloud: