In diesem Dokument wird das Konzept des Sampling eingeführt, das sich darauf bezieht, 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 erfasst. Wenn Daten für jeden Bereich in einem Trace aufgezeichnet werden, ist der Trace vollständig. Traces haben jedoch häufig fehlende Spans, da jede instrumentierte Komponente in einem System für verteiltes Tracing unabhängig entscheidet, ob der verarbeitete Span aufgezeichnet werden soll.
Jede Komponente trifft ihre eigene Entscheidung darüber, ob der zu verarbeitende Bereich Stichproben enthält. Diese Entscheidung kann jedoch durch die Sampling-Entscheidung des übergeordneten Elements beeinflusst werden. Angenommen, jede Komponente hat eine Regel, die besagt: „Wenn der übergeordnete Span als Stichprobe verwendet wird, verwende den aktuellen Span als Stichprobe. Andernfalls verwende 50% der Spans als Stichprobe.“ In diesem Szenario gilt Folgendes:
- Der Stamm-Span bestimmt, ob alle Spans im Trace erfasst werden.
- Wenn der Stamm-Span erfasst wird, werden alle Spans im Trace erfasst. Der Trace ist daher vollständig.
Komponenten können ihre Sampling-Entscheidung mithilfe von Kontext an das untergeordnete Element weitergeben.
Im traceparent-Header des World Wide Web Consortium (W3C) wird beispielsweise mit dem sampled-Flag die Sampling-Entscheidung des übergeordneten Elements gespeichert.
Verwechseln Sie Sampling nicht mit Kontextweitergabe. Die Stichprobenerhebung gibt an, ob eine Komponente Daten zu einem Span aufzeichnet. Die Kontextweitergabe bezieht sich darauf, ob Informationen zum Span, z. B. die Span-ID, an untergeordnete Komponenten übergeben werden.
Sampling-Strategien
Die Entscheidungen zur Stichprobenerhebung können entweder auf dem Head oder dem Tail basieren. Beim head-based sampling wird die Entscheidung zum Sampling getroffen, wenn die Anfrage von der Komponente empfangen wird, die den Span verarbeitet. Beim Tail-Based Sampling wird die Sampling-Entscheidung verzögert, bis der gesamte Trace verfügbar ist.
In der Dokumentation für Systeme zur verteilten Ablaufverfolgung wird möglicherweise der Begriff „100% Sampling“ verwendet. Diese Formulierung kann sich auf einen Trace oder eine Komponente beziehen. Wenn sie auf einen Trace angewendet wird, bedeutet das, dass alle Spans erfasst wurden oder, was dasselbe ist, dass der Trace vollständig ist. Wenn sie auf eine Komponente angewendet wird, bedeutet das, dass die Komponente jede verarbeitete Spanne in Stichproben erfasst.
Head-basiertes Sampling
Kopfbasierte Sampler werden in der Regel so konfiguriert, dass immer Spans erfasst werden oder eine probabilistische Sampling-Strategie verwendet wird:
Bei Konfigurationen mit always sample werden alle Komponenten, die Spannen verarbeiten und Tracedaten schreiben können, für die verarbeiteten Spannen Stichproben genommen. Im Idealfall sind alle Traces vollständig und Sie haben daher die Informationen, die Sie zur Fehlerbehebung benötigen. Bei dieser Art der Konfiguration kann es passieren, dass Sie Kontingente oder Ihre Speicherbeschränkungen überschreiten.
Bei der probabilistischen Stichprobenerhebung werden nicht alle Spannen berücksichtigt. Das tatsächliche Verhalten für diesen Ansatz hängt von der Implementierung der Komponente ab. In einigen Implementierungen haben alle Spannen dieselbe Wahrscheinlichkeit, als Stichprobe ausgewählt zu werden. In anderen Fällen hängt es von der Stichprobenentscheidung des übergeordneten Elements ab, ob ein Bereich in die Stichprobe aufgenommen wird.
Traces enthalten möglicherweise nicht alle Spans. Das kann an der Verwendung von probabilistischem Sampling liegen oder an Kontingenten oder Komponenten, die eine Anfrage verarbeiten, aber den Bereich nicht samplen.
Tail-basiertes Sampling
Cloud Trace unterstützt kein Tail-based Sampling. Sampling-Entscheidungen müssen in den Komponenten getroffen werden, die Daten an Cloud Trace senden.
Wenn Sie Tail-basiertes Sampling verwenden möchten, können Sie einen Zwischenserver verwenden, der Tracing-Informationen empfängt und Daten nach einer Sampling-Entscheidung an Cloud Trace weiterleitet. Sie können beispielsweise den OpenTelemetry Collector mit dem Tail Sampling Processor verwenden, um eine verzögerte Sampling-Entscheidung zu treffen.
Wenn Sie Tail-Sampling verwenden möchten, sollten Sie Folgendes beachten:
- Sie müssen alle Spans in einem Trace speichern, bevor Sie eine Sampling-Entscheidung treffen. Daher benötigen Sie möglicherweise viel temporären Speicherplatz oder es fallen andere Gemeinkosten an.
- Im Allgemeinen müssen alle Komponenten, die Spans für einen 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.
Stichprobenerhebung und Google Cloud Dienste
Jeder Google Cloud Dienst trifft seine eigenen Entscheidungen zur Stichprobenerhebung. Nicht alle Google Cloud Dienste erheben Stichproben. Das bedeutet, dass ein Dienst möglicherweise nie Daten an Cloud Trace sendet.
Wenn Sampling von einem Google Cloud Dienst unterstützt wird, implementiert dieser Dienst in der Regel Folgendes:
- Eine Standard-Stichprobenrate.
- Ein Mechanismus, mit dem die Sampling-Entscheidung des übergeordneten Spans als Hinweis darauf verwendet werden kann, ob der Span gesampelt werden soll.
- Maximale Stichprobenrate.
Wenn Sie möchten, dass ein Google Cloud -Dienst Unterstützung für das Sampling hinzufügt, verwenden Sie die Google-Problemverfolgung.
Nächste Schritte
Eine Erläuterung dazu, wie Sie eine Sampling-Strategie nach Spannenname auswählen können, finden Sie unter Jaeger-Remote-Sampling.
Wir empfehlen Ihnen, die folgende Open-Source-Dokumentation zu lesen, um herauszufinden, welcher Sampling-Ansatz für Ihre in der Entwicklung befindlichen und bereitgestellten Anwendungen am besten geeignet ist:
Google Cloud Dienstdokumentation: