Campionamento delle Trace

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

Sebbene ogni componente prenda la propria decisione in merito al campionamento dell'intervallo che sta elaborando, tale decisione può essere influenzata dalla decisione di campionamento dell'elemento padre. Ad esempio, supponiamo che ogni componente abbia una regola che indica "se l'intervallo principale viene campionato, campiona l'intervallo corrente. In caso contrario, campiona il 50% degli intervalli". In questo caso, si verifica quanto segue:

  • L'intervallo radice determina se tutti gli intervalli nella traccia vengono campionati.
  • Quando viene campionato l'intervallo principale, vengono campionati tutte le sezioni nella traccia. Pertanto, la traccia è completa.

I componenti possono passare la decisione relativa al campionamento al bambino utilizzando il contesto. Ad esempio, nell'intestazione traceparent del World Wide Web Consortium (W3C), il flag sampled memorizza la decisione di campionamento della risorsa principale.

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 passaggio delle informazioni sull'intervallo, ad esempio l'ID intervallo, ai componenti figlio.

Strategie di campionamento

Le decisioni a livello di campionamento possono essere basate sulla testa o sulla coda. Nel campionamento basato su testi, la decisione sul campionamento viene presa quando la richiesta viene ricevuta dal componente che elabora l'intervallo. Nel campionamento basato su coda, la decisione relativa al campionamento viene ritardata fino a quando non è disponibile l'intera traccia.

Potresti vedere la frase "campionamento al 100%" nella documentazione per i sistemi di tracciamento distribuiti. Questa frase può essere riferita a una traccia o a un componente. Quando viene applicata a una traccia, significa che tutti gli intervalli sono stati campionati o, in modo equivalente, che la traccia è completa. Quando applicato a un componente, significa che il componente campiona ogni intervallo elaborato.

Campionamento basato sulla testa

I campionamenti basati sulla testa sono generalmente configurati per campionare sempre gli intervalli o per utilizzare una strategia di campionamento probabilistica:

  • Con le configurazioni sempre di esempio, tutti i componenti coperti dal servizio e in grado di scrivere dati di traccia campionano gli intervalli che elaborano. Idealmente, tutte le tracce sono complete e di conseguenza tu disponi delle informazioni necessarie per risolvere gli errori. Questo tipo di configurazione potrebbe causare il superamento delle quotas o dei limiti del costo 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, la decisione relativa al campionamento da parte del genitore influenza il campionamento di un intervallo.

Le tracce potrebbero non contenere tutti gli intervalli. Ciò potrebbe essere previsto a causa dell'uso del campionamento probabilistica oppure 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 su coda; le decisioni di campionamento devono essere prese nei componenti che inviano dati a Cloud Trace.

Se vuoi utilizzare il campionamento basato su coda, puoi utilizzare un server intermedio che riceve informazioni di tracciamento che inoltra i 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 sul campionamento ritardata.

Se prevedi di utilizzare il campionamento code, considera quanto segue:

  • Devi archiviare tutti gli intervalli in una traccia prima di prendere una decisione relativa al campionamento. Di conseguenza, potresti richiedere una grande quantità di archiviazione temporanea o comportare altro overhead.
  • In generale, tutti i componenti che possono generare intervalli per l'analisi devono essere coordinati. In genere, gli sviluppatori che utilizzano OpenTelemetry instradano tutte le sezioni per lo stesso ID traccia allo stesso raccoglitore.

Campionamento e servizi Google Cloud

Ogni servizio Google Cloud prende le proprie decisioni in merito al campionamento, e non tutti i servizi Google Cloud sono campioni. ovvero un servizio non invia mai dati a Cloud Trace.

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

  • Una frequenza di campionamento predefinita.
  • Un meccanismo per utilizzare la decisione di campionamento del padre come suggerimento per capire se campionare l'intervallo.
  • Frequenza di campionamento massima.

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

Passaggi successivi