Il campionamento delle tracce determina quali richieste e intervalli vengono inseriti in Cloud Trace, consentendoti di controllare i costi di archiviazione e rispettare le quote, acquisendo al contempo dati sufficienti per risolvere i problemi di prestazioni. Per gestire volumi elevati di richieste, i componenti di un sistema di tracciamento distribuito in genere campionano solo un sottoinsieme di tracce o seguono le decisioni di campionamento degli intervalli padre.
Il campionamento è diverso dalla propagazione del contesto: il campionamento controlla se un componente registra i dati degli span, mentre la propagazione del contesto trasferisce gli identificatori di traccia tra i componenti in modo che gli span campionati possano essere collegati.
Strategie di campionamento
Le decisioni di campionamento possono essere basate sull'intestazione 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 Campiona sempre, i componenti che elaborano e scrivono i dati di traccia campionano ogni span. Idealmente, tutte le tracce sono complete e quindi hai le informazioni necessarie per risolvere i problemi relativi agli errori. Tuttavia, una configurazione di campionamento continuo 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 uno span.
Una traccia potrebbe non contenere tutti gli intervalli. Se utilizzi il campionamento probabilistico, superi la quota o utilizzi componenti che elaborano ma non campionano gli span, sono previste tracce incomplete.
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 utilizzi il campionamento basato sulla coda, puoi anche utilizzare un server intermedio per ricevere i dati di traccia, valutare le decisioni di campionamento e inoltrare gli span campionati a Trace. Ad esempio, puoi utilizzare un OpenTelemetry Collector 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 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.
I componenti prendono decisioni di campionamento
Ogni componente decide autonomamente se campionare lo span che sta elaborando. Tuttavia, la decisione di campionamento del genitore, che potrebbe essere disponibile
per il componente tramite il contesto della traccia, può influenzare la decisione del componente. Le applicazioni che utilizzano l'intestazione traceparent possono trasmettere la decisione di campionamento del genitore utilizzando il flag sampled.
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.
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. 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
Per una discussione su come scegliere una strategia di campionamento in base al nome dell'intervallo, consulta Campionamento remoto Jaeger.
Ti consigliamo di esaminare la seguente documentazione open source per aiutarti a determinare quale approccio di campionamento è più adatto alle tue applicazioni in fase di sviluppo e di deployment:
Documentazione del servizioGoogle Cloud :