Mit der Trace-Stichprobenerhebung wird festgelegt, welche Anfragen und Spans in Cloud Trace aufgenommen werden. So können Sie Speicherkosten kontrollieren und innerhalb von Kontingenten bleiben, während Sie genügend Daten erfassen, um Leistungsprobleme zu beheben. Um ein hohes Anfragevolumen zu bewältigen, werden in Komponenten eines verteilten Tracing-Systems in der Regel nur eine Teilmenge von Traces erfasst oder die Sampling-Entscheidungen von übergeordneten Spans berücksichtigt.
Sampling unterscheidet sich von der Kontextübertragung: Beim Sampling wird gesteuert, ob für eine Komponente Spandaten erfasst werden, während bei der Kontextübertragung Trace-IDs zwischen Komponenten übergeben werden, damit gesampelte Spans verknüpft werden können.
Sampling-Strategien
Die Entscheidungen zur Stichprobenerhebung können entweder auf dem Head oder dem Tail basieren. Beim kopfbasierte Sampling wird die Sampling-Entscheidung 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. Auf einen Trace angewendet 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-basierte Stichprobenerhebung
Head-basierte Sampler sind in der Regel so konfiguriert, dass sie immer Spans erfassen oder eine probabilistische Sampling-Strategie verwenden:
Bei Konfigurationen mit always sample (immer Stichproben nehmen) nehmen Komponenten, die Tracedaten verarbeiten und schreiben, für jeden Span eine Stichprobe. Im Idealfall sind alle Traces vollständig und Sie haben die Informationen, die Sie zur Fehlerbehebung benötigen. Eine Konfiguration, bei der immer Stichproben verwendet werden, kann jedoch dazu führen, dass Sie Kontingente oder Ihre Speicherkostenlimits überschreiten.
Bei der probabilistischen Stichprobenerhebung werden nicht alle Spannen berücksichtigt. Das tatsächliche Verhalten bei diesem 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 die Stichprobenentscheidung des übergeordneten Elements davon ab, ob ein Span als Stichprobe ausgewählt wird.
Ein Trace enthält möglicherweise nicht alle Spans. Wenn Sie probabilistisches Sampling verwenden, das Kontingent überschreiten oder Komponenten verwenden, die Spannen verarbeiten, aber nicht samplen, sind unvollständige Traces zu erwarten.
Tail-basierte Stichprobennahme
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 die Tail-basierte Stichprobenerhebung verwenden, können Sie auch einen Zwischenserver verwenden, um Trace-Daten zu empfangen, Stichprobenentscheidungen zu treffen und Stichproben-Spans an Trace weiterzuleiten. Sie können beispielsweise einen 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 berücksichtigen:
- 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.
Komponenten treffen Abtastentscheidungen
Jede Komponente entscheidet selbst, ob sie den zu verarbeitenden Span stichprobenartig erfasst. Die Sampling-Entscheidung des übergeordneten Elements, die der Komponente möglicherweise über den Trace-Kontext zur Verfügung steht, kann jedoch die Entscheidung der Komponente beeinflussen. Anwendungen, die den traceparent-Header verwenden, können die Sampling-Entscheidung des übergeordneten Elements mit dem sampled-Flag übergeben.
Angenommen, jede Komponente hat eine Regel, die besagt: „Wenn der übergeordnete Span erfasst wird, erfasse den aktuellen Span. Andernfalls erfasse 50% der Spans.“ 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. Daher ist der Trace vollständig.
Stichprobenerhebung und Google Cloud -Dienste
Jeder Google Cloud Dienst trifft seine eigenen Entscheidungen zur Stichprobenerhebung. Nicht alle Google Cloud Dienste führen Stichprobenerhebungen durch. 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 wird, ob der untergeordnete 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
Informationen 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: