Trace Sampling

In diesem Dokument wird das Konzept der Stichproben vorgestellt, das sich darauf bezieht, ob Daten für einen Span an Cloud Trace gesendet werden. Werden Daten für einen Span an Cloud Trace gesendet, werden für diesen Span eine Stichprobe erstellt. Wenn Daten für jeden Span in einem Trace aufgezeichnet werden, ist das Trace abgeschlossen. Allerdings fehlen in Traces häufig Spans, da jede instrumentierte Komponente in einem verteilten Tracing-System unabhängig entscheidet, ob der verarbeitete Span aufgezeichnet wird.

Obwohl jede Komponente ihre eigene Entscheidung darüber trifft, ob der von ihr verarbeitete Span als Stichprobe verwendet wird, kann diese Entscheidung von der Stichprobenentscheidung der übergeordneten Komponente beeinflusst werden. Angenommen, jede Komponente hat eine Regel, die besagt, dass bei einer Stichprobenerhebung für den übergeordneten Span eine Stichprobe aus dem aktuellen Span erhoben wird, andernfalls werden 50% der Spans erfasst. In diesem Szenario gilt Folgendes:

  • Der Haupt-Span bestimmt, ob für alle Spans im Trace Stichproben verwendet werden.
  • Wenn für den Haupt-Span eine Stichprobe erstellt wird, werden für alle Spans im Trace Stichproben verwendet. Daher ist der Trace vollständig.

Komponenten können ihre Stichprobenentscheidung mithilfe des Kontexts an die untergeordneten Elemente weitergeben. Im Header traceparent des World Wide Web Consortium (W3C) wird mit dem Flag sampled beispielsweise die Entscheidung für die Stichprobenerhebung des übergeordneten Konsortiums gespeichert.

Die Stichprobenerhebung darf nicht mit der Kontextverteilung verwechselt werden. Eine Stichprobennahme bezieht sich darauf, ob eine Komponente Daten zu einem Span aufzeichnet. Die Kontextverteilung bezieht sich darauf, ob Informationen über den Span, z. B. die Span-ID, an untergeordnete Komponenten übergeben werden.

Stichprobenstrategien

Stichprobenentscheidungen können entweder Head- oder Tail-basiert sein. Bei head-based sampling wird die Stichprobenentscheidung getroffen, wenn die Anfrage bei der Komponente eingeht, die den Span verarbeitet. Bei tail-basierten Stichproben wird die Stichprobenentscheidung verzögert, bis der gesamte Trace verfügbar ist.

In der Dokumentation für verteilte Tracing-Systeme stoßen Sie möglicherweise auf den Ausdruck „100% sampling“. Dieser Ausdruck kann für einen Trace oder eine Komponente gelten. Bei Anwendung auf ein Trace bedeutet dies, dass alle Spans erfasst wurden oder entsprechend, dass der Trace abgeschlossen ist. Bei Anwendung auf eine Komponente bedeutet dies, dass die Komponente für jede von ihr verarbeitete Spanne eine Stichprobe erstellt.

Kopfbasierte Stichprobennahme

Head-based Sampler sind in der Regel so konfiguriert, dass immer Stichproben von Spans erhoben werden oder eine probabilistische Stichprobenstrategie verwendet wird:

  • Bei immer Beispielkonfigurationen werden von allen Komponenten, die Dienst-Spans bilden und Trace-Daten schreiben, Stichproben der von ihnen verarbeiteten Spans erstellt. Im Idealfall sind alle Traces vollständig, sodass Sie die erforderlichen Informationen zur Fehlerbehebung haben. Diese Art der Konfiguration kann dazu führen, dass Sie quotas oder Ihre Speicherkostenlimits überschreiten.

  • Bei probabilistischen Stichproben werden nicht für alle Spans Stichproben verwendet. Das tatsächliche Verhalten bei diesem Ansatz hängt von der Implementierung der Komponente ab. In einigen Implementierungen ist die Wahrscheinlichkeit für alle Spans gleich. Bei anderen hat die Stichprobenentscheidung des übergeordneten Elements Einfluss darauf, ob ein Span als Stichprobe genommen wird.

Traces enthalten möglicherweise nicht jeden Span. Dies kann durch die Verwendung von probabilistischen Stichproben, ein Kontingent oder Komponenten, die eine Anfrage verarbeiten, aber keine Stichproben des Spans erfassen, erwartet werden.

Schwankungsbasierte Stichprobennahme

Cloud Trace unterstützt keine tail-basierte Stichprobennahme. Entscheidungen über die Stichprobenerhebung müssen in den Komponenten getroffen werden, die Daten an Cloud Trace senden.

Wenn Sie tail-basierte Stichproben verwenden möchten, können Sie einen Zwischenserver verwenden, der Tracing-Informationen empfängt und Daten an Cloud Trace weiterleitet, nachdem eine Stichprobenentscheidung getroffen wurde. Sie können beispielsweise den OpenTelemetry Collector mit dem Tail Sampling Processor verwenden, um eine verzögerte Stichprobenentscheidung zu treffen.

Wenn Sie Tailstichproben verwenden möchten, sollten Sie Folgendes berücksichtigen:

  • Sie müssen alle Spans in einem Trace speichern, bevor Sie eine Stichprobenentscheidung treffen. Daher benötigen Sie möglicherweise viel temporären Speicher oder anderen Aufwand.
  • Im Allgemeinen müssen alle Komponenten, die Spans für Trace generieren können, koordiniert werden. In der Regel leiten Entwickler, die OpenTelemetry verwenden, alle Spans für dieselbe Trace-ID an denselben Collector weiter.

Stichproben- und Google Cloud-Dienste

Jeder Google Cloud-Dienst trifft seine eigenen Stichprobenentscheidungen und nicht alle Google Cloud-Dienste verwenden Stichproben. Ein Dienst sendet also möglicherweise niemals Daten an Cloud Trace.

Wenn die Stichprobenerhebung von einem Google Cloud-Dienst unterstützt wird, implementiert dieser Dienst in der Regel Folgendes:

  • Eine Standard-Abtastrate.
  • Ein Mechanismus, um anhand der Stichprobenentscheidung des übergeordneten Elements anzuhalten, ob der Span stichprobenartig ist.
  • Maximale Abtastrate.

Wenn Sie möchten, dass ein Google Cloud-Dienst Unterstützung für die Stichprobenerhebung hinzufügt, können Sie den Google Issue Tracker verwenden.

Nächste Schritte