Trace-Stichprobenerhebung

In diesem Dokument wird das Konzept der Stichprobenerhebung erläutert. Dabei geht es darum, ob Daten für einen Span an Cloud Trace gesendet werden. Wenn Daten für einen Span an Cloud Trace gesendet werden, wird dieser Span gemustert. Wenn Daten für jeden Span in einem Trace aufgezeichnet wurden, ist der Trace vollständig. In den Protokollen fehlen jedoch häufig Spans, da jede instrumentierte Komponente in einem verteilten Tracing-System unabhängig entscheidet, ob die verarbeitete Span aufgezeichnet werden soll oder nicht.

Jede Komponente trifft zwar selbst die Entscheidung, ob die verarbeitete Spanne Stichprobenerhebungen unterzogen wird, diese Entscheidung kann aber von der Stichprobenerhebungsentscheidung des übergeordneten Elements beeinflusst werden. Angenommen, jede Komponente hat die Regel „Wenn die übergeordnete Spanne Stichproben enthält, dann die aktuelle Spanne erfassen; andernfalls 50% der Spannen erfassen“. In diesem Szenario gilt Folgendes:

  • Die Stammspan bestimmt, ob alle Spans im Trace in die Stichprobe aufgenommen werden.
  • Wenn die Stammspan erfasst wird, werden alle Spans im Trace erfasst. Daher ist der Trace abgeschlossen.

Komponenten können ihre Stichprobenentscheidung an das untergeordnete Element weitergeben, indem sie den Kontext verwenden. Im traceparent-Header des World Wide Web Consortiums (W3C) wird beispielsweise die Stichprobenentscheidung des übergeordneten Elements im sampled-Flag gespeichert.

Verwechseln Sie die Stichprobenerhebung nicht mit der Weitergabe von Kontext. Die Stichprobenerhebung gibt an, ob eine Komponente Daten zu einer Spanne erfasst. Bei der Kontextweitergabe geht es darum, ob Informationen zur Span, z. B. die Span-ID, an untergeordnete Komponenten übergeben werden.

Stichprobenerhebungsstrategien

Stichprobenentscheidungen können entweder kopf- oder schwanzbasiert sein. Bei der headerbasierten Stichprobenerhebung wird die Stichprobenerhebungsentscheidung getroffen, wenn die Anfrage von der Komponente empfangen wird, die den Bereich verarbeitet. Bei der endebasierten Stichprobenerhebung wird die Stichprobenentscheidung erst getroffen, wenn der gesamte Trace verfügbar ist.

In der Dokumentation für verteilte Tracing-Systeme wird möglicherweise der Begriff „100-prozentige Stichprobenerhebung“ verwendet. Dieser Begriff kann sich auf einen Trace oder auf eine Komponente beziehen. Wenn dieser Wert auf einen Trace angewendet wird, bedeutet das, dass alle span-Elemente erfasst wurden, d. h., dass der Trace vollständig ist. Wenn diese Option auf eine Komponente angewendet wird, wird jede verarbeitete Spanne von der Komponente erfasst.

Kopfbasierte Stichprobenerhebung

Kopfbasierte Sampler sind in der Regel so konfiguriert, dass immer Spannen oder eine probabilistische Stichprobenstrategie verwendet werden:

  • Bei Konfigurationen vom Typ always sample werden alle Komponenten, die span-Elemente verarbeiten und Trace-Daten schreiben können, von den verarbeiteten span-Elementen gesampled. Idealerweise sind alle Traces vollständig und Sie haben die Informationen, die Sie zur Fehlerbehebung benötigen. Diese Art der Konfiguration kann dazu führen, dass Sie Kontingente oder Ihre Speicherkostenlimits überschreiten.

  • Bei der Wahrscheinlichkeitsstichprobennahme werden nicht alle Spannen ausgewählt. Das tatsächliche Verhalten bei diesem Ansatz hängt von der Implementierung der Komponente ab. Bei einigen Implementierungen haben alle Spans dieselbe Wahrscheinlichkeit, ausgewählt zu werden. In anderen Fällen wirkt sich die Stichprobenentscheidung des übergeordneten Elements darauf aus, ob eine Spanne ausgewählt wird.

Es kann sein, dass nicht alle Spannen enthalten sind. Das kann auf die Verwendung von probabilistischer Stichprobenerhebung, auf das Kontingent oder auf Komponenten zurückzuführen sein, die eine Anfrage verarbeiten, aber die Spanne nicht stichprobenartig auswerten.

Endwertbasierte Stichprobenerhebung

Cloud Trace unterstützt keine befristete Stichprobenerhebung. Stichprobenentscheidungen müssen in den Komponenten getroffen werden, die Daten an Cloud Trace senden.

Wenn Sie die endebasierte Stichprobenerhebung verwenden möchten, können Sie einen Zwischenserver verwenden, der Tracing-Informationen empfängt, die nach einer Stichprobenerhebung an Cloud Trace weitergeleitet werden. Sie können beispielsweise den OpenTelemetry Collector mit dem Tail Sampling Processor verwenden, um eine Entscheidung für die verzögerte Stichprobenerhebung zu treffen.

Wenn Sie die Stichprobenerhebung nach dem Ende der Datenerhebung verwenden möchten, beachten Sie Folgendes:

  • Sie müssen alle Spans in einem Trace speichern, bevor Sie eine Entscheidung zur Stichprobenerhebung treffen. Daher benötigen Sie möglicherweise viel temporären Speicherplatz oder es fallen andere Kosten an.
  • Im Allgemeinen müssen alle Komponenten, die Spans für den Trace generieren können, koordiniert werden. Normalerweise leiten Entwickler, die OpenTelemetry verwenden, alle SPANs mit derselben Trace-ID an denselben Collector weiter.

Stichprobenerhebung und Google Cloud-Dienste

Für jeden Google Cloud-Dienst werden eigene Stichprobenentscheidungen getroffen und nicht alle Google Cloud-Dienste werden stichprobenartig untersucht. Das bedeutet, dass ein Dienst möglicherweise nie Daten an Cloud Trace sendet.

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

  • Eine Standard-Abtastrate.
  • Ein Mechanismus, mit dem die Entscheidung des übergeordneten Elements als Hinweis verwendet wird, ob die Spanne gesampelt werden soll.
  • Maximale Abtastrate.

Wenn Sie möchten, dass ein Google Cloud-Dienst die Stichprobenerhebung unterstützt, verwenden Sie den Google Issue Tracker.

Nächste Schritte