Campionamento delle Trace

Questo documento introduce il concetto di campionamento, che si riferisce all'invio o meno dei dati di un intervallo a Cloud Trace. Quando i dati di un intervallo vengono inviati a Cloud Trace, l'intervallo viene campionato. Quando vengono registrati i dati per ogni intervallo in una traccia, la traccia è completa. Tuttavia, le tracce spesso hanno span mancanti perché ogni componente strumentato in un sistema di tracciamento distribuito decide in modo indipendente se registrare o meno lo span che sta elaborando.

Sebbene ogni componente prenda la propria decisione in merito al campionamento dello span che sta elaborando, questa decisione può essere influenzata dalla decisione di campionamento del componente padre. Ad esempio, supponiamo che ogni componente abbia una regola che dice: "se lo span principale viene campionato, campiona lo span corrente; altrimenti, campiona il 50% degli span". In questo scenario, è vero quanto segue:

  • Lo span radice determina se tutti gli span nella traccia vengono campionati.
  • Quando viene campionato lo span radice, vengono campionati tutti gli span nella traccia. Pertanto, la traccia è completa.

I componenti possono trasmettere la propria decisione di campionamento al componente secondario utilizzando il contesto. Ad esempio, nell'intestazione traceparent del World Wide Web Consortium (W3C), il flag sampled memorizza la decisione di campionamento del parent.

Non confondere il campionamento con la propagazione del contesto. Il campionamento indica se un componente registra i dati relativi a un intervallo. La propagazione del contesto si riferisce al fatto che le informazioni sullo span, come l'ID span, vengano trasmesse ai componenti secondari.

Strategie di campionamento

Le decisioni di campionamento possono essere basate sulla testa o sulla coda. Nel campionamento basato sull'intestazione, la decisione di campionamento viene presa quando la richiesta viene ricevuta dal componente che elabora lo span. Nel campionamento basato sulla coda, la decisione di campionamento viene ritardata fino a quando non è disponibile l'intera traccia.

Potresti trovare la frase "campionamento al 100%" nella documentazione dei sistemi di tracciamento distribuito. Questa frase potrebbe essere applicata a una traccia o a un componente. Se applicato a una traccia, significa che tutti gli span sono stati campionati o, equivalentemente, che la traccia è completa. Se applicato a un componente, significa che il componente campiona ogni intervallo che elabora.

Campionamento basato sulla testa

I campionatori basati sull'intestazione sono in genere configurati per campionare sempre gli span o per utilizzare una strategia di campionamento probabilistico:

  • Con le configurazioni sempre campionamento, tutti i componenti che coprono il servizio e che possono scrivere dati di traccia, campionano gli span che elaborano. Idealmente, tutte le tracce sono complete e quindi hai le informazioni necessarie per risolvere i problemi relativi agli errori. Questo tipo di configurazione potrebbe causare il superamento delle quote o dei limiti di costo dello spazio di archiviazione.

  • Con il campionamento probabilistico, non tutti gli intervalli vengono campionati. Il comportamento effettivo di questo approccio dipende dall'implementazione del componente. In alcune implementazioni, tutti gli span hanno la stessa probabilità di essere campionati. In altri, la decisione di campionamento del genitore influenza il campionamento di un intervallo.

Le tracce potrebbero non contenere tutti gli intervalli. Questo potrebbe essere previsto a causa dell'utilizzo del campionamento probabilistico oppure potrebbe essere dovuto alla quota o a componenti che elaborano una richiesta, ma non campionano lo span.

Campionamento basato sulla coda

Cloud Trace non supporta il campionamento basato sulla coda; le decisioni di campionamento devono essere prese nei componenti che inviano dati a Cloud Trace.

Se vuoi utilizzare il campionamento basato sulla coda, puoi utilizzare un server intermedio che riceve le informazioni di tracciamento che inoltra i dati a Cloud Trace dopo aver preso una decisione di campionamento. Ad esempio, puoi utilizzare OpenTelemetry Collector con Tail Sampling Processor per prendere una decisione di campionamento ritardata.

Se prevedi di utilizzare il campionamento della coda, tieni presente quanto segue:

  • Devi archiviare tutti gli span in una traccia prima di prendere una decisione di campionamento. Pertanto, potresti aver bisogno di una grande quantità di spazio di archiviazione temporaneo o sostenere altri costi generali.
  • In generale, tutti i componenti che possono generare span per una traccia devono coordinarsi. In genere, gli sviluppatori che utilizzano OpenTelemetry indirizzano tutti gli span per lo stesso ID traccia allo stesso agente di raccolta.

Campionamento e Google Cloud servizi

Ogni servizio Google Cloud prende le proprie decisioni di campionamento e non tutti i servizi Google Cloud eseguono il campionamento. ovvero un servizio potrebbe non inviare mai dati a Cloud Trace.

Quando il campionamento è supportato da un servizio Google Cloud , questo in genere implementa quanto segue:

  • Una frequenza di campionamento predefinita.
  • Un meccanismo per utilizzare la decisione di campionamento del genitore come suggerimento per decidere se campionare lo span.
  • Frequenza di campionamento massima.

Per richiedere a un servizio Google Cloud di aggiungere il supporto per il campionamento, utilizza Google Issue Tracker.

Passaggi successivi