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 pour tous d'un segment d'une trace est enregistré, 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 qui dit "Si le segment parent est échantillonné, le segment actuel est échantillonné. Sinon, échantillonne 50% des segments". Dans ce scénario, ce qui suit est vrai:
- Le délai racine détermine si tous les segments de la trace sont échantillonnés.
- Lorsque le délai racine est échantillonné, tous les délais de la trace le sont également. Par conséquent, la trace est terminée.
Les composants peuvent transmettre leur décision d'échantillonnage à l'enfant en utilisant le contexte.
Par exemple, au World Wide Web Consortium (W3C)
En-tête traceparent
,
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. Propagation contextuelle indique si les informations sur le segment, telles que son ID, sont transmis 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 concernant l'é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 expression peut s'appliquer à une trace ou à . Lorsqu'il est appliqué à une trace, cela signifie que tous les segments ont été échantillonnés. ou de façon é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 head-based
Les échantillonneurs basés sur la tête sont généralement configurés pour échantillonner toujours les segments utilisez 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. Idéalement, toutes les traces sont complètes, et donc vous disposez des informations nécessaires pour résoudre les défaillances. Ce type de configuration peut vous amener à dépasser des quotas, ou vos 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 sur l'implémentation du composant. Dans certaines implémentations, tous les segments ont la même probabilité d'être échantillonnée. Dans d'autres cas, la décision d'échantillonnage du parent détermine si une étendue est échantillonnée.
Les traces peuvent ne pas contenir tous les segments. Cela peut se produire en raison de l'utilisation probabiliste, ou bien en raison de quotas ou de composants traiter une requête, mais sans échantillonner le segment.
É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 un échantillonnage basé sur la queue, vous pouvez utiliser un intermédiaire qui reçoit des informations de traçage qui relaient les données Cloud Trace après avoir pris une décision concernant l'é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 tous les segments dans une trace avant de prendre une décision concernant l'échantillonnage. Vous aurez donc peut-être besoin d'une grande quantité ni entraîner d'autres frais généraux.
- 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 pour le même ID de trace au 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 les données vers Cloud Trace.
Lorsqu'un service Google Cloud est compatible avec l'échantillonnage, il implémente généralement les éléments suivants :
- Un taux d'échantillonnage par défaut.
- Mécanisme permettant d'utiliser la décision du parent concernant l'échantillonnage pour savoir s'il faut échantillonner le segment.
- 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 en savoir plus sur le choix d'une stratégie d'échantillonnage en fonction du nom de segment, voir Jaeger Remote sampling.
Nous vous recommandons de consulter la documentation Open Source suivante pour vous aider vous déterminez l'approche d'échantillonnage la mieux adaptée à votre environnement de développement les applications déployées:
Documentation du service Google Cloud: