Questo documento introduce il concetto di campionamento, che si riferisce a se i dati relativi a un intervallo vengono inviati a Cloud Trace. Quando i dati di un intervallo viene inviato a Cloud Trace, quindi l'intervallo viene campionato. Quando i dati di ogni span in una traccia vengono registrati, la traccia è completa. Tuttavia, le tracce spesso hanno intervalli mancanti perché ogni componente strumentato in un tracciamento distribuito decide autonomamente se registrare o meno e l'intervallo che sta elaborando.
Sebbene ogni componente prenda la propria decisione in merito al valore l'elaborazione è campionata, la decisione può essere influenzata dalla configurazione decisione riguardante il campionamento. Ad esempio, supponiamo che ogni componente abbia una regola che "Se l'intervallo padre è campionato, campionare l'intervallo corrente; altrimenti campionare il 50% degli intervalli". In questo scenario, vale quanto segue:
- L'intervallo principale determina se tutti gli intervalli nella traccia vengono campionati.
- Quando l'intervallo principale viene campionato, tutti gli intervalli nella traccia vengono campionati. 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. Campionamento indica se un componente registra 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 sulla testa, la decisione sul campionamento viene presa quando la richiesta viene ricevuto 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 riguardare una traccia o una di strumento di authoring. Quando viene applicato a una traccia, significa che tutti gli intervalli sono stati campionati, o in modo equivalente, che la traccia sia completa. Se applicato a un componente, significa che il componente campiona ogni intervallo elaborato.
Campionamento basato sulla testa
I campionatori basati sulla testa sono generalmente configurati per campionare sempre intervalli o per utilizza una strategia di campionamento probabilistica:
Con configurazioni sempre di esempio, tutti i componenti degli intervalli di un servizio e che possa scrivere dati di traccia, campionare gli intervalli che e il processo di sviluppo. 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 i limiti del 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 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. Ciò potrebbe essere previsto a causa dell'uso il campionamento probabilistico o potrebbe essere dovuto alla quota o a componenti elaborare una richiesta ma non campionare l'intervallo.
Campionamento basato sulla coda
Cloud Trace non supporta il campionamento basato su coda. campionamento le decisioni devono essere prese nei componenti che inviano dati a Cloud Trace.
Se vuoi utilizzare il campionamento basato sulla coda, puoi usare un intermediario server che riceve informazioni di tracciamento che inoltrano dati a Cloud Trace dopo aver preso una decisione sul campionamento. Ad esempio, puoi utilizzare OpenTelemetry Collector con il processore di campionamento della coda per prendere una decisione ritardata sul campionamento.
Se prevedi di utilizzare il campionamento della coda, tieni presente quanto segue:
- Devi archiviare tutti gli intervalli in una traccia prima di prendere una decisione sul campionamento. Potresti quindi avere bisogno di una grande quantità di spazio di archiviazione temporaneo o sostenere altri costi generali.
- In generale, tutti i componenti che possono generare intervalli per la traccia devono coordinata. In genere, gli sviluppatori che utilizzano OpenTelemetry instradano tutti gli intervalli per lo stesso ID traccia allo stesso raccoglitore.
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. Ciò significa che un servizio potrebbe non inviare mai in Cloud Trace.
Quando il campionamento è supportato da un servizio Google Cloud, in genere questo servizio implementa quanto segue:
- Una frequenza di campionamento predefinita.
- Un meccanismo per utilizzare la decisione di campionamento del genitore come suggerimento per decidere se campionare l'intervallo.
- Frequenza di campionamento massima.
Per richiedere che un servizio Google Cloud aggiunga il supporto per il campionamento, utilizzare Google Issue Tracker.
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 è l'utente a decidere quale approccio di campionamento è più adatto alle proprie esigenze in fase di sviluppo di cui è stato eseguito il deployment:
Documentazione del servizio Google Cloud: