Il campionamento delle tracce conserva solo le tracce di richiesta selezionate, riducendo lo spazio di archiviazione e l'elaborazione, ma rischiando di perdere l'esatto percorso del flusso di lavoro necessario per la diagnosi.
Una richiesta IA locale può attraversare un gateway, un router di modelli, un servizio di ricerca vettoriale, una sandbox per gli strumenti e un bridge per la domotica, producendo molti span per interazione. Registrare indefinitamente ogni percorso è costoso. Il campionamento decide quali tracce complete o osservazioni parziali conservare, ma il momento e i criteri di tale decisione determinano se un timeout raro, una chiamata a uno strumento negata o un fallback silenzioso rimangono visibili.
Il campionamento delle tracce seleziona la cronologia delle richieste, non i singoli dati
Una traccia rappresenta una richiesta tramite span correlati distribuiti tra più servizi. Il campionamento decide se registrare o esportare quella cronologia della richiesta, generalmente in base a probabilità, attributi o criteri di policy. Metriche e log possono comunque esistere, ma non possono ricostruire lo stesso percorso causale se non conservano identificatori compatibili.
La documentazione sui concetti di campionamento distingue il campionamento head, deciso quasi all'inizio della richiesta, dal campionamento tail, deciso dopo l'arrivo della maggior parte degli span. Il campionamento head è semplice ed economico, mentre il campionamento tail può conservare le tracce in base alla latenza finale, allo stato di errore o agli attributi scoperti in seguito.
Il campionamento modifica quindi la copertura diagnostica, non il comportamento dell'applicazione. Una richiesta può completarsi o fallire nello stesso modo indipendentemente dal fatto che la relativa traccia venga conservata, mentre dopo l'evento l'operatore vede una quantità diversa di elementi di prova. Questa distinzione rimane visibile durante i successivi test domestici.
Le decisioni head non possono rilevare un errore che si verifica in seguito
Una decisione basata sulla probabilità presa sullo span radice non può sapere che la chiamata finale a uno strumento andrà in timeout o che un servizio downstream restituirà un errore. Se la richiesta viene scartata all'inizio, tutti gli span successivi potrebbero non essere disponibili, anche se l'evento è importante dal punto di vista operativo.
Un esempio di conservazione tail-based di OpenTelemetry descrive la conservazione delle attività non riuscite con un approccio orientato al tail. L'esempio illustra il vantaggio centrale: la decisione può utilizzare l'esito completato invece di stimare l'importanza in base agli attributi presenti all'inizio.
Il campionamento head funziona comunque per individuare tendenze generali delle prestazioni quando le frequenze sono stabili e gli identificatori vengono propagati in modo coerente. Diventa rischioso quando gli errori sono rari, concentrati in un percorso a basso volume o rilevabili solo dopo diversi passaggi dell'agente.
Le policy tail aggiungono stato, ritardi e propri punti ciechi
Il campionamento tail memorizza temporaneamente gli span fino alla chiusura di una finestra decisionale, li raggruppa per ID della traccia e applica policy ordinate. Span in ritardo, routing suddiviso, riavvii del collector, pressione sulla memoria o una finestra più breve del flusso di lavoro possono lasciare il campionatore con una traccia incompleta.
I requisiti del collector avvertono che tutti gli span di una traccia devono raggiungere la stessa istanza del collector e che gli span in attesa consumano memoria. Questi requisiti sono importanti su un piccolo server domestico, dove il processo di osservabilità compete con l'inferenza per la RAM.
Il limite dell'errore è rappresentato da un flusso di lavoro in cui lo span dell'errore decisivo arriva dopo che il campionatore ha deciso, raggiunge un altro collector o non contiene l'attributo di stato utilizzato dalla policy. Il campionamento tail migliora la selezione solo quando anche l'assemblaggio della traccia rimane affidabile.
Esegui un test di copertura delle tracce con errori noti
Crea flussi di lavoro controllati che falliscano nel router, nel servizio di recupero, nel server dei modelli, nella sandbox degli strumenti e nella chiamata finale alla domotica. Assegna un ID di correlazione di test, registra la sequenza di span prevista e ripeti ogni errore abbastanza volte da esercitare le policy di probabilità e tail configurate.
Utilizza la mappa dei servizi nel tracing end-to-end per verificare che ogni traccia di errore conservata contenga la radice, le chiamate intermedie, l'errore finale e gli attributi di policy pertinenti. Conta separatamente le richieste non riuscite in una metrica non campionata, così da poter rilevare le tracce mancanti invece di scambiarle per errori assenti.
Considera il test superato solo quando gli errori critici vengono conservati alla frequenza richiesta e le tracce incomplete sono misurabili in modo esplicito. Riserva le regole di campionamento sempre attivo alle classi di errore di alto valore, limita la memoria del buffer e testa i riavvii del collector e le condizioni di arrivo tardivo degli span prima di affidarti alle tracce per ricostruire gli incidenti.
Hub Tecnologico e AI
Altro da leggere

Un LLM locale può riprendere la generazione dopo il riavvio del processo?
Una spiegazione della ripresa della generazione degli LLM incentrata sui meccanismi, dei compromessi relativi alle risorse condivise, tre domande frequenti sul fan-out delle query...

Un server domestico può eseguire embedding e transcodifica video sulla stessa GPU integrata?
Una spiegazione basata innanzitutto sui meccanismi degli embedding condivisi della iGPU e della transcodifica, dei compromessi legati alle risorse condivise, tre domande frequenti sul...

In che modo la durata del token di accesso influisce sulla sicurezza e sulle difficoltà per le famiglie?
Una spiegazione della durata dei token di accesso basata prima di tutto sul meccanismo, dei compromessi legati alle risorse condivise, di tre domande frequenti...

