É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 pour tous d'un segment d'une trace est enregistré, la trace est terminée. Toutefois, les traces fréquemment Il manque des segments, car chaque composant instrumenté dans un traçage distribué système décide indépendamment d'enregistrer ou non qu'il traite.

Bien que chaque composant prenne sa propre décision quant à l'étendue de traitement est échantillonné, cette décision peut être influencée par concernant l'échantillonnage des données. 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, 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. Échantillonnage fait référence à la possibilité qu'un composant enregistre des données sur un segment. 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 les données principales ou à la traîne. 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 équivalente, que la trace est complète. Lorsqu'elle est appliquée à un composant, cela signifie que le composant échantillonne chaque segment 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, tous les composants qui peuvent écrire des données de trace, échantillonner les segments processus. 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, tous les segments ne sont pas échantillonnés. 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.

Il est possible que les traces ne contiennent pas toutes les périodes. 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 de fin

Cloud Trace n'est pas compatible avec l'échantillonnage à la traîne. échantillonnage des décisions doivent être prises concernant 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 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 de prélèvement de queue pour prendre une décision concernant l'é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. Vous aurez donc peut-être besoin d'une grande quantité ni entraîner d'autres frais généraux.
  • En général, tous les composants qui peuvent générer des segments pour la trace doivent coordonnées. 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 concernant l'échantillonnage, et non sur tous les exemples de services Google Cloud. Autrement dit, un service peut ne jamais envoyer de données à Cloud Trace.

Lorsque l'échantillonnage est pris en charge par un service Google Cloud, ce service met 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 savoir s'il faut échantillonner le segment.
  • Taux d'échantillonnage maximal.

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

Étape suivante