Campionamento delle Trace

Il campionamento delle tracce determina quali richieste e intervalli vengono importati da Cloud Trace, aiutandoti a controllare i costi di archiviazione e a rispettare le quote, acquisendo al contempo dati sufficienti per risolvere i problemi di prestazioni delle applicazioni. Quando ogni intervallo in una richiesta end-to-end viene registrato, la traccia è completa. Tuttavia, per gestire volumi di richieste elevati, i componenti di un sistema di tracciamento distribuito in genere campionano solo un sottoinsieme di tracce o seguono le decisioni di campionamento degli intervalli principali.

Il campionamento è diverso dalla propagazione del contesto. Il campionamento controlla se un componente registra i dati dell'intervallo. Al contrario, la propagazione del contesto passa gli identificatori di traccia tra i componenti in modo che gli intervalli campionati possano essere collegati tra loro.

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 l'intervallo. Nel campionamento basato sulla coda, la decisione di campionamento viene ritardata fino a quando l'intera traccia non è disponibile.

Nella documentazione dei sistemi di tracciamento distribuito potresti trovare la frase "campionamento al 100%". Questa frase potrebbe essere applicata a una traccia o a un componente. Se applicata a una traccia, significa che tutti gli intervalli sono stati campionati o, in modo equivalente, che la traccia è completa. Se applicata a un componente, significa che il componente campiona ogni intervallo che elabora.

Campionamento basato sull'intestazione

I campionatori basati sull'intestazione sono in genere configurati per campionare sempre gli intervalli 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 intervallo. Idealmente, tutte le tracce sono complete e quindi hai le informazioni necessarie per risolvere i problemi relativi agli errori. Tuttavia, una configurazione di campionamento sempre attivo potrebbe farti superare le quote o i limiti di 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 altre, la decisione di campionamento del parent influisce sul campionamento di un intervallo.

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 intervalli, 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 i 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 intervalli campionati a Trace. Ad esempio, puoi utilizzare un OpenTelemetry Collector con il processore di campionamento della coda per prendere una decisione di campionamento ritardata.

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 di campionamento. Pertanto, potresti aver bisogno di una grande quantità di spazio di archiviazione temporaneo o incorrere in altri sovraccarichi.
  • In generale, tutti i componenti che possono generare intervalli per una traccia devono coordinarsi. In genere, gli sviluppatori che utilizzano OpenTelemetry indirizzano tutti gli intervalli per lo stesso ID traccia allo stesso collector.

I componenti prendono decisioni di campionamento

Ogni componente prende la propria decisione in merito al campionamento dell'intervallo che sta elaborando. Tuttavia, la decisione di campionamento del parent, che potrebbe essere disponibile per il componente tramite il contesto di traccia, può influenzare la decisione del componente. Le applicazioni che utilizzano l traceparent'intestazione possono passare la decisione di campionamento del parent utilizzando il flag sampled.

Ad esempio, supponiamo che ogni componente abbia una regola che dice "se l'intervallo parent viene campionato, campiona l'intervallo corrente; in caso contrario, campiona il 50% degli intervalli". In questo scenario, vale quanto segue:

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

Campionamento e Google Cloud servizi

Ogni Google Cloud servizio prende le proprie decisioni di campionamento, e non tutti i Google Cloud servizi campionano. Ciò significa che un servizio potrebbe non inviare mai dati a Cloud Trace.

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

  • Una frequenza di campionamento predefinita.
  • Un meccanismo per utilizzare la decisione di campionamento del parent come suggerimento per il campionamento dell'intervallo.
  • Frequenza di campionamento massima.

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

Passaggi successivi