Échantillonnage des traces

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 délai d'une trace sont enregistrées, la trace est terminée. Toutefois, il arrive souvent que les traces manquent de segments, car chaque composant instrumenté d'un système de traçage distribué décide de manière indépendante s'il doit enregistrer ou non le délai qu'il traite.

Bien que chaque composant détermine sa propre décision pour déterminer si le délai qu'il traite est échantillonné, cette décision peut être influencée par la décision d'échantillonnage du parent. Par exemple, supposons que chaque composant comporte une règle qui stipule que "si le segment parent est échantillonné, échantillonner le segment actuel ; sinon, échantillonner 50% des segments". Dans ce scénario, les points suivants sont vrais:

  • Le délai racine détermine si tous les délais 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 complète.

Les composants peuvent transmettre leur décision d'échantillonnage à l'enfant en fonction 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 et la propagation contextuelle. L'échantillonnage indique si un composant enregistre des données sur un segment. La propagation du contexte indique si des informations sur le segment, telles que son ID, 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 le cas de l'échantillonnage head-based, la décision concernant l'échantillonnage est prise lorsque la requête est reçue par le composant qui traite le délai. Dans l'échantillonnage basé sur la queue, la décision d'échantillonnage est retardée jusqu'à ce que la trace entière soit disponible.

Vous pouvez rencontrer l'expression "100% échantillonnage" dans la documentation des systèmes de traçage distribué. Cette expression 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 qu'il échantillonne chaque segment qu'il traite.

Échantillonnage head-based

Les échantillonneurs basés sur la tête sont généralement configurés pour toujours échantillonner les segments ou pour utiliser une stratégie d'échantillonnage probabiliste:

  • Avec des configurations qui fournissent toujours des exemples, tous les composants qui assurent le service et peuvent écrire des données de trace échantillonnent les segments qu'ils traitent. Idéalement, toutes les traces sont complètes. Vous disposez donc des informations nécessaires pour résoudre les échecs. Ce type de configuration peut entraîner le dépassement des quotas ou des limites de coût de stockage.

  • Avec l'échantillonnage probabiliste, tous les segments ne sont pas échantillonnés. Le comportement réel de cette approche dépend de l'implémentation du composant. Dans certaines implémentations, tous les segments ont la même probabilité d'être échantillonnés. Dans d'autres, la décision d'échantillonnage du parent détermine si un segment est échantillonné.

Les traces peuvent ne pas contenir tous les segments. Cela peut être dû à l'utilisation d'un échantillonnage probabiliste, à un quota ou à des composants qui traitent une requête, mais n'échantillonnent pas le délai.

Échantillonnage basé sur la queue

Cloud Trace n'est pas compatible avec l'échantillonnage en queue. Des décisions d'échantillonnage doivent être prises au niveau des composants qui envoient des données à Cloud Trace.

Si vous souhaitez utiliser l'échantillonnage en queue, vous pouvez utiliser un serveur intermédiaire qui reçoit des informations de traçage et transmet les 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 retard pour prendre une décision d'échantillonnage retardé.

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. Par conséquent, vous pouvez avoir besoin d'une grande quantité de stockage temporaire ou entraîner d'autres frais généraux.
  • En général, tous les composants pouvant générer des segments pour la trace doivent se coordonner. En règle générale, les développeurs qui utilisent OpenTelemetry acheminent tous les délais pour le même ID de trace vers le même collecteur.

Échantillonnage et services Google Cloud

Chaque service Google Cloud prend ses propres décisions en termes d'échantillonnage, et non l'ensemble des services Google Cloud. Autrement dit, un service peut ne jamais envoyer de données à Cloud Trace.

Lorsqu'un service Google Cloud prend en charge l'échantillonnage, il met généralement en œuvre les éléments suivants:

  • Taux d'échantillonnage par défaut.
  • Mécanisme permettant d'utiliser la décision du parent concernant l'échantillonnage pour déterminer s'il faut échantillonner le délai.
  • Taux d'échantillonnage maximal.

Pour demander à un service Google Cloud d'ajouter la prise en charge de l'échantillonnage, utilisez Google Issue Tracker.

Étapes suivantes