- quali strumenti hanno chiamato
- quanto tempo ha impiegato ogni richiesta al modello
- quanti token sono stati spesi
- dove si sono verificati i guasti
Come la telemetria fluisce dall’SDK
L’Agent SDK esegue il Claude Code CLI come processo figlio e comunica con esso tramite una pipe locale. Il CLI ha la strumentazione OpenTelemetry integrata: registra span attorno a ogni richiesta al modello e esecuzione dello strumento, emette metriche per i contatori di token e costo, ed emette eventi di log strutturati per i prompt e i risultati degli strumenti. L’SDK non produce telemetria propria. Invece, passa la configurazione al processo CLI, e il CLI esporta direttamente al tuo collector. La configurazione viene passata come variabili di ambiente. Per impostazione predefinita, il processo figlio eredita l’ambiente della tua applicazione, quindi puoi configurare la telemetria in uno di due posti:- Ambiente del processo: imposta le variabili nella tua shell, container o orchestrator prima che la tua applicazione si avvii. Ogni chiamata
query()le raccoglie automaticamente senza alcun cambio di codice. Questo è l’approccio consigliato per le distribuzioni in produzione. - Opzioni per chiamata: imposta le variabili in
ClaudeAgentOptions.env(Python) ooptions.env(TypeScript). Usa questo quando diversi agenti nello stesso processo hanno bisogno di impostazioni di telemetria diverse. In Python,envviene unito sopra l’ambiente ereditato. In TypeScript,envsostituisce completamente l’ambiente ereditato, quindi includi...process.envnell’oggetto che passi.
| Segnale | Cosa contiene | Abilita con |
|---|---|---|
| Metrics | Contatori per token, costo, sessioni, righe di codice e decisioni degli strumenti | OTEL_METRICS_EXPORTER |
| Log events | Record strutturati per ogni prompt, richiesta API, errore API e risultato dello strumento | OTEL_LOGS_EXPORTER |
| Traces | Span per ogni interazione, richiesta al modello, chiamata dello strumento e hook (beta) | OTEL_TRACES_EXPORTER più CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1 |
Abilita l’esportazione della telemetria
La telemetria è disattivata finché non impostiCLAUDE_CODE_ENABLE_TELEMETRY=1 e scegli almeno un esportatore. La configurazione più comune invia tutti e tre i segnali su OTLP HTTP a un collector.
L’esempio seguente imposta le variabili in un dizionario e le passa attraverso options.env. L’agente esegue un singolo compito e il CLI esporta span, metriche ed eventi al collector in collector.example.com mentre il loop consuma il flusso di risposta:
options.env.
L’esportatore
console scrive la telemetria su standard output, che l’SDK utilizza
come canale di messaggi. Non impostare console come valore di esportatore quando esegui
attraverso l’SDK. Per ispezionare la telemetria localmente, punta
OTEL_EXPORTER_OTLP_ENDPOINT a un collector locale o a un container
Jaeger all-in-one.Scarica la telemetria dalle chiamate di breve durata
Il CLI raggruppa la telemetria ed esporta a intervalli. All’uscita pulita del processo tenta di scaricare i dati in sospeso, ma lo scaricamento è limitato da un timeout breve, quindi gli span possono comunque essere eliminati se il collector è lento a rispondere. Se il tuo processo viene terminato prima che il CLI si arresti, tutto ciò che è ancora nel buffer batch viene perso. Abbassare gli intervalli di esportazione riduce entrambe le finestre. Per impostazione predefinita, le metriche esportano ogni 60 secondi e le tracce e i log esportano ogni 5 secondi. L’esempio seguente accorcia tutti e tre gli intervalli in modo che i dati raggiungano il collector mentre un compito breve è ancora in esecuzione:Leggi le tracce dell’agente
Le tracce ti danno la vista più dettagliata di un’esecuzione dell’agente. ConCLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1 impostato, ogni passo del ciclo dell’agente diventa uno span che puoi ispezionare nel tuo backend di tracing:
claude_code.interaction: avvolge un singolo turno del ciclo dell’agente, dalla ricezione di un prompt alla produzione di una risposta.claude_code.llm_request: avvolge ogni chiamata all’API Claude, con nome del modello, latenza e conteggi dei token come attributi.claude_code.tool: avvolge ogni invocazione dello strumento, con span figlio per l’attesa dei permessi (claude_code.tool.blocked_on_user) e l’esecuzione stessa (claude_code.tool.execution).claude_code.hook: avvolge ogni esecuzione di hook. Richiede tracing beta dettagliato (ENABLE_BETA_TRACING_DETAILED=1eBETA_TRACING_ENDPOINT) in aggiunta alle variabili sopra.
llm_request, tool e hook sono figli dello span claude_code.interaction che li racchiude. Quando l’agente genera un subagente attraverso lo strumento Task, gli span llm_request e tool del subagente si annidano sotto lo span claude_code.tool dell’agente padre, quindi l’intera catena di delega appare come una traccia.
Gli span portano un attributo session.id per impostazione predefinita. Quando effettui diverse chiamate query() contro la stessa sessione, filtra su session.id nel tuo backend per vederle come una timeline. L’attributo viene omesso se OTEL_METRICS_INCLUDE_SESSION_ID è impostato su un valore falsy.
Il tracing è in beta. I nomi degli span e gli attributi possono cambiare tra le versioni. Vedi
Traces (beta) nel riferimento Monitoring
per le variabili di configurazione dell’esportatore di tracce.
Collega le tracce alla tua applicazione
L’SDK propaga automaticamente il contesto di traccia W3C nel subprocess CLI. Quando chiamiquery() mentre uno span OpenTelemetry è attivo nella tua applicazione, l’SDK inietta TRACEPARENT e TRACESTATE nell’ambiente del processo figlio, e il CLI li legge in modo che il suo span claude_code.interaction diventi un figlio del tuo span. L’esecuzione dell’agente appare quindi all’interno della traccia della tua applicazione invece che come una radice disconnessa.
Quando la propagazione del contesto di traccia è abilitata, il CLI inoltra anche TRACEPARENT a ogni comando Bash e PowerShell che esegue. Se un comando lanciato attraverso lo strumento Bash emette i suoi stessi span OpenTelemetry, quegli span si annidano sotto lo span claude_code.tool.execution che avvolge il comando.
L’iniezione automatica viene saltata quando imposti TRACEPARENT esplicitamente in options.env, quindi puoi fissare un contesto padre specifico se necessario. Le sessioni CLI interattive ignorano completamente il TRACEPARENT in entrata; solo le esecuzioni dell’Agent SDK e claude -p lo rispettano. Vedi Traces (beta) nel riferimento Monitoring per il riferimento completo di span e attributi.
Etichetta la telemetria dal tuo agente
Per impostazione predefinita, il CLI segnalaservice.name come claude-code. Se esegui diversi agenti o esegui l’SDK insieme ad altri servizi che esportano allo stesso collector, sovrascrivi il nome del servizio e aggiungi attributi di risorsa in modo da poter filtrare per agente nel tuo backend.
L’esempio seguente rinomina il servizio e allega metadati di distribuzione. Questi valori vengono applicati come attributi di risorsa OpenTelemetry su ogni span, metrica ed evento che l’agente emette:
Attribuisci le azioni ai tuoi utenti finali
Il CLI allega attributi di identità a ogni evento in base alla credenziale che utilizza per chiamare Anthropic. Quando costruisci un’applicazione che serve molti utenti finali da una distribuzione, questi attributi identificano la credenziale del tuo servizio, non l’utente finale per conto del quale l’agente ha agito. Per rendere le chiamate agli strumenti e l’attività MCP attribuibili agli utenti finali della tua applicazione, inietta l’identità dell’utente finale come attributi di risorsa su ogni chiamataquery(). Codifica in percentuale i valori prima di interpolarli, poiché OTEL_RESOURCE_ATTRIBUTES riserva virgole, spazi e segni di uguale. L’esempio seguente allega l’utente richiedente e il tenant a ogni span ed evento da una richiesta:
tool_decision, tool_result, mcp_server_connection e permission_mode_changed diventano un audit trail per utente che puoi inoltrare a una piattaforma Security Information and Event Management (SIEM). Vedi Audit security events nel riferimento Monitoring per l’elenco completo degli eventi rilevanti per la sicurezza e gli attributi che ognuno porta.
Controlla i dati sensibili nelle esportazioni
La telemetria è strutturale per impostazione predefinita. Durate, nomi dei modelli e nomi degli strumenti vengono registrati su ogni span; i conteggi dei token vengono registrati quando la richiesta API sottostante restituisce dati di utilizzo, quindi gli span per richieste non riuscite o interrotte possono ometterli. Il contenuto che il tuo agente legge e scrive non viene registrato per impostazione predefinita. Queste variabili opt-in aggiungono contenuto ai dati esportati:| Variabile | Aggiunge |
|---|---|
OTEL_LOG_USER_PROMPTS=1 | Testo del prompt su eventi claude_code.user_prompt e sullo span claude_code.interaction |
OTEL_LOG_TOOL_DETAILS=1 | Argomenti di input dello strumento (percorsi di file, comandi shell, pattern di ricerca) su eventi claude_code.tool_result |
OTEL_LOG_TOOL_CONTENT=1 | Corpi di input e output completi dello strumento come eventi span su claude_code.tool, troncati a 60 KB. Richiede che il tracing sia abilitato |
OTEL_LOG_RAW_API_BODIES | Richiesta e risposta JSON complete dell’API Anthropic Messages come eventi di log claude_code.api_request_body e claude_code.api_response_body. Imposta su 1 per corpi inline troncati a 60 KB, o file:<dir> per corpi non troncati su disco con un percorso body_ref nell’evento. I corpi includono l’intera cronologia della conversazione e hanno il contenuto del pensiero esteso redatto. L’abilitazione di questo implica il consenso a tutto ciò che le tre variabili sopra rivelerebbero |
Documentazione correlata
Queste guide coprono argomenti adiacenti per il monitoraggio e la distribuzione degli agenti:- Traccia costo e utilizzo: leggi i dati di token e costo dal flusso di messaggi senza un backend esterno.
- Hosting dell’Agent SDK: distribuisci agenti in container dove puoi impostare variabili OpenTelemetry a livello di ambiente.
- Monitoring: il riferimento completo per ogni variabile di ambiente, metrica ed evento che il CLI emette.