Questo documento introduce il concetto di campionamento, che indica se i dati di un intervallo vengono inviati a Cloud Trace. Quando i dati di un intervallo vengono inviati a Cloud Trace, l'intervallo viene campionato. Quando i dati di ogni span in una traccia vengono registrati, la traccia è completa. Tuttavia, spesso le tracce hanno degli elementi mancanti perché ogni componente sottoposto a ispezione in un sistema di monitoraggio distribuito decide in modo indipendente se registrare o meno l'elemento in fase di elaborazione.
Sebbene ogni componente prenda la propria decisione in merito al campionamento dell'intervallo in fase di elaborazione, questa decisione può essere influenzata dalla decisione di campionamento del componente principale. Ad esempio, supponiamo che ogni componente abbia una regola che dica "se lo span principale viene campionato, campionato lo span corrente; altrimenti, campionato il 50% degli span". In questo scenario, vale quanto segue:
- L'intervallo principale determina se tutti gli intervalli della traccia vengono campionati.
- Quando viene campionato l'intervallo principale, vengono campionati tutti gli intervalli della traccia. Pertanto, la traccia è completa.
I componenti possono trasmettere la 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 proprietario.
Non confondere il campionamento con la propagazione del contesto. Il campionamento si riferisce al fatto che un componente registri i dati relativi a un intervallo. La propagazione del contesto si riferisce al fatto che le informazioni relative allo spazio, ad esempio l'ID, vengono trasmesse ai componenti secondari.
Strategie di campionamento
Le decisioni di campionamento possono essere basate sui valori estremi superiori o inferiori. Nel campionamento basato sull'elemento principale, la decisione di campionamento viene presa quando la richiesta viene ricevuta dal componente che elabora l'intervallo. 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 per i sistemi di monitoraggio distribuiti. 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, in modo equivalente, che la traccia è completa. Se applicato a un componente, significa che il componente campiona ogni intervallo elaborato.
Campionamento basato sulla testa
In genere, i sampler basati su intestazioni sono configurati per campionare sempre gli intervalli o per utilizzare una strategia di campionamento probabilistica:
Con le configurazioni always sample, tutti i componenti coperti dal servizio e che possono scrivere dati di traccia, campionati gli intervalli che elaborano. Idealmente, tutte le tracce sono complete, e quindi hai le informazioni necessarie per risolvere i problemi. Questo tipo di configurazione potrebbe causare il superamento delle quote o dei limiti di costo dello spazio di archiviazione.
Con il campionamento probabilistico, non vengono campionati tutti gli intervalli. Il comportamento effettivo di questo approccio dipende dall'implementazione del componente. In alcune implementazioni, tutti gli intervalli hanno la stessa probabilità di essere campionati. In altri casi, la decisione di campionamento del genitore influisce sul fatto che un intervallo venga campionato o meno.
Le tracce potrebbero non contenere tutti gli intervalli. Questo potrebbe essere dovuto all'utilizzo del campionamento probabilistico, alla quota o a componenti che elaborano una richiesta, ma non campionano l'intervallo.
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 monitoraggio che trasmettono i dati a Cloud Trace dopo aver preso una decisione di campionamento. Ad esempio, puoi utilizzare il collezionista OpenTelemetry con il Processore di campionamento finale per prendere una decisione di campionamento ritardata.
Se prevedi di utilizzare il campionamento della coda, tieni presente quanto segue:
- Devi memorizzare tutti gli span in una traccia prima di prendere una decisione di campionamento. Di conseguenza, potresti richiedere una grande quantità di spazio di archiviazione temporaneo o sostenere altri costi.
- In generale, tutti i componenti che possono generare intervalli per la traccia devono essere coordinati. In genere, gli sviluppatori che utilizzano OpenTelemetry indirizzano tutti gli span per lo stesso ID traccia allo stesso collector.
Campionamento e servizi Google Cloud
Ogni servizio Google Cloud prende le proprie decisioni di campionamento e non tutti i servizi Google Cloud eseguono il campionamento. In altre parole, un servizio potrebbe non inviare mai dati a Cloud Trace.
Quando il campionamento è supportato da un servizio Google Cloud, questo servizio solitamente implementa quanto segue:
- Una frequenza di campionamento predefinita.
- Un meccanismo per utilizzare la decisione di campionamento del genitore come suggerimento per decidere se eseguire il campionamento dell'intervallo.
- Frequenza di campionamento massima.
Per richiedere l'aggiunta del supporto per il campionamento a un servizio Google Cloud, utilizza il tracker dei problemi di Google.
Passaggi successivi
Per una discussione su come scegliere una strategia di campionamento in base al nome dell'intervallo, consulta Campionamento remoto di Jaeger.
Ti consigliamo di esaminare la seguente documentazione open source per aiutarti a determinare l'approccio di campionamento più adatto alle tue applicazioni in fase di sviluppo e di implementazione:
Documentazione del servizio Google Cloud: