Monitoraggio
Scopri come abilitare e configurare OpenTelemetry per Claude Code.
Traccia l'utilizzo di Claude Code, i costi e l'attività degli strumenti in tutta l'organizzazione esportando i dati di telemetria tramite OpenTelemetry (OTel). Claude Code esporta le metriche come dati di serie temporali tramite il protocollo di metriche standard, gli eventi tramite il protocollo di log/eventi, e facoltativamente le tracce distribuite tramite OpenTelemetry.
[!NOTE]
Per la Claude API o i Managed Agents, consulta OpenTelemetry per la Claude API.
Avvio rapido
Configura OpenTelemetry utilizzando variabili di ambiente:
# 1. Abilita la telemetria
export CLAUDE_CODE_ENABLE_TELEMETRY=1
# 2. Scegli gli esportatori (entrambi sono facoltativi - configura solo ciò di cui hai bisogno)
export OTEL_METRICS_EXPORTER=otlp # Opzioni: otlp, prometheus, console, none
export OTEL_LOGS_EXPORTER=otlp # Opzioni: otlp, console, none
# 3. Configura l'endpoint OTLP (per l'esportatore OTLP)
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
# 4. Imposta l'autenticazione (se richiesta)
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token"
# 5. Per il debug: riduci gli intervalli di esportazione e ripristinali per l'uso in produzione
export OTEL_METRIC_EXPORT_INTERVAL=10000 # 10 secondi (predefinito: 60000ms)
export OTEL_LOGS_EXPORT_INTERVAL=5000 # 5 secondi (predefinito: 5000ms)
# 6. Esegui Claude Code
claude
Per verificare una configurazione che esporta metriche, controlla il tuo backend per la metrica claude_code.session.count, che Claude Code emette quando inizia una sessione. Per verificare una configurazione solo log, invia un prompt e controlla l'evento claude_code.user_prompt.
Se non arriva nulla, avvia Claude Code con claude --debug-file <path> e controlla il log che scrive in quel percorso. Claude Code segnala i guasti degli esportatori che configuri come errori [3P telemetry], dove 3P significa third-party. Le righe con prefisso [Anthropic telemetry] descrivono la telemetria operativa separata di Anthropic e non indicano un problema con la tua configurazione.
Per le opzioni di configurazione complete, consulta la specifica OpenTelemetry.
Configurazione dell'amministratore
Gli amministratori possono configurare le impostazioni di OpenTelemetry per tutti gli utenti tramite il file di impostazioni gestite. Consulta la precedenza delle impostazioni per ulteriori informazioni su come vengono applicate le impostazioni.
Esempio di configurazione delle impostazioni gestite:
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317",
"OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer example-token"
}
}
Nell'app Claude Desktop, le sessioni della scheda Code leggono queste impostazioni gestite dalle fonti che raggiungono ogni tipo di sessione Desktop. Il modulo OpenTelemetry per Cowork sotto Monitoring nelle impostazioni Data and privacy della console amministratore si applica solo alle sessioni Cowork, quindi né il CLI del terminale né la scheda Code esportano a un collector che imposti lì.
Claude Code ignora le variabili dell'esportatore OpenTelemetry nel .claude/settings.json e .claude/settings.local.json di un repository, quindi un repository non può usarle per attivare la telemetria, scegliere dove va, o acquisire contenuti. Impostale nelle impostazioni gestite, oppure fai in modo che ogni sviluppatore le imposti nella propria shell o in ~/.claude/settings.json. Un repository può comunque disattivare un segnale impostando il suo selettore di esportatore, come OTEL_LOGS_EXPORTER, su none, a meno che le impostazioni gestite, un file --settings, o l'ambiente da cui avvii Claude Code imposti quella variabile.
Claude Code non passa le variabili di ambiente OTEL_* ai sottoprocessi che genera, incluso lo strumento Bash, gli hooks, i server MCP e i language server. Un'applicazione strumentata con OpenTelemetry che esegui tramite lo strumento Bash non eredita l'endpoint dell'esportatore di Claude Code o le intestazioni, quindi imposta quelle variabili direttamente nel comando se quell'applicazione ha bisogno di esportare la propria telemetria.
Come le impostazioni gestite bloccano la destinazione OTLP
Quando imposti una variabile OTEL_EXPORTER_OTLP_* nelle impostazioni gestite, Claude Code rimuove le variabili conflittuali impostate dagli sviluppatori all'avvio e registra un avviso nel log di debug. Ciò che rimuove dipende da quale variabile imposti:
-
Endpoint: quando imposti
OTEL_EXPORTER_OTLP_ENDPOINT, Claude Code rimuove ogni endpoint per segnale impostato dagli sviluppatori. Gli sviluppatori non possono puntare un segnale a un collector diverso, quindi non è necessario impostare anche le variabili di endpoint per segnale nelle impostazioni gestite. -
Protocolli: quando imposti
OTEL_EXPORTER_OTLP_PROTOCOL, Claude Code rimuove ogni protocollo per segnale impostato dagli sviluppatori. -
Credenziali: quando imposti
OTEL_EXPORTER_OTLP_HEADERS,OTEL_EXPORTER_OTLP_CLIENT_KEYoOTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, Claude Code rimuove le versioni per segnale di quella variabile impostate dagli sviluppatori, più ogni variabile di endpoint impostata dagli sviluppatori, generica o per segnale, poiché quelle credenziali raggiungerebbero altrimenti un collector che le impostazioni gestite non hanno scelto. -
Selettori di esportatore:
OTEL_METRICS_EXPORTER,OTEL_LOGS_EXPORTERe il betaOTEL_TRACES_EXPORTERseguono la precedenza normale per chiave. L'impostazione di uno sviluppatore può comunque disabilitare un segnale o passarlo all'esportatore della console, quindi imposta i selettori anche nelle impostazioni gestite se hai bisogno che siano bloccati. Tra le fonti amministratore,OTEL_LOGS_EXPORTERsegue l'unità di telemetria mentre gli altri due selettori si uniscono per chiave. Richiede Claude Code v2.1.223 o successivo. -
Endpoint di tracciamento beta: con il tracciamento beta dettagliato attivo, Claude Code esporta log e tracce a
BETA_TRACING_ENDPOINTinvece che tramite gli esportatori di log e tracce. Claude Code quindi rimuove unBETA_TRACING_ENDPOINTimpostato dagli sviluppatori ogni volta che una di queste impostazioni gestite decide la destinazione di uno dei due segnali:- Un endpoint generico o di log/tracce o una credenziale
- Un
otelHeadersHelper - Un selettore di esportatore di log o tracce impostato su
none,consoleo vuoto, valori che mantengono il segnale fuori da un collector CLAUDE_CODE_ENABLE_TELEMETRYdisattivato
Un endpoint o una credenziale solo per metriche non lo rimuove. Prima della v2.1.251, un
BETA_TRACING_ENDPOINTimpostato dagli sviluppatori reindirizzava i log e le tracce che il tracciamento beta dettagliato esporta anche quando le impostazioni gestite hanno fissato il collector.
Claude Code non rimuove le variabili per segnale che imposti nelle impostazioni gestite stesse, quindi puoi instradare un segnale a un collector diverso impostando la sua variabile lì, come fa l'esempio SIEM. Se imposti una credenziale per segnale lì, Claude Code rimuove l'endpoint impostato dagli sviluppatori per quel segnale.
Questo comportamento di rimozione cambia dove viene consegnata la telemetria, non cosa raccoglie Claude Code.
Prima della v2.1.217, ogni variabile seguiva la precedenza delle impostazioni per chiave indipendentemente, quindi un endpoint specifico del segnale impostato nelle impostazioni dell'utente o nella shell reindirizzava quel segnale lontano dal collector gestito.
Quando l'app desktop o un runner di ambiente self-hosted avvia Claude Code e nomina un endpoint OTLP nell'ambiente che fornisce, Claude Code fissa la destinazione allo stesso modo: le variabili di telemetria del launcher rimuovono le variabili impostate dagli sviluppatori esattamente come fanno le impostazioni gestite. Claude Code non rimuove le variabili che il launcher stesso ha impostato. Richiede Claude Code v2.1.251 o successivo.
Dettagli di configurazione
Variabili di configurazione comuni
Queste variabili configurano gli exporter, gli endpoint e il comportamento di esportazione per tutti i deploy.
Se imposti una variabile di endpoint o di protocollo specifica per segnale, come OTEL_EXPORTER_OTLP_METRICS_ENDPOINT, Claude Code la usa al posto della variabile generica per quel segnale. Se imposti una variabile di header specifica per segnale, come OTEL_EXPORTER_OTLP_METRICS_HEADERS, Claude Code ne esegue il merge con la variabile generica OTEL_EXPORTER_OTLP_HEADERS per quel segnale.
Sulle macchine con impostazioni gestite, consulta Come le impostazioni gestite bloccano la destinazione OTLP per sapere cosa rimuove Claude Code.
| Variabile d'ambiente | Descrizione | Valori di esempio |
|---|---|---|
CLAUDE_CODE_ENABLE_TELEMETRY |
Abilita la raccolta della telemetria (obbligatoria) | 1 |
OTEL_METRICS_EXPORTER |
Tipi di exporter delle metriche, separati da virgole. Usa none per disabilitare |
console, otlp, prometheus, none |
OTEL_LOGS_EXPORTER |
Tipi di exporter di log/eventi, separati da virgole. Usa none per disabilitare |
console, otlp, none |
OTEL_EXPORTER_OTLP_PROTOCOL |
Protocollo per l'exporter OTLP, si applica a tutti i segnali. Claude Code non ha un protocollo predefinito, quindi imposta questa variabile o la variabile di protocollo specifica per segnale per ogni exporter otlp che abiliti |
grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_ENDPOINT |
Endpoint del collector OTLP per tutti i segnali | http://localhost:4317 |
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL |
Protocollo per le metriche, sovrascrive l'impostazione generale | grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT |
Endpoint OTLP per le metriche, sovrascrive l'impostazione generale | http://localhost:4318/v1/metrics |
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL |
Protocollo per i log, sovrascrive l'impostazione generale | grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT |
Endpoint OTLP per i log, sovrascrive l'impostazione generale | http://localhost:4318/v1/logs |
OTEL_EXPORTER_OTLP_HEADERS |
Header di autenticazione per OTLP | Authorization=Bearer token |
OTEL_EXPORTER_OTLP_METRICS_HEADERS |
Header di autenticazione per le metriche, uniti tramite merge con gli header generali | Authorization=Bearer token |
OTEL_EXPORTER_OTLP_LOGS_HEADERS |
Header di autenticazione per i log, uniti tramite merge con gli header generali | Authorization=Bearer token |
OTEL_METRIC_EXPORT_INTERVAL |
Intervallo di esportazione in millisecondi (predefinito: 60000) | 5000, 60000 |
OTEL_LOGS_EXPORT_INTERVAL |
Intervallo di esportazione dei log in millisecondi (predefinito: 5000) | 1000, 10000 |
OTEL_LOG_USER_PROMPTS |
Abilita la registrazione del contenuto dei prompt dell'utente (predefinito: disabilitato) | 1 per abilitare |
OTEL_LOG_ASSISTANT_RESPONSES |
Abilita la registrazione del testo delle risposte dell'assistente negli eventi assistant_response (predefinito: disabilitato). Se non è impostata, usa il valore di OTEL_LOG_USER_PROMPTS |
1 per abilitare, 0 per mantenerlo oscurato |
OTEL_LOG_TOOL_DETAILS |
Abilita la registrazione dei parametri degli strumenti e degli argomenti di input negli eventi degli strumenti e negli attributi degli span delle tracce: comandi Bash, nomi dei server MCP e degli strumenti, nomi delle skill, nomi dei workflow creati dall'utente e input degli strumenti. Abilita anche i nomi dei comandi personalizzati, dei plugin e MCP negli eventi user_prompt, e i nomi reali di agenti, skill, plugin, server MCP e strumenti nei contatori di costi e token (predefinito: disabilitato). Per i server integrati di Claude Desktop, nelle sessioni gestite da Claude Desktop, mcp_server_name/mcp_tool_name vengono emessi su tool_decision/tool_result anche con il flag disattivato. L'eccezione richiede Claude Code v2.1.214 o successiva |
1 per abilitare |
OTEL_LOG_TOOL_CONTENT |
Abilita la registrazione del contenuto degli strumenti nell'evento di span tool.output (predefinito: disabilitato). Gli attributi degli span riportano il contenuto degli strumenti sotto i propri controlli. Richiede il tracing. Il contenuto viene troncato al limite del contenuto (60 KB per impostazione predefinita) |
1 per abilitare |
OTEL_LOG_MANAGED_SETTINGS |
Aggiunge le impostazioni gestite oscurate, e un digest SHA-256 delle impostazioni prima dell'oscuramento, agli eventi managed settings resolved (predefinito: disabilitato). Un valore nelle impostazioni di progetto o locali non lo attiva. Richiede Claude Code v2.1.274 o successiva | 1 per abilitare |
OTEL_LOG_RAW_API_BODIES |
Emette il JSON completo di richiesta e risposta della Messages API di Anthropic come eventi di log api_request_body / api_response_body (predefinito: disabilitato). I corpi includono l'intera cronologia della conversazione. Abilitarla implica il consenso a tutto ciò che rivelerebbero OTEL_LOG_USER_PROMPTS, OTEL_LOG_TOOL_DETAILS e OTEL_LOG_TOOL_CONTENT |
1 per corpi inline troncati al limite del contenuto (60 KB per impostazione predefinita), oppure file:<dir> per corpi non troncati su disco con un puntatore body_ref nell'evento |
CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH |
Limite del contenuto: la lunghezza massima degli attributi che contengono contenuto, come risposte del modello, contenuto degli strumenti, prompt di sistema e corpi API grezzi, marcatore di troncamento incluso, in unità di codice UTF-16 (predefinito: 61440, cioè 60 KB). Il valore predefinito è dimensionato per i backend che limitano i valori degli attributi a 64 KB; aumentalo solo se il tuo backend accetta valori più grandi, oppure riducilo per diminuire il volume della telemetria. Quando un limite degli attributi dell'SDK OpenTelemetry, OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT o una delle sue varianti per logrecord e span, è impostato su un valore inferiore, Claude Code tronca a quel valore più piccolo in modo che il marcatore [TRUNCATED ...] rimanga entro il limite dell'SDK |
262144 |
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
Preferenza di temporalità delle metriche (predefinito: delta). Imposta cumulative se il tuo backend si aspetta una temporalità cumulativa |
delta, cumulative |
CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS |
Intervallo per l'aggiornamento degli header dinamici (predefinito: 1740000ms / 29 minuti) | 900000 |
Per i protocolli http/protobuf e http/json, Claude Code invia ogni richiesta di esportazione con un header Content-Length.
Autenticazione mTLS
Il modo in cui configuri i certificati client per l'exporter OTLP dipende dal protocollo OTLP in uso per quel segnale, impostato tramite OTEL_EXPORTER_OTLP_PROTOCOL o l'override specifico per segnale. La stessa configurazione si applica a metriche, log e tracce.
| Protocollo | Variabili del certificato client | Considera attendibile la CA del collector con |
|---|---|---|
http/protobuf, http/json |
CLAUDE_CODE_CLIENT_CERT, CLAUDE_CODE_CLIENT_KEY e, facoltativamente, CLAUDE_CODE_CLIENT_KEY_PASSPHRASE. Consulta Configurazione di rete |
NODE_EXTRA_CA_CERTS |
grpc |
OTEL_EXPORTER_OTLP_CLIENT_KEY e OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, oppure le varianti specifiche per segnale come OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY per usare un certificato diverso per ogni segnale |
OTEL_EXPORTER_OTLP_CERTIFICATE |
Per grpc, l'SDK OpenTelemetry legge direttamente le variabili OTLP standard, quindi le configurazioni esistenti che impostano le variabili delle metriche specifiche per segnale continuano a funzionare. Sulle macchine con impostazioni gestite, Claude Code potrebbe rimuovere all'avvio le credenziali e gli endpoint specifici per segnale impostati dallo sviluppatore.
Controllo della cardinalità delle metriche
Le seguenti variabili d'ambiente controllano quali attributi vengono inclusi nelle metriche e negli eventi per gestire la cardinalità:
| Variabile d'ambiente | Descrizione | Valore predefinito | Esempio per disabilitare |
|---|---|---|---|
OTEL_METRICS_INCLUDE_SESSION_ID |
Include gli attributi session.id e, nelle sessioni cloud, ccr.session.id nelle metriche e negli eventi | true |
false |
OTEL_METRICS_INCLUDE_VERSION |
Include l'attributo app.version nelle metriche e negli eventi | false |
true |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID |
Include gli attributi user.account_uuid e user.account_id nelle metriche e negli eventi | true |
false |
OTEL_METRICS_INCLUDE_ENTRYPOINT |
Include l'attributo app.entrypoint nelle metriche e negli eventi | false |
true |
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES |
Include le chiavi di OTEL_RESOURCE_ATTRIBUTES come attributi sui datapoint delle metriche e sugli eventi |
true |
false |
OTEL_METRICS_INCLUDE_REPOSITORY |
Include gli attributi di identità del repository vcs.* su metriche ed eventi. Richiede Claude Code v2.1.269 o successiva |
false |
true |
Una cardinalità inferiore generalmente comporta prestazioni migliori e costi di archiviazione inferiori, ma dati meno granulari per l'analisi.
Tracce (beta)
Il tracing distribuito esporta span che collegano ogni prompt dell'utente alle richieste API e alle esecuzioni degli strumenti che attiva, così puoi visualizzare una richiesta completa come una singola traccia nel tuo backend di tracing.
Il tracing è disattivato per impostazione predefinita. Per abilitarlo, imposta sia CLAUDE_CODE_ENABLE_TELEMETRY=1 sia CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1, quindi imposta OTEL_TRACES_EXPORTER per scegliere dove vengono inviati gli span. Le tracce riutilizzano la configurazione OTLP comune per endpoint, protocollo, header e mTLS. Sulle macchine con impostazioni gestite, Claude Code potrebbe rimuovere all'avvio le credenziali e gli endpoint specifici per segnale impostati dallo sviluppatore.
| Variabile d'ambiente | Descrizione | Valori di esempio |
|---|---|---|
CLAUDE_CODE_ENHANCED_TELEMETRY_BETA |
Abilita il tracing degli span (obbligatoria). È accettata anche ENABLE_ENHANCED_TELEMETRY_BETA |
1 |
OTEL_TRACES_EXPORTER |
Tipi di exporter delle tracce, separati da virgole. Usa none per disabilitare |
console, otlp, none |
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL |
Protocollo per le tracce, sovrascrive OTEL_EXPORTER_OTLP_PROTOCOL |
grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT |
Endpoint OTLP per le tracce, sovrascrive OTEL_EXPORTER_OTLP_ENDPOINT |
http://localhost:4318/v1/traces |
OTEL_EXPORTER_OTLP_TRACES_HEADERS |
Header di autenticazione per le tracce, uniti tramite merge con OTEL_EXPORTER_OTLP_HEADERS |
Authorization=Bearer token |
OTEL_TRACES_EXPORT_INTERVAL |
Intervallo di esportazione dei batch di span in millisecondi (predefinito: 5000) | 1000, 10000 |
Per impostazione predefinita, gli span oscurano il testo dei prompt dell'utente, i dettagli dell'input degli strumenti e il contenuto degli strumenti. Imposta OTEL_LOG_USER_PROMPTS=1, OTEL_LOG_TOOL_DETAILS=1 e OTEL_LOG_TOOL_CONTENT=1 per includerli.
Quando il tracing è attivo, i sottoprocessi Bash e PowerShell ereditano automaticamente una variabile d'ambiente TRACEPARENT contenente il contesto di traccia W3C dello span di esecuzione dello strumento attivo. Questo consente a qualsiasi sottoprocesso che legge TRACEPARENT di collegare i propri span come figli all'interno della stessa traccia, abilitando il tracing distribuito end-to-end attraverso gli script e i comandi eseguiti da Claude.
Quando il tracing è attivo e Claude Code è connesso direttamente all'API di Anthropic, ogni richiesta al modello include un header W3C traceparent impostato sul contesto dello span claude_code.llm_request, e l'header traceresponse dell'API viene registrato come link di span. Insieme, questi collegano gli span lato client di Claude Code alla traccia lato server attraverso qualsiasi intermediario conforme. Le richieste MCP HTTP in uscita includono traceparent allo stesso modo. L'header non viene inviato a provider di terze parti.
Per impostazione predefinita, l'header traceparent sulle richieste al modello e sulle richieste MCP HTTP viene inviato solo quando ANTHROPIC_BASE_URL non è impostata o punta all'API di Anthropic, poiché alcuni proxy rifiutano header non riconosciuti. La variabile TRACEPARENT dei sottoprocessi è controllata dallo stesso interruttore per coerenza. Se esegui Claude Code attraverso un proxy ANTHROPIC_BASE_URL personalizzato e vuoi che il contesto di traccia venga propagato, imposta CLAUDE_CODE_PROPAGATE_TRACEPARENT=1.
Nell'Agent SDK e nelle sessioni non interattive avviate con -p, Claude Code legge anche TRACEPARENT e TRACESTATE dal proprio ambiente all'avvio di ogni span di interazione. Questo consente a un processo che incorpora Claude Code di passare il proprio contesto di traccia W3C attivo al sottoprocesso, in modo che gli span di Claude Code appaiano come figli della traccia distribuita del chiamante. Le sessioni interattive ignorano TRACEPARENT in ingresso per evitare di ereditare accidentalmente valori ambientali da ambienti CI o container.
Il contesto di traccia in ingresso si applica anche agli eventi. Nell'Agent SDK e nelle sessioni -p con TRACEPARENT impostata, ogni record di log degli eventi OTLP include valori trace_id e span_id che lo collegano alla traccia della tua applicazione, anche quando l'exporter delle tracce non è configurato, così il tuo backend di logging può correlare gli eventi con il resto della traccia.
Un record emesso mentre un'interazione è attiva riporta gli ID dello span di interazione, anche quando Claude Code lo emette al di fuori del contesto asincrono dello span, ad esempio in una callback di una richiesta di permesso o per un record bufferizzato durante l'avvio ed esportato in seguito. Un record emesso senza uno span di interazione attivo riporta direttamente gli ID di TRACEPARENT in ingresso.
Gerarchia degli span
Ogni prompt dell'utente avvia uno span radice claude_code.interaction. Le chiamate API, le chiamate agli strumenti e le esecuzioni degli hook vengono registrate come suoi figli. Gli span degli strumenti hanno a loro volta due span figli: uno per il tempo trascorso in attesa di una decisione sul permesso e uno per l'esecuzione stessa. Quando lo strumento Agent, o lo strumento Task legacy, genera un subagent, gli span API e degli strumenti del subagent vengono annidati sotto lo span claude_code.tool del genitore.
claude_code.interaction
├── claude_code.llm_request
├── claude_code.hook (requires detailed beta tracing)
└── claude_code.tool
├── claude_code.tool.blocked_on_user
├── claude_code.tool.execution
└── (Agent tool) subagent claude_code.llm_request / claude_code.tool spans
Nell'Agent SDK e nelle sessioni claude -p, claude_code.interaction stesso diventa figlio dello span del chiamante quando TRACEPARENT è impostata nell'ambiente.
Quando un hook PreToolUse rinvia una chiamata a uno strumento, Claude Code salva il contesto di traccia del turno che l'ha rinviata. Quando riprendi la sessione e lo strumento viene rieseguito, gli span dello strumento si uniscono alla traccia di quel turno precedente come figli dello span claude_code.interaction del turno.
Attributi degli span
Ogni span include gli attributi standard più un attributo span.type corrispondente al suo nome. Le tabelle seguenti elencano gli attributi aggiuntivi impostati su ciascuno span. Gli span llm_request, tool.execution e hook impostano lo stato OpenTelemetry ERROR quando registrano un errore; gli altri span terminano sempre con stato UNSET.
claude_code.interaction
| Attributo | Descrizione | Controllato da |
|---|---|---|
user_prompt |
Testo del prompt. Il valore è <REDACTED> a meno che il controllo non sia impostato |
OTEL_LOG_USER_PROMPTS |
user_prompt_length |
Lunghezza del prompt in caratteri | |
interaction.sequence |
Contatore delle interazioni a partire da 1, conteggiato per processo di Claude Code anziché per sessione, come descritto per event.sequence |
|
parent.source |
Come lo span ha ottenuto il suo genitore di traccia: env quando è stato collegato come figlio di un TRACEPARENT in ingresso, none quando ha avviato una propria traccia. Richiede Claude Code v2.1.268 o successiva |
|
interaction.duration_ms |
Durata effettiva del turno |
claude_code.llm_request
| Attributo | Descrizione | Controllato da |
|---|---|---|
model |
Identificatore del modello | |
gen_ai.system |
Sempre anthropic. Convenzione semantica GenAI di OpenTelemetry |
|
gen_ai.request.model |
Stesso valore di model. Convenzione semantica GenAI di OpenTelemetry |
|
query_source |
Sottosistema che ha emesso la richiesta, come repl_main_thread o il nome di un subagent |
ENABLE_BETA_TRACING_DETAILED |
query_source_safe |
Forma limitata di query_source, emessa indipendentemente dal fatto che il tracing beta dettagliato sia attivo, con valori come repl_main_thread o agent.builtin.general-purpose. : diventa . e gli agenti con nomi scelti dall'utente appaiono come agent.custom. Richiede Claude Code v2.1.268 o successiva |
|
agent_id |
Identificatore del subagent o del compagno di squadra che ha emesso la richiesta. Assente nella sessione principale | |
parent_agent_id |
Identificatore dell'agente che ha generato questo agente. Assente per la sessione principale e per gli agenti generati direttamente da essa | |
workflow.run_id |
Identificatore dell'esecuzione dello strumento Workflow che ha generato questo agente, con prefisso wf_. Assente per gli agenti non generati da un workflow |
|
workflow.name |
Nome del workflow che ha generato questo agente. I nomi creati dall'utente vengono sostituiti con custom a meno che il controllo non sia impostato |
OTEL_LOG_TOOL_DETAILS |
speed |
fast o normal |
|
effort |
Livello di sforzo applicato alla richiesta: low, medium, high, xhigh o max. Assente quando Claude Code non invia alcun livello di sforzo, ad esempio su un modello che non supporta lo sforzo. Richiede Claude Code v2.1.274 o successiva |
|
llm_request.context |
interaction, tool o standalone a seconda dello span genitore |
|
duration_ms |
Durata effettiva inclusi i nuovi tentativi | |
ttft_ms |
Tempo al primo token in millisecondi | |
first_content_ms |
Tempo dall'inizio della richiesta al primo blocco di contenuto del tentativo riuscito, in millisecondi. Assente nelle richieste che sono ricadute sul percorso non in streaming. Richiede Claude Code v2.1.268 o successiva | |
input_tokens |
Numero di token di input dal blocco di utilizzo dell'API. Esclude i token letti dalla cache del prompt o scritti in essa, che sono riportati in cache_read_tokens e cache_creation_tokens |
|
output_tokens |
Numero di token di output | |
cache_read_tokens |
Token letti dalla cache del prompt | |
cache_creation_tokens |
Token scritti nella cache del prompt | |
request_id |
ID della richiesta API. Stesso valore dell'attributo di correlazione degli eventi request_id |
|
gen_ai.response.id |
Stesso valore di request_id. Convenzione semantica GenAI di OpenTelemetry |
|
client_request_id |
x-client-request-id generato dal client per il tentativo finale |
|
attempt |
Numero totale di tentativi effettuati per questa richiesta | |
success |
true o false |
|
status_code |
Codice di stato HTTP quando la richiesta non è riuscita | |
error |
Messaggio di errore quando la richiesta non è riuscita | |
error_class |
Breve token della classe di errore quando la richiesta non è riuscita, come api_timeout o server_overload. Richiede Claude Code v2.1.268 o successiva |
|
response.has_tool_call |
true quando la risposta conteneva blocchi di utilizzo degli strumenti |
|
stop_reason |
stop_reason della risposta API, come end_turn, tool_use, max_tokens, stop_sequence, pause_turn o refusal |
|
gen_ai.response.finish_reasons |
Stesso valore di stop_reason, racchiuso in un array di stringhe. Convenzione semantica GenAI di OpenTelemetry |
Ogni nuovo tentativo viene registrato anche come evento di span gen_ai.request.attempt con gli attributi attempt e client_request_id.
claude_code.tool
| Attributo | Descrizione | Controllato da |
|---|---|---|
tool_name |
Nome dello strumento | |
tool_name_safe |
Forma di tool_name che non contiene nomi scelti dall'utente. I nomi degli strumenti integrati vengono riportati così come sono. I nomi degli strumenti MCP appaiono come mcp_other, ad eccezione dei nomi degli strumenti che corrispondono ad alcune forme fisse, come gli strumenti playwright denominati browser_*, che vengono riportati così come sono. Richiede Claude Code v2.1.268 o successiva |
|
bash_command_class |
Per lo strumento Bash: categoria del primo programma del comando da un elenco fisso, come vcs o package_manager. other per un programma al di fuori dell'elenco, unparsed quando la riga non può essere analizzata. Richiede Claude Code v2.1.268 o successiva |
|
bash_argv0 |
Per lo strumento Bash: il primo programma del comando quando si trova nello stesso elenco fisso, come git o npm. other per qualsiasi programma al di fuori dell'elenco. Richiede Claude Code v2.1.268 o successiva |
|
duration_ms |
Durata effettiva inclusi l'attesa del permesso e l'esecuzione | |
result_tokens |
Dimensione approssimativa in token del risultato dello strumento | |
agent_id |
Identificatore del subagent o del compagno di squadra che ha eseguito lo strumento. Assente nella sessione principale | |
parent_agent_id |
Identificatore dell'agente che ha generato questo agente. Assente per la sessione principale e per gli agenti generati direttamente da essa | |
workflow.run_id |
Identificatore dell'esecuzione dello strumento Workflow che ha generato questo agente, con prefisso wf_. Assente per gli agenti non generati da un workflow |
|
workflow.name |
Nome del workflow che ha generato questo agente. I nomi creati dall'utente vengono sostituiti con custom a meno che il controllo non sia impostato |
OTEL_LOG_TOOL_DETAILS |
tool_use_id |
L'id del blocco tool_use del modello per questa chiamata. Corrisponde al tool_use_id negli eventi tool_result e tool_decision e nei payload degli hook, così puoi collegare lo span a quei record |
|
gen_ai.tool.call.id |
Stesso valore di tool_use_id. Convenzione semantica GenAI di OpenTelemetry |
|
file_path |
Percorso del file di destinazione per gli strumenti Read, Edit e Write | OTEL_LOG_TOOL_DETAILS |
full_command |
Stringa del comando per lo strumento Bash | OTEL_LOG_TOOL_DETAILS |
skill_name |
Nome della skill per lo strumento Skill | OTEL_LOG_TOOL_DETAILS |
subagent_type |
Tipo di subagent per lo strumento Agent o per lo strumento Task legacy | OTEL_LOG_TOOL_DETAILS |
Evento di span tool.output su claude_code.tool
Se imposti OTEL_LOG_TOOL_CONTENT=1, le chiamate Read e Bash possono registrare un evento di span tool.output sullo span claude_code.tool. Le chiamate Edit e Write ne registrano uno solo se imposti anche OTEL_LOG_TOOL_DETAILS=1. Questa variabile non è limitata a questi due strumenti, quindi controlla la sua riga nella tabella di configurazione per gli argomenti che aggiunge altrove.
Anche gli strumenti MCP, WebFetch e WebSearch registrano questo evento, su Claude Code v2.1.283 o successiva.
Claude Code scrive questo evento dal ritorno riuscito di una chiamata a uno strumento, quindi una chiamata che genera un errore non registra nulla, qualunque sia lo strumento. Tra le chiamate che restituiscono un risultato, non registra alcun evento tool.output per:
- Una chiamata a qualsiasi strumento diverso da Read, Edit, Write, Bash, WebFetch, WebSearch e gli strumenti MCP
- Una Read che restituisce qualcosa di diverso dal testo di un file, come un'immagine, un PDF o una nuova lettura di un file il cui contenuto non è cambiato
- Una chiamata Edit o Write, a meno che tu non imposti anche
OTEL_LOG_TOOL_DETAILS=1 - Una chiamata WebFetch o WebSearch che Claude Code ha spostato in background durante l'esecuzione affinché un messaggio in attesa potesse raggiungere Claude. Nemmeno il risultato che arriva in seguito viene registrato. Per sapere quando Claude Code sposta una chiamata, consulta Quando Claude Code invia ciò che hai messo in coda per il terminale e il campo
priorityper le sessioni dell'Agent SDK
L'evento include questi attributi, ciascuno troncato al limite del contenuto (60 KB per impostazione predefinita). Controllato da indica la variabile di cui un attributo ha bisogno oltre a OTEL_LOG_TOOL_CONTENT=1, e per Edit e Write quella variabile controlla l'evento stesso anziché l'attributo.
| Attributo | Descrizione | Controllato da |
|---|---|---|
content |
Testo restituito dallo strumento Read, oppure il testo che una chiamata Write doveva scrivere | OTEL_LOG_TOOL_DETAILS per lo strumento Write |
output |
Per lo strumento Bash, l'output combinato del comando, con stderr intercalato in stdout. Per uno strumento MCP, WebFetch o WebSearch, il risultato restituito dallo strumento: blocchi di testo uniti da ritorni a capo, con un'immagine o un documento sostituiti da un segnaposto come [image] |
|
diff |
Patch strutturata applicata dallo strumento Edit | OTEL_LOG_TOOL_DETAILS |
file_path |
Percorso del file di destinazione per gli strumenti Read, Edit e Write, che ripete l'attributo dello span con lo stesso nome | OTEL_LOG_TOOL_DETAILS |
bash_command |
Stringa del comando per lo strumento Bash | OTEL_LOG_TOOL_DETAILS |
L'attributo tool_name dello span genitore ti indica da quale strumento proviene un evento. Un attributo troncato al limite del contenuto è accompagnato da <attribute>_truncated e <attribute>_original_length.
claude_code.tool.blocked_on_user
| Attributo | Descrizione | Controllato da |
|---|---|---|
duration_ms |
Tempo trascorso in attesa della decisione sul permesso | |
decision |
accept, reject o cancelled, dove cancelled significa che Claude Code ha smesso di attendere una decisione sul permesso per la chiamata allo strumento e non l'ha eseguita |
|
source |
Per un accept o un reject, da dove proviene la decisione, come config, hook o user_temporary, con i significati indicati nell'evento di decisione dello strumento. Per un cancelled, cosa ha terminato l'attesa prima che venisse presa qualsiasi decisione, come user_abort |
Una decisione cancelled con source user_abort significa che un messaggio che richiedeva una consegna immediata ha interrotto il turno mentre la richiesta di permesso o il controllo della modalità auto era in sospeso. Ad esempio, durante un controllo della modalità auto, l'utente aveva un messaggio in coda e lo ha inviato immediatamente.
claude_code.tool.execution
| Attributo | Descrizione | Controllato da |
|---|---|---|
duration_ms |
Tempo trascorso nell'esecuzione del corpo dello strumento | |
tool_use_id |
Stesso valore presente sullo span genitore claude_code.tool |
|
gen_ai.tool.call.id |
Stesso valore di tool_use_id. Convenzione semantica GenAI di OpenTelemetry |
|
success |
true o false |
|
error |
Stringa della categoria di errore quando l'esecuzione non è riuscita, come Error:ENOENT o ShellError. Contiene invece il messaggio di errore completo quando il controllo è impostato |
OTEL_LOG_TOOL_DETAILS |
error_class |
La categoria di errore in forma di identificatore, con i caratteri diversi da lettere, cifre e underscore sostituiti da _, come Error_ENOENT o ShellError. Riporta la categoria anche quando error riporta il messaggio completo. Richiede Claude Code v2.1.268 o successiva |
claude_code.hook
Questo span appare solo quando il tracing beta dettagliato è attivo, il che richiede ENABLE_BETA_TRACING_DETAILED=1 e BETA_TRACING_ENDPOINT, una coppia che cambia anche la destinazione dei tuoi log e delle tue tracce. Imposta la coppia nella tua shell, nelle impostazioni utente o nelle impostazioni gestite; entrambe le variabili vengono ignorate nelle impostazioni di progetto e locali. CLAUDE_CODE_ENHANCED_TELEMETRY_BETA da sola non lo produce.
Nelle sessioni CLI interattive, il tracing beta dettagliato richiede anche che la tua organizzazione sia inserita nella lista di autorizzazione per la funzionalità. L'Agent SDK e le sessioni non interattive -p non richiedono l'inserimento nella lista di autorizzazione.
[!WARNING]
Imposta
ENABLE_BETA_TRACING_DETAILEDsolo per il debug, non in produzione. Il tracing beta dettagliato ha un volume di esportazione elevato, e i suoi attributi di contenuto non fanno parte dello schema stabile degli span.
| Attributo | Descrizione | Controllato da |
|---|---|---|
hook_event |
Tipo di evento dell'hook, come PreToolUse |
|
hook_name |
Nome completo dell'hook, come PreToolUse:Write |
|
num_hooks |
Numero di comandi hook corrispondenti eseguiti | |
hook_definitions |
Configurazione degli hook serializzata in JSON | OTEL_LOG_TOOL_DETAILS |
duration_ms |
Durata effettiva di tutti gli hook corrispondenti | |
num_success |
Numero di hook completati con successo | |
num_blocking |
Numero di hook che hanno restituito una decisione bloccante | |
num_non_blocking_error |
Numero di hook che hanno restituito un errore senza bloccare | |
num_cancelled |
Numero di hook annullati prima del completamento |
Attributi di contenuto con il tracing beta dettagliato
[!NOTE]
Ulteriori attributi che contengono contenuto, come
new_context,system_reminders,system_prompt_preview,user_system_prompt,tool_inputeresponse.model_output, vengono emessi solo quando il tracing beta dettagliato è attivo. Non fanno parte dello schema stabile degli span.
Questi attributi appaiono sugli span seguenti, e Controllato da indica la variabile di cui un attributo ha bisogno oltre al tracing beta dettagliato. I valori più lunghi del limite del contenuto (60 KB per impostazione predefinita) vengono troncati.
| Attributo | Span | Descrizione | Controllato da |
|---|---|---|---|
new_context |
claude_code.interaction |
Il prompt dell'utente | OTEL_LOG_USER_PROMPTS |
new_context |
claude_code.llm_request |
I nuovi messaggi dell'utente e i risultati degli strumenti inviati con la richiesta | OTEL_LOG_USER_PROMPTS |
system_reminders |
claude_code.llm_request |
Il testo dei promemoria di sistema tra i nuovi messaggi della richiesta | OTEL_LOG_USER_PROMPTS |
system_prompt_preview |
claude_code.llm_request |
Primi 500 caratteri del prompt di sistema completo inviato con la richiesta | OTEL_LOG_USER_PROMPTS |
user_system_prompt |
claude_code.llm_request |
Solo il testo del prompt di sistema che fornisci tramite l'opzione systemPrompt dell'SDK o i flag --system-prompt e --append-system-prompt. Emesso una volta per sessione anziché per richiesta |
OTEL_LOG_USER_PROMPTS |
response.model_output |
claude_code.llm_request |
Testo della risposta del modello alla richiesta | OTEL_LOG_USER_PROMPTS |
new_context |
claude_code.tool |
Il risultato della chiamata allo strumento, qualunque sia lo strumento | OTEL_LOG_TOOL_CONTENT |
tool_input |
claude_code.tool |
L'input serializzato della chiamata allo strumento | OTEL_LOG_TOOL_DETAILS |
Con il tracing beta dettagliato e OTEL_LOG_USER_PROMPTS=1, Claude Code emette anche un evento claude_code.system_prompt che contiene il prompt di sistema completo, troncato al limite del contenuto. Arriva la prima volta che una sessione invia ciascun prompt di sistema distinto, e di nuovo dopo la compattazione.
Header dinamici
Per gli ambienti aziendali che richiedono un'autenticazione dinamica, puoi configurare uno script per generare header in modo dinamico. Gli header dinamici si applicano solo ai protocolli http/protobuf e http/json. Con il protocollo grpc, Claude Code usa solo le variabili degli header statici, OTEL_EXPORTER_OTLP_HEADERS e le sue varianti specifiche per segnale.
Configurazione delle impostazioni
Aggiungi al tuo .claude/settings.json, sostituendo il percorso con quello del tuo script:
{
"otelHeadersHelper": "/path/to/generate-otel-headers.sh"
}
Il valore può essere il percorso di un file eseguibile, incluso un percorso che contiene spazi, oppure una riga di comando della shell con argomenti. Su Windows, il valore viene sempre eseguito tramite la shell, quindi racchiudi tra virgolette un percorso che contiene spazi all'interno del valore JSON.
Requisiti dello script
Lo script deve produrre un JSON valido con coppie chiave-valore di tipo stringa che rappresentano gli header HTTP:
#!/bin/bash
# Example: Multiple headers
echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"
Se l'helper non riesce o stampa un output che non soddisfa questi requisiti, le esportazioni non riescono e il tuo backend di telemetria non riceve nulla dalla sessione finché l'helper non funziona di nuovo. Claude Code segnala l'errore in:
- Una notifica di avviso nelle sessioni interattive,
otelHeadersHelper failed; telemetry is not being exported, mostrata una volta per sessione quando l'helper non riesce per la prima volta - L'output di
/status - Il log di debug, quando esegui con
--debugo dopo aver eseguito/debugnella sessione - stderr, nelle sessioni non interattive avviate con
-p
Comportamento di aggiornamento
Lo script helper degli header viene eseguito all'avvio e successivamente a intervalli regolari per supportare l'aggiornamento dei token. Per impostazione predefinita, lo script viene eseguito ogni 29 minuti. Personalizza l'intervallo con la variabile d'ambiente CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS.
Supporto per organizzazioni con più team
Le organizzazioni con più team o reparti possono aggiungere attributi personalizzati per distinguere tra gruppi diversi usando la variabile d'ambiente OTEL_RESOURCE_ATTRIBUTES:
# Add custom attributes for team identification
export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"
Questi attributi personalizzati sono inclusi in tutte le metriche e in tutti gli eventi, consentendoti di:
- Filtrare le metriche per team o reparto
- Monitorare i costi per centro di costo
- Creare dashboard specifiche per team
- Configurare avvisi per team specifici
Claude Code associa questi valori come attributi su ogni datapoint delle metriche e su ogni record di evento, oltre a inviarli nel blocco delle risorse OTLP. Poiché la maggior parte dei backend di metriche espone gli attributi dei datapoint come etichette interrogabili, puoi raggruppare e filtrare le metriche direttamente in base alle tue chiavi personalizzate. Ad eccezione degli attributi del repository vcs.*, le chiavi personalizzate non sovrascrivono mai gli attributi standard come user.id o session.id: quando una chiave entra in conflitto, Claude Code mantiene il valore integrato.
Ogni chiave personalizzata diventa un'etichetta su ogni serie di metriche, quindi valori ad alta cardinalità aumentano i costi di archiviazione nel tuo backend di metriche. Per inviare gli attributi personalizzati solo nel blocco delle risorse e ometterli dalle etichette dei datapoint, imposta OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false. Consulta Controllo della cardinalità delle metriche.
[!WARNING]
La variabile d'ambiente
OTEL_RESOURCE_ATTRIBUTESusa coppie key=value separate da virgole con requisiti di formattazione rigorosi:
- Nessuno spazio consentito: i valori non possono contenere spazi. Ad esempio,
user.organizationName=My Companynon è valido- Formato: deve essere composta da coppie key=value separate da virgole:
key1=value1,key2=value2- Caratteri consentiti: solo caratteri US-ASCII esclusi i caratteri di controllo, gli spazi bianchi, le virgolette doppie, le virgole, i punti e virgola e le barre rovesciate
- Caratteri speciali: i caratteri al di fuori dell'intervallo consentito devono essere codificati con percent-encoding
Per un valore che richiederebbe uno spazio, usa invece underscore o camelCase. Gli esempi seguenti impostano
org.namecon ciascuna forma:export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization" export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"Puoi codificare con percent-encoding qualsiasi carattere, non solo quelli esclusi. Questo esempio codifica sia lo spazio sia l'apostrofo:
export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"Racchiudere i valori tra virgolette non esegue l'escape degli spazi. Ad esempio,
org.name="My Company"produce il valore letterale"My Company"con le virgolette incluse, nonMy Company.
Attribuire la telemetria alle sessioni SSH di Desktop
Per vedere su quale macchina remota è stata eseguita una sessione SSH di Desktop, assegna un nome a ogni macchina in un attributo personalizzato. Le metriche e gli eventi non indicano la macchina su cui è stata eseguita una sessione.
Su ogni macchina remota, aggiungi OTEL_RESOURCE_ATTRIBUTES al blocco env che attiva la telemetria, nel file delle impostazioni gestite letto dalla sessione. Scrivi il nome per esteso nel file di ogni macchina. Claude Code non espande il valore, quindi host.name=$(hostname) arriva come quei caratteri.
L'esempio seguente assegna alla macchina il nome build-7:
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317",
"OTEL_RESOURCE_ATTRIBUTES": "host.name=build-7"
}
}
Quando nient'altro imposta la variabile, host.name arriva nel blocco delle risorse, nelle sessioni SSH di Desktop e nella CLI su quella macchina. Per sapere dove altro appaiono gli attributi personalizzati, consulta Supporto per organizzazioni con più team.
Se il nome non arriva, verifica una di queste cause:
- L'hai impostato sul computer che esegue Desktop: Desktop non passa alla sessione SSH un valore impostato lì
- L'hai esportato in
/etc/profileo in un altro file letto solo dalle shell di login: il nome arriva quando eseguiclaudeda una shell di login, ma non in una sessione SSH di Desktop. Desktop non avvia Claude Code tramite una shell di login. Imposta invece la variabile sottoenvnel file delle impostazioni gestite sulla macchina remota. - Un valore contiene uno spazio: in questo caso Claude Code non copia nessuna delle chiavi su eventi o datapoint e non segnala alcun errore. Rimuovi lo spazio dal valore.
- Qualcos'altro imposta già la variabile: in una sessione avviata dall'app desktop, una variabile già impostata nell'ambiente di avvio ha la precedenza sui file delle impostazioni. Il log di debug indica ogni variabile ignorata. Quando un deploy di Desktop di terze parti specifica un endpoint OTLP nell'ambiente che fornisce, quell'ambiente include il proprio
OTEL_RESOURCE_ATTRIBUTESdi Desktop.
Configurazioni di esempio
Imposta queste variabili d'ambiente prima di eseguire claude. Ogni scenario seguente mostra una configurazione completa, e ogni variabile è descritta in Variabili di configurazione comuni. Per confermare che una configurazione sia stata applicata, controlla nel tuo backend la metrica claude_code.session.count dopo aver avviato una sessione; la Guida rapida spiega la verifica dei soli log e cosa controllare quando non arriva nulla.
Per il debug sulla console con un intervallo di esportazione di 1 secondo:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console
export OTEL_METRIC_EXPORT_INTERVAL=1000
Per OTLP su gRPC:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
Per Prometheus, con scraping da http://localhost:9464/metrics:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=prometheus
In un ambiente self-hosted, la sessione si associa alla porta 9464 solo con la capacità predefinita del runner pari a uno. Con una capacità superiore, il runner espone invece nuovamente i contatori e gli indicatori della sessione sul proprio endpoint /metrics.
Per inviare le metriche a più exporter:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console,otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/json
Per inviare metriche e log a endpoint o backend diversi:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://metrics.example.com:4318/v1/metrics
export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317
Per esportare solo le metriche, senza eventi o log:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
Per esportare solo eventi e log, senza metriche:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
Telemetria da sessioni cloud e Claude Tag
Le sessioni cloud, incluse le sessioni del canale Claude Tag, vengono eseguite in ambienti cloud piuttosto che sui dispositivi dei vostri utenti, quindi un file di impostazioni gestito o un profilo shell su quei dispositivi non configura la loro telemetria. Per le sessioni in ambienti ospitati da Anthropic, questa sezione illustra dove impostare le variabili di telemetria, come rendere raggiungibile il vostro collector dall'ambiente e come distinguere le sessioni cloud e Claude Tag nei dati esportati.
Per esportare la telemetria da quelle sessioni, impostate CLAUDE_CODE_ENABLE_TELEMETRY e le variabili OTEL_*, utilizzando le stesse chiavi dell'esempio di configurazione dell'amministratore, in uno di due posti:
- Impostazioni gestite dal server: aggiungetele al blocco
envdelle impostazioni gestite dal server della vostra organizzazione. Claude Code recupera quelle impostazioni all'avvio ovunque si applichino le impostazioni gestite dal server, il che include i dispositivi dei vostri utenti e le sessioni cloud diverse dalle sessioni del canale Claude Tag. Le sessioni Claude Tag non ricevono le vostre impostazioni gestite dal server, quindi questo percorso non le configura. - Le variabili dell'ambiente: aggiungetele alle variabili di ambiente di un ambiente cloud per configurare solo le sessioni eseguite in quell'ambiente. Questo è il percorso che raggiunge le sessioni Claude Tag.
Chiunque utilizzi un ambiente può leggerne le variabili, quindi non inserire lì una credenziale, come un token del collector in OTEL_EXPORTER_OTLP_HEADERS. Nemmeno un segreto di rete sull'ambiente è utile, perché l'esportazione della telemetria di Claude Code stesso è una delle richieste che non ricevono mai il segreto. Se il tuo collector richiede una credenziale, configura invece l'intera esportazione tramite le impostazioni gestite dal server, perché quando imposti lì una credenziale, Claude Code rimuove le variabili di endpoint impostate al di fuori delle impostazioni gestite.
Tenete presenti questi vincoli quando configurate la telemetria per le sessioni cloud:
- Consentire alle sessioni di raggiungere il collector: Claude Code invia l'esportazione attraverso la rete della sessione, quindi se raggiunge l'host nel vostro
OTEL_EXPORTER_OTLP_ENDPOINTdipende dal livello di accesso di rete dell'ambiente. Se le sessioni non riescono a raggiungere il dominio del collector al livello scelto, aggiungete il dominio alla lista di autorizzazione dell'ambiente, perché nessuna impostazione gestita dal server aggiunge domini alla lista di autorizzazione di rete di un ambiente. - Canali Claude Tag: apporta le modifiche all'allowlist e alle variabili d'ambiente sull'ambiente condiviso impostato come predefinito della tua organizzazione o fissato al canale.
- Cowork è configurato separatamente: le sessioni Cowork non ricevono impostazioni gestite dal server, come mostra la tabella di copertura della superficie, quindi il blocco
envgestito dal server non configura la loro telemetria.
Attribuire la telemetria alle sessioni cloud
Per impostazione predefinita, le metriche e gli eventi da una sessione cloud portano gli attributi standard, inclusi session.id, ccr.session.id e organization.id, quindi potete filtrare per sessione o organizzazione senza configurazione aggiuntiva. Il valore ccr.session.id è l'CLAUDE_CODE_REMOTE_SESSION_ID della sessione. Per convertirlo nell'URL della trascrizione della sessione, vedete Collegare l'output alla sessione.
Per distinguere le sessioni cloud, raggruppa o filtra in base a ccr.session.id, non a session.id.
Per attribuire la telemetria in modo più dettagliato, utilizzate queste opzioni:
- Identificare le sessioni Claude Tag: imposta
OTEL_METRICS_INCLUDE_ENTRYPOINT=true, come descritto in Controllo della cardinalità delle metriche. Le metriche e gli eventi portano quindiapp.entrypoint, il cui valore èclaude-in-slackper le sessioni Claude Tag. - Aggiungere attributi personalizzati: impostate
OTEL_RESOURCE_ATTRIBUTESnello stesso posto in cui impostate le altre variabiliOTEL_*per quelle sessioni. Se loexportnello script di configurazione dell'ambiente, il valore non raggiunge Claude Code: lo script di configurazione è uno script Bash separato che viene eseguito prima dell'avvio di Claude Code e le variabili che esporta terminano con esso.
Nelle sessioni del canale Claude Tag, Claude funziona come l'identità condivisa della vostra organizzazione piuttosto che come qualsiasi membro, quindi non affidatevi agli attributi user.* per identificare chi ha taggato Claude.
Metriche ed eventi disponibili
Attributi standard
Tutte le metriche e gli eventi condividono questi attributi standard:
| Attributo | Descrizione | Controllato da |
|---|---|---|
session.id |
L'ID di sessione di Claude Code, che /clear sostituisce |
OTEL_METRICS_INCLUDE_SESSION_ID (predefinito: true) |
ccr.session.id |
Identificatore della sessione cloud, il valore di CLAUDE_CODE_REMOTE_SESSION_ID, nelle sessioni eseguite in un ambiente cloud |
OTEL_METRICS_INCLUDE_SESSION_ID (predefinito: true) |
app.version |
Versione corrente di Claude Code | OTEL_METRICS_INCLUDE_VERSION (predefinito: false) |
app.entrypoint |
Come è stata avviata la sessione, ad esempio cli, sdk-cli, sdk-ts, sdk-py, claude-vscode, claude-desktop per le sessioni della scheda Code di Claude Desktop fuori dal cloud, claude-desktop-3p per le stesse sessioni su un deploy di terze parti, oppure claude-in-slack per le sessioni di Claude Tag. I valori delle sessioni cloud includono remote, più remote_desktop e remote_mobile per le sessioni che avvii da Claude Desktop o dall'app mobile |
OTEL_METRICS_INCLUDE_ENTRYPOINT (predefinito: false) |
organization.id |
UUID dell'organizzazione (quando autenticato) | Sempre incluso quando disponibile |
user.account_uuid |
UUID dell'account (quando autenticato) | OTEL_METRICS_INCLUDE_ACCOUNT_UUID (predefinito: true) |
user.account_id |
ID dell'account nel formato con tag corrispondente alle API di amministrazione di Anthropic (quando autenticato), ad esempio user_01BWBeN28... |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID (predefinito: true) |
user.id |
Identificatore anonimo casuale generato alla prima esecuzione e salvato in ~/.claude.json. Non contiene informazioni personali e non deriva dal tuo account Claude. Eliminando il file si ottiene un nuovo valore non correlato all'esecuzione successiva. |
Sempre incluso |
user.email |
Indirizzo email dell'utente, ricavato dal tuo accesso o, in una sessione cloud, dalle credenziali della sessione stessa | Sempre incluso quando disponibile |
terminal.type |
Tipo di terminale, ad esempio iTerm.app, vscode, cursor o tmux |
Sempre incluso quando rilevato |
Chiavi da OTEL_RESOURCE_ATTRIBUTES |
Attributi personalizzati che imposti, ad esempio department o team.id. Consulta Supporto per organizzazioni con più team |
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES (predefinito: true) |
vcs.repository.url.full, vcs.owner.name, vcs.repository.name, vcs.provider.name |
L'identità del repository della sessione, derivata dal suo remote origin. Consulta Attributi del repository |
OTEL_METRICS_INCLUDE_REPOSITORY (predefinito: false). Richiede Claude Code v2.1.269 o successiva |
Nelle sessioni che hanno eseguito l'accesso a un Claude apps gateway tramite /login, la CLI contrassegna le esportazioni con l'identità autenticata: user.id è il soggetto dell'IdP, user.email è l'email con cui è stato eseguito l'accesso e user.groups contiene l'appartenenza ai gruppi dell'IdP come stringa separata da virgole. Ogni esportazione contiene anche identity.source: gateway-oidc. L'identità del gateway viene applicata per ultima, quindi le chiavi user.* e identity.* impostate tramite OTEL_RESOURCE_ATTRIBUTES vengono ignorate in queste sessioni.
[!NOTE]
Gli eventi che Claude Code registra prima che uno sviluppatore esegua l'accesso non contengono l'identità del gateway. Quando Claude Code apre una sessione senza accesso al gateway, ad esempio dopo che il gateway ha terminato l'accesso, gli eventi di avvio registrati prima dell'accesso contengono lo
user.idanonimo e nessunidentity.source. Tra questi ci sonomanaged_settings_resolved,plugin_loadedemcp_server_connection.
Per gli attributi di identità nelle sessioni di Claude Desktop e Cowork che si connettono tramite un gateway, consulta il riferimento telemetry del gateway.
Gli eventi includono inoltre i seguenti attributi. Questi non vengono mai associati alle metriche perché causerebbero una cardinalità illimitata:
prompt.id: UUID che correla un prompt dell'utente con tutti gli eventi successivi fino al prompt seguente. Consulta Attributi di correlazione degli eventi.workspace.host_paths: directory del workspace host selezionate nell'app desktop, come array di stringheworkflow.run_id: identificatore dell'esecuzione, con prefissowf_, negli eventi API e degli strumenti emessi dagli agenti che appartengono a un'esecuzione dello strumento Workflow. Filtrando gli eventi per un singoloworkflow.run_idsi ricostruiscono le richieste API e i risultati degli strumenti di quell'esecuzione. L'identificatore copre gli agenti generati dallo script del workflow e tutti gli agenti che questi generano a loro volta, come le invocazioni di skill. Corrisponde all'identificatore dell'esecuzione riportato nel risultato dello strumento Workflow.workflow.name: nome del workflow, ilmeta.namedel suo script, emesso insieme aworkflow.run_id. I nomi dei workflow integrati compaiono testualmente quando l'esecuzione usa lo script integrato non modificato. I nomi creati dagli utenti, incluse le copie modificate degli script integrati, vengono sostituiti concustoma meno che non sia impostatoOTEL_LOG_TOOL_DETAILS=1.agent_id: identificatore del subagent che ha generato l'evento, comea3f2c1b4d5e6f7a80. Gli eventi che lo contengono includono gli eventi API e degli strumenti di un subagent, i suoi eventiassistant_responseesubagent_completedper il subagent terminato. Assente negli eventi della sessione principale e dei compagni di team in-process. L'agent_iddello span del subagent è lo stesso valore, oppure aggiunge un'etichetta dopo laainiziale come inacompact-3f2c1b4d5e6f7a80. Richiede Claude Code v2.1.310 o successivoparent_agent_id: l'agent_iddell'agente che ha generato o ripreso per ultimo il subagent che ha generato l'evento. Assente quando quell'agente è la sessione principale. Richiede Claude Code v2.1.310 o successivo
Attributi del repository
Imposta OTEL_METRICS_INCLUDE_REPOSITORY=true per contrassegnare metriche ed eventi con l'identità del repository della sessione, in modo che un collector condiviso possa attribuire l'utilizzo per repository. Richiede Claude Code v2.1.269 o successiva.
Claude Code deriva questi attributi una volta per sessione dal remote origin del repository. Quando i remote HTTPS e SSH di un repository indicano lo stesso host e lo stesso percorso, come avviene su GitHub, GitLab e Bitbucket Cloud, entrambi producono valori identici:
| Attributo | Valore |
|---|---|
vcs.repository.url.full |
L'URL del repository nel browser senza .git, ad esempio https://github.com/example-org/example-repo |
vcs.owner.name |
Il percorso del proprietario o del gruppo, ad esempio example-org; omesso quando il percorso del remote ha un solo segmento |
vcs.repository.name |
Il nome semplice del repository, ad esempio example-repo |
vcs.provider.name |
github, gitlab, bitbucket o gitea quando Claude Code riconosce l'host o la forma dell'URL del remote come uno di questi provider; omesso altrimenti |
I valori sono in minuscolo e credenziali, query string e frammenti dell'URL del remote non vi compaiono mai. Gli attributi vengono omessi quando la sessione non ha un remote origin, quando il remote non ha la forma di un URL o quando l'unico repository che la contiene è la tua directory home.
Per ottenere questi attributi da una sessione cloud, imposta le variabili di telemetria, incluso OTEL_METRICS_INCLUDE_REPOSITORY, nel suo ambiente cloud. Consenti inoltre il dominio del tuo collector nell'accesso alla rete dell'ambiente.
Una chiave vcs.* che dichiari in OTEL_RESOURCE_ATTRIBUTES sostituisce il valore derivato per quella chiave. Se dichiari vcs.repository.url.full, Claude Code non legge mai il remote e riporta solo le chiavi che dichiari.
Se i clone HTTPS e SSH di uno stesso repository riportano valori diversi, ad esempio in un'installazione self-hosted il cui URL di clone HTTPS contiene un prefisso di percorso assente nell'URL SSH, dichiara vcs.repository.url.full in OTEL_RESOURCE_ATTRIBUTES insieme a tutte le altre chiavi vcs.* che vuoi riportare. Ogni clone riporterà quindi l'identità che dichiari.
Gli attributi arrivano solo ai tuoi exporter; la telemetria di Anthropic scarta ogni chiave vcs.*.
Metriche
Claude Code esporta le seguenti metriche. La colonna Unità mostra la stringa dell'unità OpenTelemetry associata a ciascuna metrica; le metriche di conteggio non ne hanno.
| Nome della metrica | Descrizione | Unità |
|---|---|---|
claude_code.session.count |
Conteggio delle sessioni avviate | nessuna |
claude_code.lines_of_code.count |
Conteggio delle righe di codice modificate | nessuna |
claude_code.pull_request.count |
Numero di pull request create | nessuna |
claude_code.commit.count |
Numero di commit git creati | nessuna |
claude_code.cost.usage |
Costo della sessione di Claude Code | USD |
claude_code.token.usage |
Numero di token utilizzati | tokens |
claude_code.code_edit_tool.decision |
Conteggio delle decisioni sui permessi degli strumenti di modifica del codice | nessuna |
claude_code.active_time.total |
Tempo attivo totale | s |
Quando prometheus è l'unico exporter elencato in OTEL_METRICS_EXPORTER, Claude Code omette le unità USD, tokens e s dalle metriche esportate, in modo che lo scrape resti in formato testo Prometheus valido. I nomi delle metriche non cambiano, e le configurazioni che combinano più exporter, come otlp,prometheus, mantengono le unità.
Dettagli delle metriche
Ogni metrica include gli attributi standard elencati sopra. Le metriche con attributi aggiuntivi specifici del contesto sono indicate di seguito.
Contatore delle sessioni
Incrementato all'inizio di ogni sessione. Per contare invece le persone, consulta Monitoraggio dell'utilizzo.
Attributi:
- Tutti gli attributi standard
start_type: Modo in cui è stata avviata la sessione. Uno tra"fresh","resume","continue"o"agents_view". Il valore"agents_view"identifica il processo della dashboardclaude agents, un'interfaccia locale avviata dall'utente e non una sessione conversazionale. Filtra su questo valore per separare gli avvii dei processi dell'interfaccia dalle sessioni conversazionali nelle tue dashboard.
Contatore delle righe di codice
Incrementato quando viene aggiunto o rimosso codice.
Attributi:
- Tutti gli attributi standard
type: ("added","removed")model: Identificatore del modello che ha apportato la modifica (ad esempio, "claude-sonnet-5")
Contatore delle pull request
Incrementato quando Claude Code crea una pull request o una merge request tramite un comando shell o uno strumento MCP.
Attributi:
- Tutti gli attributi standard
Contatore dei commit
Incrementato quando vengono creati commit git tramite Claude Code.
Attributi:
- Tutti gli attributi standard
Contatore dei costi
Incrementato dopo ogni richiesta API.
Per impostazione predefinita, gli attributi agent.name, skill.name, plugin.name, mcp_server.name e mcp_tool.name oscurano alcuni nomi sostituendoli con un segnaposto "custom" o "third-party". Se imposti OTEL_LOG_TOOL_DETAILS=1, contengono invece i nomi reali. Prima della v2.1.273, i contatori di costi e token e gli eventi api_request, api_error e api_refusal contenevano i valori oscurati anche con OTEL_LOG_TOOL_DETAILS=1 impostato.
Attributi:
- Tutti gli attributi standard
model: Identificatore del modello (ad esempio, "claude-sonnet-5")query_source: Categoria del sottosistema che ha emesso la richiesta. Uno tra"main","subagent"o"auxiliary"speed:"fast"quando la richiesta ha usato la modalità veloce. Assente altrimentieffort: Livello di sforzo applicato alla richiesta:"low","medium","high","xhigh"o"max". Assente quando Claude Code non invia alcun livello di sforzo, ad esempio con un modello che non supporta lo sforzo.agent.name: Tipo di subagent che ha emesso la richiesta. I nomi degli agenti integrati e degli agenti dei plugin del marketplace ufficiale compaiono testualmente. Gli altri nomi di agenti definiti dall'utente vengono sostituiti con"custom". Assente quando la richiesta non è stata emessa da un tipo di subagent con nome.skill.name: Skill attiva per la richiesta, impostata dallo strumento Skill o da un comando/, oppure ereditata da un subagent generato. I nomi delle skill integrate, incluse nel pacchetto, definite dall'utente e dei plugin del marketplace ufficiale compaiono testualmente. I nomi delle skill dei plugin di terze parti vengono sostituiti con"third-party". Assente quando nessuna skill è attiva.plugin.name: Plugin proprietario quando la skill o il subagent attivo è fornito da un plugin. I nomi dei plugin del marketplace ufficiale compaiono testualmente. I nomi dei plugin di terze parti vengono sostituiti con"third-party". Assente quando né la skill né il subagent hanno un plugin proprietario.marketplace.name: Marketplace da cui è stato installato il plugin proprietario. Emesso solo per i plugin del marketplace ufficiale, anche conOTEL_LOG_TOOL_DETAILS=1impostato. Assente altrimenti.mcp_server.name: Server MCP il cui risultato dello strumento è stato consumato da questa richiesta. I nomi dei server integrati, tramite proxy di claude.ai e del registro ufficiale compaiono testualmente. I nomi dei server configurati dall'utente vengono sostituiti con"custom". Assente quando la richiesta non ha consumato alcun risultato di uno strumento MCP. Prima della v2.1.222, Claude Code impostava questo attributo su ogni richiesta successiva a una chiamata a uno strumento MCP, non solo sulle richieste che consumavano un risultato dello strumento, quindi le dashboard che lo aggregano mostrano un calo dopo l'aggiornamento.mcp_tool.name: Strumento MCP il cui risultato è stato consumato da questa richiesta, con lo stesso comportamento di oscuramento e di versione dimcp_server.name. Assente quando la richiesta non ha consumato alcun risultato di uno strumento MCP.
Contatore dei token
Incrementato dopo ogni richiesta API.
Attributi:
- Tutti gli attributi standard
type: ("input","output","cacheRead","cacheCreation"). Il tipo"input"esclude i token letti dalla cache dei prompt o scritti in essa, che vengono conteggiati in"cacheRead"e"cacheCreation". Il tipo"cacheCreation"conteggia insieme le scritture nella cache con le durate della cache di cinque minuti e di un'ora.model: Identificatore del modello (ad esempio, "claude-sonnet-5")query_source: Categoria del sottosistema che ha emesso la richiesta. Uno tra"main","subagent"o"auxiliary"speed:"fast"quando la richiesta ha usato la modalità veloce. Assente altrimentieffort: Livello di sforzo applicato alla richiesta. Consulta Contatore dei costi per i dettagli.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Attribuzione di skill, plugin, agente e MCP per la richiesta. Consulta Contatore dei costi per le definizioni e il comportamento di oscuramento.
Contatore delle decisioni sugli strumenti di modifica del codice
Incrementato quando l'utente accetta o rifiuta l'uso degli strumenti Edit, Write o NotebookEdit.
Attributi:
- Tutti gli attributi standard
tool_name: Nome dello strumento ("Edit","Write","NotebookEdit")decision: Decisione dell'utente ("accept","reject")source: Provenienza della decisione. Uno tra"config","hook","user_permanent","user_temporary","user_abort"o"user_reject". Consulta l'evento di decisione sullo strumento per il significato di ciascun valore.language: Linguaggio di programmazione del file modificato, ad esempio"TypeScript","Python","JavaScript"o"Markdown". Restituisce"unknown"per le estensioni di file non riconosciute.
Contatore del tempo attivo
Tiene traccia del tempo effettivamente trascorso a usare attivamente Claude Code, escluso il tempo di inattività. Questa metrica viene incrementata durante le interazioni dell'utente, come la digitazione e la lettura delle risposte, e durante l'elaborazione della CLI, come l'esecuzione degli strumenti e la generazione delle risposte dell'IA.
Attributi:
- Tutti gli attributi standard
type:"user"per le interazioni da tastiera,"cli"per l'esecuzione degli strumenti e le risposte dell'IA
Eventi
Claude Code esporta i seguenti eventi tramite log/eventi OpenTelemetry (quando OTEL_LOGS_EXPORTER è configurato):
Attributi di correlazione degli eventi
Quando un utente invia un prompt, Claude Code può effettuare più chiamate API ed eseguire diversi strumenti. L'attributo prompt.id ti consente di ricondurre tutti questi eventi al singolo prompt che li ha generati.
| Attributo | Descrizione |
|---|---|
prompt.id |
Identificatore UUID v4 che collega tutti gli eventi prodotti durante l'elaborazione di un singolo prompt dell'utente |
event.sequence |
Contatore a base 0 per ordinare gli eventi, conteggiato per processo di Claude Code anziché per sessione |
message.uuid |
UUID del messaggio così come salvato nella trascrizione della sessione, i file ~/.claude/projects/*/*.jsonl. Presente in assistant_response, in api_response_body e in user_prompt tranne che per l'invio di comandi, che può produrre zero o più messaggi. In assistant_response e api_response_body, è la voce finale della trascrizione della risposta, da cui si concatena il parentUuid del turno successivo. Richiede Claude Code v2.1.274 o successiva in api_response_body |
request_id |
ID della richiesta API assegnato dal server, letto dall'header di risposta request-id, come req_011.... In una risposta senza header request-id, come su Amazon Bedrock, il valore proviene invece dall'header x-amzn-requestid. Presente in api_request, api_error, api_refusal, assistant_response, api_response_body, tool_result e tool_decision quando la risposta contiene uno dei due header. Corrisponde allo stesso attributo nello span di traccia llm_request. L'origine x-amzn-requestid richiede Claude Code v2.1.282 o successivo |
client_request_id |
UUID generato dal client e inviato come header di richiesta x-client-request-id. Presente in api_request e api_error nelle connessioni API first-party; assente nei backend di provider di terze parti e quando la richiesta è stata riprovata tramite il fallback non in streaming. Associa una richiesta alla sua risposta e resta disponibile per errori come i timeout che non hanno mai prodotto un request_id del server. Corrisponde allo stesso attributo dello span di trace llm_request |
Per tracciare tutta l'attività generata da un singolo prompt, filtra i tuoi eventi per uno specifico valore di prompt.id. In questo modo ottieni l'evento user_prompt, tutti gli eventi api_request e tutti gli eventi tool_result verificatisi durante l'elaborazione di quel prompt.
event.sequence parte da 0 ogni volta che si avvia un processo di Claude Code e aumenta per tutta la durata di quel processo. Continua a contare anche dopo /clear, che assegna un nuovo session.id. Se riprendi una sessione senza fork, la sessione mantiene il suo session.id ma prende i valori di event.sequence dal processo che l'ha ripresa, quindi all'interno di una sessione un evento successivo può avere un valore inferiore a uno precedente, o ripeterlo. Per ordinare gli eventi di una sessione, ordina per event.timestamp e usa event.sequence per ordinare gli eventi che condividono lo stesso timestamp.
Per la ricostruzione a livello di messaggio, ogni classe di eventi contiene una chiave che corrisponde a un campo della trascrizione della sessione. Il formato delle voci della trascrizione è interno a Claude Code e cambia tra le versioni, quindi una pipeline che esegue join su questi campi può rompersi a ogni release; considera i join come specifici della versione anziché come un contratto stabile:
message.uuidinuser_prompt,assistant_responseeapi_response_bodyrequest_idnegli eventi API, salvato comerequestIdnelle voci dell'assistente della trascrizionetool_use_idnegli eventitool_resultetool_decision, e negli eventisafety_eventeccetto quelli per la fine di un turno
Evento del prompt dell'utente
Registrato quando viene inviato un prompt, inclusi i turni che Claude Code avvia autonomamente.
Nome dell'evento: claude_code.user_prompt
Attributi:
- Tutti gli attributi standard
event.name:"user_prompt"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventiprompt_length: Lunghezza del promptprompt: Contenuto del prompt. Oscurato per impostazione predefinita. ImpostaOTEL_LOG_USER_PROMPTS=1per includerloprompt_text: Stesso valore diprompt, oscurato con la stessa condizione. Un backend che memorizza i nomi di attributi con punti come oggetti annidati leggeprompt.idcomeidall'interno di un oggetto chiamatoprompte può perdere la stringa del prompt. In quel caso leggi inveceprompt_text. Richiede Claude Code v2.1.287 o successivamessage.uuid: UUID del messaggio utente risultante, corrispondente alla voce salvata nella trascrizione. Assente nell'invio di comandi, che può produrre zero o più messaggi.command_name: Nome del comando quando il prompt ne invoca uno. I nomi dei comandi integrati e inclusi nel pacchetto, comecompactodebug, vengono emessi così come sono; gli alias comeresetvengono emessi come digitati anziché con il nome canonico. I nomi dei comandi personalizzati, dei plugin e MCP vengono ridotti acustomomcpa meno che non sia impostatoOTEL_LOG_TOOL_DETAILS=1command_source: Origine del comando, quando presente:builtin,customomcp. I comandi forniti dai plugin vengono riportati comecustom
Evento della risposta dell'assistente
Registrato dopo ogni richiesta API che restituisce contenuto testuale dal modello. Sono inclusi solo i blocchi di testo della risposta; i blocchi di ragionamento e di uso degli strumenti sono esclusi.
Nome dell'evento: claude_code.assistant_response
Attributi:
- Tutti gli attributi standard
event.name:"assistant_response"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventiresponse_length: Lunghezza del testo della risposta in caratteriresponse: Testo della risposta, troncato al limite del contenuto (60 KB per impostazione predefinita). Oscurato come<REDACTED>per impostazione predefinita. ImpostaOTEL_LOG_ASSISTANT_RESPONSES=1per includerlo. QuandoOTEL_LOG_ASSISTANT_RESPONSESnon è impostato, lo controlla inveceOTEL_LOG_USER_PROMPTS, quindi impostaOTEL_LOG_ASSISTANT_RESPONSES=0per mantenere oscurate le risposte mentre la registrazione dei prompt è attivamodel: Identificatore del modello (ad esempio, "claude-sonnet-5")request_id: ID della richiesta API, descritto in Attributi di correlazione degli eventimessage.uuid: UUID della voce finale della trascrizione della risposta. Una risposta API viene salvata come una voce della trascrizione per ogni blocco di contenuto; questa è l'ultima, da cui si concatena ilparentUuiddel turno successivo.query_source: Sottosistema che ha emesso la richiesta, ad esempio"repl_main_thread","compact"o il nome di un subagent
Evento del risultato dello strumento
Registrato quando uno strumento completa l'esecuzione. Non viene emesso se la chiamata allo strumento è stata rifiutata; per i rifiuti consulta l'evento di decisione sullo strumento.
Nome dell'evento: claude_code.tool_result
Attributi:
- Tutti gli attributi standard
event.name:"tool_result"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventitool_name: Nome dello strumentotool_use_id: Identificatore univoco di questa invocazione dello strumento. Corrisponde altool_use_idpassato agli hook, consentendo la correlazione tra gli eventi OTel e i dati acquisiti dagli hook.request_id: ilrequest_iddella risposta API che conteneva questa chiamata allo strumento, così puoi collegare la chiamata agli eventi API di quella risposta. Assente quando quella risposta non aveva un ID di richiesta o quando nessuna risposta API conteneva la chiamata. Richiede Claude Code v2.1.310 o successivosuccess:"true"o"false"duration_ms: Tempo di esecuzione in millisecondierror_type: Stringa della categoria di errore quando lo strumento non è riuscito, ad esempio"Error:ENOENT"o"ShellError"error(quandoOTEL_LOG_TOOL_DETAILS=1): Messaggio di errore completo quando lo strumento non è riuscitodecision_type: Sempre"accept", poiché questo evento viene emesso solo dopo l'esecuzione dello strumento. Le chiamate rifiutate non producono un risultato dello strumentodecision_source: Provenienza della decisione sul permesso. Uno tra"config","hook","user_permanent"o"user_temporary". Consulta l'evento di decisione sullo strumento per il significato di ciascun valore. Le fonti esclusive dei rifiuti"user_abort"e"user_reject"non compaiono mai in questo evento.tool_input_size_bytes: Dimensione in byte dell'input dello strumento serializzato in JSONtool_result_size_bytes: Dimensione in byte del risultato dello strumentomcp_server_scope: Identificatore dell'ambito del server MCP (per gli strumenti MCP)vcs.ref.head.revision,vcs.ref.head.name,vcs.ref.head.type(quandoOTEL_LOG_TOOL_DETAILS=1): l'identità del commit di ungit commitriuscito eseguito dallo strumento Bash o PowerShell.vcs.ref.head.revisionè lo SHA del commit,vcs.ref.head.nameè il branch su cui è stato eseguito il commit evcs.ref.head.typeèbranch. Il nome e il tipo vengono omessi quando il commit è stato eseguito su un HEAD scollegato. Richiede Claude Code v2.1.269 o successivatool_parameters(quandoOTEL_LOG_TOOL_DETAILS=1): Stringa JSON contenente i parametri specifici dello strumento. Per i server integrati di Claude Desktop, nelle sessioni di proprietà di Claude Desktop, la coppiamcp_server_name/mcp_tool_nameè inclusa anche con il flag disattivato, la stessa eccezione definita dall'host dell'evento di decisione sullo strumento. I parametri variano a seconda dello strumento:- Per lo strumento Bash: include
bash_command,full_command,timeout,descriptionedangerouslyDisableSandbox, piùgit_commit_idegit_branchquando un comandogit commitriesce.git_commit_idè lo SHA completo del commit quando il commit è l'HEAD della directory di lavoro della sessione, e lo SHA abbreviato di git altrimenti.git_branchè il branch su cui è stato eseguito il commit, omesso su un HEAD scollegato - Per lo strumento Bash del workspace dell'app desktop, che riporta anch'esso
tool_namecomeBash: include solobash_command,full_commandetimeout - Per gli strumenti MCP: include
mcp_server_name,mcp_tool_name - Per lo strumento Skill: include
skill_name - Per lo strumento Agent o il precedente strumento Task: include
subagent_type
- Per lo strumento Bash: include
tool_input(quandoOTEL_LOG_TOOL_DETAILS=1): Argomenti dello strumento serializzati in JSON. I singoli valori oltre 512 caratteri vengono troncati e il payload completo è limitato a circa 4 K caratteri. Si applica a tutti gli strumenti, inclusi gli strumenti MCP.
Evento di richiesta API
Registrato per ogni richiesta API a Claude.
Nome dell'evento: claude_code.api_request
Attributi:
- Tutti gli attributi standard
event.name:"api_request"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventimodel: Modello utilizzato (ad esempio, "claude-sonnet-5")cost_usd: Costo stimato in USDcost_usd_micros: Costo stimato in milionesimi di dollaro statunitense, emesso come interoduration_ms: Durata della richiesta in millisecondiinput_tokens: Numero di token di input, esclusi i token letti dalla cache dei prompt o scritti in essaoutput_tokens: Numero di token di outputcache_read_tokens: Numero di token letti dalla cachecache_creation_tokens: Numero di token utilizzati per la creazione della cachecache_creation_5m_tokens,cache_creation_1h_tokens: il numero di token che la risposta API riporta come scritti nella cache con una durata della cache di cinque minuti e il numero di quelli scritti con una durata di un'ora. Entrambi valgono0quando la risposta API non li riporta, anche quandocache_creation_tokensè maggiore di zero. Richiede Claude Code v2.1.300 o successivarequest_id: ID della richiesta API, ad esempio"req_011...", descritto in Attributi di correlazione degli eventi.client_request_id: UUID generato dal client e inviato come header di richiestax-client-request-id; consulta la tabella degli attributi di correlazione degli eventi per sapere quando è presentespeed:"fast"o"normal", a indicare se la modalità veloce era attivaquery_source: Sottosistema che ha emesso la richiesta, ad esempio"repl_main_thread","compact"o il nome di un subagenteffort: Livello di sforzo applicato alla richiesta:"low","medium","high","xhigh"o"max". Assente quando Claude Code non invia alcun livello di sforzo, ad esempio con un modello che non supporta lo sforzo.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Attribuzione di skill, plugin, agente e MCP per la richiesta. Consulta Contatore dei costi per le definizioni e il comportamento di oscuramento.
Evento di errore API
Registrato quando una richiesta API a Claude non riesce.
Nome dell'evento: claude_code.api_error
Attributi:
- Tutti gli attributi standard
event.name:"api_error"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventimodel: Modello utilizzato (ad esempio, "claude-sonnet-5")error: Messaggio di errorestatus_code: Codice di stato HTTP come numero. Assente per errori non HTTP, come gli errori di connessione.duration_ms: Durata della richiesta in millisecondiattempt: Numero di tentativi effettuati, inclusa la richiesta iniziale. Rilevare l'esaurimento dei nuovi tentativi indica quando il conteggio ricominciarequest_id: ID della richiesta API, ad esempio"req_011...", descritto in Attributi di correlazione degli eventi.client_request_id: UUID generato dal client e inviato come header di richiestax-client-request-id. Disponibile anche quando un errore come un timeout o un errore di connessione non ha mai prodotto unrequest_iddel server; consulta la tabella degli attributi di correlazione degli eventi per sapere quando è presente.speed:"fast"o"normal", a indicare se la modalità veloce era attivaquery_source: Sottosistema che ha emesso la richiesta, ad esempio"repl_main_thread","compact"o il nome di un subagenteffort: Livello di sforzo applicato alla richiesta. Assente quando Claude Code non invia alcun livello di sforzo, ad esempio con un modello che non supporta lo sforzo.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Attribuzione di skill, plugin, agente e MCP per la richiesta. Consulta Contatore dei costi per le definizioni e il comportamento di oscuramento.
Evento di rifiuto API
Registrato quando una richiesta API restituisce stop_reason: "refusal". I rifiuti arrivano in uno stream di risposta riuscito anziché come errore HTTP, quindi l'evento api_error non viene attivato per essi. Questo evento ti consente di monitorare la frequenza dei rifiuti e di raggrupparli per gli stessi attributi di api_request e api_error.
Nome dell'evento: claude_code.api_refusal
Attributi:
- Tutti gli attributi standard
event.name:"api_refusal"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventimodel: Identificatore del modello dalla richiestarequest_id: ID della richiesta API, ad esempio"req_011...", descritto in Attributi di correlazione degli eventi.query_source: Sottosistema che ha emesso la richiesta, ad esempio"repl_main_thread","compact"o il nome di un subagent. Consultaapi_requestper le definizioni.speed:"fast"quando la modalità veloce è attiva, oppure"normal"attempt: Numero del tentativo. Il primo tentativo è1.effort: Livello di sforzo applicato alla richiesta. Assente quando Claude Code non invia alcun livello di sforzo, ad esempio con un modello che non supporta lo sforzo.server_fallback_hop:truequando il fallback del modello lato server dell'API ha già riprovato questo rifiuto su un modello diverso, quindi l'utente non ha visto questo particolare rifiuto.falsequando la richiesta si è conclusa con un rifiuto. Un singolo turno può emettere sia un evento di passaggiotruesia un successivo evento finalefalsequando anche il modello di fallback rifiuta.has_category:truequando la risposta API conteneva unstop_details.categorycon valore"cyber","bio","frontier_llm"o"reasoning_extraction".falsequando la risposta non conteneva alcuna categoria o un valore al di fuori di questo insieme. Assente quandoserver_fallback_hopètrue, perché i blocchi di passaggio non contengonostop_details.has_explanation:truequando la risposta API conteneva unstop_details.explanation, altrimentifalse. Assente quandoserver_fallback_hopètrue.category: Il valorestop_details.categorydalla risposta API. Uno tra"cyber","bio","frontier_llm"o"reasoning_extraction". Presente solo quando è impostatoOTEL_LOG_TOOL_DETAILS=1ehas_categoryètrue.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Attribuzione di skill, plugin, agente e MCP per la richiesta. Consulta Contatore dei costi per le definizioni e il comportamento di oscuramento.
Evento del corpo della richiesta API
Registrato per ogni tentativo di richiesta API quando OTEL_LOG_RAW_API_BODIES è impostato. Viene emesso un evento per tentativo, quindi i nuovi tentativi con parametri modificati producono ciascuno il proprio evento.
Nome dell'evento: claude_code.api_request_body
Attributi:
- Tutti gli attributi standard
event.name:"api_request_body"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventibody: Parametri della richiesta Messages API serializzati in JSON, come il prompt di sistema, i messaggi e gli strumenti, troncati al limite del contenuto (60 KB per impostazione predefinita). Il contenuto del ragionamento esteso nei turni precedenti dell'assistente viene oscurato. Emesso solo in modalità inline (OTEL_LOG_RAW_API_BODIES=1).body_ref: Percorso assoluto di un file<dir>/<uuid>.request.jsoncontenente il corpo non troncato. Emesso solo in modalità file (OTEL_LOG_RAW_API_BODIES=file:<dir>).body_length: Lunghezza del corpo non troncato. Byte UTF-8 quandoOTEL_LOG_RAW_API_BODIES=file:<dir>, oppure unità di codice UTF-16 quando=1body_truncated:"true"quando si è verificato un troncamento inline. Assente in modalità file e quando non si è verificato alcun troncamento.model: Identificatore del modello dai parametri della richiestaquery_source: Sottosistema che ha emesso la richiesta (ad esempio,"compact")request_body_id: UUID che identifica il corpo della richiesta di questo tentativo. L'eventoapi_response_bodydel tentativo riuscito contiene lo stesso valore, così puoi associare una risposta alla richiesta esatta che l'ha prodotta. Richiede Claude Code v2.1.274 o successiva
Evento del corpo della risposta API
Registrato per ogni risposta API riuscita quando OTEL_LOG_RAW_API_BODIES è impostato.
In modalità file (OTEL_LOG_RAW_API_BODIES=file:<dir>), Claude Code aggiunge anche una riga JSON a <dir>/index.jsonl per ogni risposta riuscita, con i campi timestamp, session_id, query_source, model, request_id, message_id, message_uuid, request_file e response_file. Leggilo per trovare i file di richiesta e risposta dietro un determinato messaggio della trascrizione senza interrogare il tuo backend di telemetria. Il file di indice richiede Claude Code v2.1.274 o successiva.
Nome dell'evento: claude_code.api_response_body
Attributi:
- Tutti gli attributi standard
event.name:"api_response_body"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventibody: Risposta della Messages API serializzata in JSON, inclusi id, blocchi di contenuto, utilizzo e motivo di arresto, troncata al limite del contenuto (60 KB per impostazione predefinita). Il contenuto del ragionamento esteso viene oscurato. Emesso solo in modalità inline (OTEL_LOG_RAW_API_BODIES=1).body_ref: Percorso assoluto di un file<dir>/<request_id>.response.jsoncontenente il corpo non troncato. Emesso solo in modalità file (OTEL_LOG_RAW_API_BODIES=file:<dir>).body_length: Lunghezza del corpo non troncato. Byte UTF-8 quandoOTEL_LOG_RAW_API_BODIES=file:<dir>, oppure unità di codice UTF-16 quando=1body_truncated:"true"quando si è verificato un troncamento inline. Assente in modalità file e quando non si è verificato alcun troncamento.model: Identificatore del modelloquery_source: Sottosistema che ha emesso la richiestarequest_id: ID della richiesta API, ad esempio"req_011...", descritto in Attributi di correlazione degli eventi.request_body_id: Ilrequest_body_iddell'eventoapi_request_bodya cui risponde questa risposta. Richiede Claude Code v2.1.274 o successivamessage.id: ID del messaggio assegnato dall'API alla risposta, il campoiddel corpo della risposta. Richiede Claude Code v2.1.274 o successivamessage.uuid: UUID della voce finale della trascrizione della risposta. Insieme arequest_body_id, collega un messaggio della trascrizione ai corpi di richiesta e risposta che lo hanno generato. Richiede Claude Code v2.1.274 o successiva
Evento di decisione sullo strumento
Registrato quando viene presa una decisione sul permesso di uno strumento (accettazione/rifiuto).
Nome dell'evento: claude_code.tool_decision
Attributi:
-
Tutti gli attributi standard
-
event.name:"tool_decision" -
event.timestamp: Timestamp ISO 8601 -
event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventi -
tool_name: Nome dello strumento (ad esempio, "Read", "Edit", "Write", "NotebookEdit") -
tool_use_id: Identificatore univoco di questa invocazione dello strumento. Corrisponde altool_use_idpassato agli hook, consentendo la correlazione tra gli eventi OTel e i dati acquisiti dagli hook. -
request_id: ilrequest_iddella risposta API che conteneva questa chiamata allo strumento, così puoi collegare la chiamata agli eventi API di quella risposta. Assente quando quella risposta non aveva un ID di richiesta o quando nessuna risposta API conteneva la chiamata. Richiede Claude Code v2.1.310 o successivo -
decision:"accept"oppure"reject" -
tool_source: Sempre presente. La provenienza dello strumento, come insieme chiuso di valori definiti dalla CLI:"builtin": gli strumenti propri della CLI"mcp": server MCP in generale"sdk_host_builtin_mcp": un server in-process integrato in Claude Desktop stesso, in una sessione di proprietà di Claude Desktop. Claude Desktop possiede una sessione che ha avviato da uno dei propri entrypoint,claude-desktop,claude-desktop-3polocal-agent, quando tale sessione non è un figlio annidato; le sessioni annidate, incluse quelle generate da Claude Code stesso, riportano questi server come"mcp"
-
source: Provenienza della decisione:-
"config": Decisione presa automaticamente senza chiedere, da una di queste fonti:- Impostazioni del progetto
- Regole di consenso o di negazione nelle impostazioni personali dell'utente
- Criterio gestito aziendale
- Flag
--allowedToolso--disallowedTools - La modalità di permesso attiva
- Il classificatore della modalità auto, il cui verdetto viene registrato dallo stesso evento in
classifier_verdict - Una concessione per il resto della sessione, data in una precedente richiesta di permesso nella stessa sessione interattiva della CLI
- Lo strumento intrinsecamente sicuro
Il valore
sourcenon indica quale di queste origini ha avuto corrispondenza. Per scoprire quale ha rifiutato una chiamata, cerca l'evento di sicurezza con lo stessotool_use_ide leggi i suoi attributicategoryerule_source. Alcune chiamate rifiutate non hanno un evento di sicurezza.Claude Code riporta
"config"anche quando la richiesta di permesso stessa non riesce. Ad esempio, quella richiesta non riesce quando il callbackcanUseTooldell'Agent SDK o lo strumento--permission-prompt-toolrestituisce un risultato non valido, o quando lo stream di input si chiude mentre la richiesta è in sospeso. -
"hook": Un hookPreToolUseoPermissionRequestha restituito la decisione. -
"user_permanent": Emesso quando l'utente ha scelto "Yes, and don't ask again for ..." in una richiesta di permesso, il che salva una regola di consenso nelle sue impostazioni personali. Nella CLI interattiva viene emesso solo per quella scelta; le chiamate successive che corrispondono alla regola salvata emettono invece"config". Nelle sessioni dell'Agent SDK o non interattive-p, sia la scelta iniziale sia le successive corrispondenze alla regola emettono"user_permanent". Trattato come un'accettazione. -
"user_temporary": Emesso quando l'utente ha scelto "Yes" in una richiesta di permesso per un'approvazione una tantum, o ha scelto un'opzione che concede l'accesso per il resto della sessione in una richiesta di modifica o lettura di file. Nella CLI interattiva viene emesso solo per la scelta stessa; le chiamate successive consentite da quella concessione limitata alla sessione emettono invece"config". Nelle sessioni dell'Agent SDK o non interattive-p, sia la scelta sia le corrispondenze successive emettono"user_temporary". Trattato come un'accettazione. -
"user_abort": Emesso quando l'utente ha chiuso la richiesta di permesso senza rispondere. Nelle sessioni dell'Agent SDK e non interattive-p, questo include l'interruzione del turno mentre è in sospeso una richiesta di permessocanUseToolo--permission-prompt-tool. Trattato come un rifiuto. -
"user_reject": Emesso quando l'utente ha scelto "No" quando gli è stato chiesto. Nella CLI interattiva viene emesso solo per quella scelta; le chiamate che corrispondono a una regola di negazione nelle impostazioni personali dell'utente emettono invece"config". Nelle sessioni dell'Agent SDK o non interattive-p, le chiamate che corrispondono a una regola di negazione nelle impostazioni personali emettono"user_reject". Trattato come un rifiuto.
-
-
classifier_verdict: Il verdetto del classificatore della modalità auto per la chiamata, oppure il motivo per cui Claude Code ha negato la chiamata quando non è arrivato alcun verdetto. Richiede Claude Code v2.1.301 o successiva"allow": il classificatore ha approvato la chiamata"block": il classificatore ha bloccato la chiamata. Anche un controllo del classificatore che non riesce a metà può concludersi come"block", quindi un'interruzione parziale del classificatore può apparire come un aumento dei blocchi anziché come"unavailable""no_verdict": il controllo è stato eseguito ma non ha dato alcun verdetto utilizzabile, quindi Claude Code ha negato la chiamata. La negazione non significa che il classificatore abbia ritenuto la chiamata non sicura"unavailable": la richiesta al classificatore non è riuscita, ad esempio per un rate limit, un timeout o un errore di connessione, quindi Claude Code ha negato la chiamata. Con la revisione del classificatore lato server, contrassegna anche una chiamata negata perché il server non ha restituito alcun verdetto di sicurezza
L'attributo compare anche nelle chiamate in plan mode quando il classificatore esamina i comandi in plan mode. L'attributo è assente in questi casi:
- Una regola di permesso di consenso o di negazione ha deciso la chiamata
- Claude Code ha approvato la chiamata in modalità auto senza interpellare il classificatore
- L'utente ha risposto alla richiesta che Claude Code ha mostrato dopo blocchi ripetuti
- In un'esecuzione
-psenza--permission-prompt-tool, Claude Code ha negato la chiamata dopo blocchi ripetuti perché non c'era nessuno a rispondere a una richiesta. Quell'evento riportadecisioncome"reject"esourcecome"config"
-
classifier_category(quandoOTEL_LOG_TOOL_DETAILS=1): Il nome della regola integrata indicata dal classificatore quando ha bloccato la chiamata, in minuscolo con trattini bassi, ad esempio"data_exfiltration"per la regola Data Exfiltration. Richiede Claude Code v2.1.301 o successivo. L'attributo è presente quando valgono entrambe queste condizioni:classifier_verdictè"block"- Il classificatore ha indicato esattamente una regola, e quella regola è integrata anziché scritta da te
Prima della v2.1.302, l'attributo era assente anche in qualsiasi blocco deciso dalla revisione del classificatore lato server.
-
permission_mode: Modalità di permesso attiva quando è iniziato il controllo dei permessi di questa chiamata:"default","plan","acceptEdits","bypassPermissions","dontAsk"o"auto". La modalità manuale appare come"default". Una chiamata di un subagent riporta la modalità di permesso del subagent anziché quella della sessione. Richiede Claude Code v2.1.301 o successiva -
tool_parameters(quandoOTEL_LOG_TOOL_DETAILS=1): Stringa JSON contenente i parametri specifici dello strumento. Stessa forma dell'evento del risultato dello strumento, esclusi i campi successivi all'esecuzione comegit_commit_id. I valori possono differire datool_resultper una chiamata accettata se la decisione sul permesso riscrive l'input dello strumento tramiteupdatedInput. Usa questo attributo per vedere quale comando è stato rifiutato quandodecisionè"reject".- Per gli strumenti
"sdk_host_builtin_mcp":mcp_server_nameemcp_tool_namesono inclusi anche quandoOTEL_LOG_TOOL_DETAILSè disattivato, perché è l'applicazione host a definire questi nomi; senza di essi, una chiamata rifiutata a uno di questi server integrati non sarebbe attribuibile nello stream predefinito. Per i server MCP configurati dall'utente, iltool_namedell'evento è sempre il valore letterale"mcp_tool", e i nomi del server e dello strumento compaiono solo intool_parameterscon il flag attivato; il contenuto degli argomenti richiede il flag in ogni caso. - Per lo strumento Bash: include
bash_command,full_command,timeout,description,dangerouslyDisableSandbox. Anche lo strumento bash del workspace dell'app desktop riportatool_namecomeBash, ma include solobash_command,full_commandetimeout - Per gli strumenti MCP: include
mcp_server_name,mcp_tool_name - Per lo strumento Skill: include
skill_name - Per lo strumento Agent o il precedente strumento Task: include
subagent_type
- Per gli strumenti
Se abbassi OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT dell'SDK OpenTelemetry al di sotto del numero di attributi di un evento tool_decision, l'SDK scarta gli attributi che Claude Code ha impostato per ultimi. L'SDK li scarta prima di qualsiasi altro attributo, in questo ordine, saltando quelli che l'evento non contiene:
parent_agent_idagent_idrequest_idpermission_modeclassifier_categoryclassifier_verdict
permission_mode, classifier_category e classifier_verdict vengono scartati in questo ordine su Claude Code v2.1.302 o successivo. parent_agent_id, agent_id e request_id richiedono la v2.1.310 o successiva.
Evento di sicurezza
Registrato quando un controllo rifiuta una chiamata a uno strumento o richiede una richiesta di permesso, eccetto per le chiamate senza un evento di sicurezza. Registrato anche quando il proxy di rete della sandbox rifiuta una connessione o una richiesta, e quando un hook blocca un risultato. Richiede Claude Code v2.1.307 o successiva.
L'evento viene esportato insieme agli altri eventi e non ha un'impostazione separata. Gli attributi propri dell'evento non contengono testo dei comandi, percorsi di file, nomi host né nomi di server e strumenti MCP. Il record riporta anche gli attributi standard presenti in ogni evento, che possono includere workspace.host_paths e gli attributi del repository. Per vedere il comando o lo strumento MCP dietro un evento, imposta OTEL_LOG_TOOL_DETAILS=1 e leggi tool_parameters nell'evento tool_decision corrispondente.
Nome dell'evento: claude_code.safety_event
Attributi:
- Tutti gli attributi standard
event.name:"safety_event"event.timestamp: timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventicategory: Il controllo o l'esito, un valore di categoriadecision:"accept","reject"o"sent_back"quando un hook ha bloccato un risultato o la fine di un turnodecision_source: Chi o cosa ha deciso, un valoresourceditool_decisionoppure"other"reason_code: Il motivo del controllo, ad esempio"rule:policySettings","mode:dontAsk","hook:PreToolUse","classifier:auto-mode","bashMiss:too-complex"o"unknown"reason_type: Il tipo di motivo del controllo, ad esempio"rule","subcommandResults","mode","hook","classifier"o"asyncAgent"rule_source: Origine delle impostazioni della regola coinvolta, ad esempio"policySettings","userSettings","projectSettings","localSettings","flagSettings","cliArg"o"session"grant_scope:"once"o"session"per una richiesta approvata senza salvare una regola in un file di impostazionicircuit_breaker: Il controllo di sicurezza integrato, ad esempio"dangerousRemoval","outsideReadsBlocked"o"claudeSettingsFile"classifier_category: ConOTEL_LOG_TOOL_DETAILS=1, la regola integrata dietro un blocco della modalità auto, ad esempio"data_exfiltration"hook_event:"pre_tool_use"per un hookPreToolUse, oppure"post_tool_use","post_tool_use_failure","stop"o"subagent_stop"negli eventi"hook_review"tool_class:"bash"per Bash e Monitor,"powershell","file"per Read, Edit, Write, NotebookEdit, Glob e Grep,"web"per WebFetch e WebSearch,"mcp"o"other"tool_name: Il nome dello strumento, ad esempio"Bash"per uno strumento integrato, oppure"mcp_tool","skill_tool","dynamic_tool"o"other_tool"tool_source:"builtin","mcp"o"sdk_host_builtin_mcp", come intool_decisionpermission_mode: La modalità di permesso della chiamata al momento del controllo:"default","plan","acceptEdits","bypassPermissions","dontAsk"o"auto"tool_use_id: L'ID della chiamata, come intool_decisionetool_resultsandbox_violation_count: Quante connessioni o richieste distinte del comando della chiamata sono state rifiutate dal proxy di rete della sandbox, da"0"a"20"come stringa. I rifiuti vengono conteggiati per un comando in sandbox terminato in primo pianosandbox_enabled:"true"se il sandboxing è attivo per la sessione, altrimenti"false"
Questi sono gli attributi propri dell'evento quando una regola di negazione delle impostazioni gestite rifiuta un comando Bash:
{
"event.name": "safety_event",
"category": "managed_policy",
"decision": "reject",
"decision_source": "config",
"reason_code": "rule:policySettings",
"rule_source": "policySettings",
"tool_class": "bash",
"tool_name": "Bash",
"tool_source": "builtin",
"permission_mode": "default",
"tool_use_id": "toolu_01ABC123...",
"sandbox_violation_count": "0",
"sandbox_enabled": "false"
}
Categorie degli eventi di sicurezza
| Valore | Controllo o esito | Attributo di dettaglio |
|---|---|---|
"permission_rule" |
Una regola di permesso di negazione o di richiesta al di fuori delle impostazioni gestite | rule_source |
"managed_policy" |
Una regola di negazione o di richiesta dalle impostazioni gestite | rule_source |
"permission_mode" |
Modalità dontAsk o plan, oppure una richiesta senza categoria in una sessione che non può mostrare richieste, come con --permission-prompts none |
reason_code, reason_type |
"hook" |
Un hook, ad esempio PreToolUse o PermissionRequest |
hook_event, reason_code |
"auto_mode_block" |
Il classificatore della modalità auto ha bloccato la chiamata | classifier_category |
"auto_mode_no_verdict" |
Nessun verdetto del classificatore utilizzabile, ad esempio dopo una richiesta non riuscita | reason_code |
"safety_check" |
Un controllo di sicurezza integrato, ad esempio per Read, Edit o Write al di fuori delle tue directory di lavoro | circuit_breaker |
"static_analysis" |
Come è scritto un comando Bash o Monitor, ad esempio uno troppo complesso da analizzare | reason_code |
"sandbox_override" |
La richiesta di eseguire un comando al di fuori della sandbox | reason_code |
"user_rejected" |
Qualcuno ha rifiutato o chiuso una richiesta che non aveva alcuna categoria o che era richiesta solo da un hook, oppure un callback canUseTool o uno strumento --permission-prompt-tool l'ha negata |
decision_source |
"sandbox_network" |
La chiamata è stata eseguita e il proxy di rete della sandbox ha rifiutato una connessione o una richiesta | sandbox_violation_count |
"sandbox_other" |
Come "sandbox_network", ma nessuna destinazione rifiutata risulta come nome host o indirizzo IP |
sandbox_violation_count |
"hook_review" |
Un hook ha bloccato il risultato della chiamata o la fine di un turno | hook_event |
"other" |
Un rifiuto non descritto da nessun altro valore | reason_code |
Per trovare i rifiuti del proxy in qualsiasi category, filtra per un sandbox_violation_count presente e diverso da "0".
Chiamate senza un evento di sicurezza
Per trovare le chiamate rifiutate perché nessuno poteva rispondere a una richiesta senza categoria, cerca gli eventi tool_decision che riportano "reject" con source "config" e nessun evento di sicurezza che condivida il loro tool_use_id. Questi rifiuti si verificano in un'esecuzione -p senza né --permission-prompt-tool né --permission-prompts none.
Per chiamate come le seguenti, verifica la presenza di un evento tool_decision, poiché non hanno alcun evento di sicurezza eccetto gli eventi "sandbox_network", "sandbox_other" o "hook_review" inviati dopo la loro esecuzione:
- Una chiamata approvata in una richiesta senza categoria
- Una chiamata che un callback
canUseToolo uno strumento--permission-prompt-toolha approvato in una richiesta richiesta solo da un hookPreToolUse - Una chiamata
AskUserQuestionoExitPlanMode, rifiutata o meno
Richieste senza categoria
Una richiesta non ha categoria quando nessun valore di category ne indica il controllo, ad esempio la richiesta della modalità default per una modifica all'interno della tua directory di lavoro.
Evento di modifica della modalità di permesso
Registrato quando cambia la modalità di permesso, ad esempio con il ciclo tramite Shift+Tab, l'uscita dal plan mode o un controllo del gate della modalità auto.
Per raggruppare le chiamate agli strumenti in base alla modalità di permesso in cui ciascuna è stata controllata, usa permission_mode nell'evento di decisione sullo strumento.
Nome dell'evento: claude_code.permission_mode_changed
Attributi:
- Tutti gli attributi standard
event.name:"permission_mode_changed"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventifrom_mode: La modalità di permesso precedente, ad esempio"default","plan","acceptEdits","auto"o"bypassPermissions"to_mode: La nuova modalità di permessotrigger: Cosa ha causato la modifica, ad esempio"shift_tab","exit_plan_mode"o"auto_gate_denied". Assente per alcune modifiche, ad esempio quando l'SDK imposta la modalità di permesso tramitesetPermissionMode()
Evento di autenticazione
Registrato quando /login o /logout viene completato.
Nome dell'evento: claude_code.auth
Attributi:
- Tutti gli attributi standard
event.name:"auth"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventiaction:"login"o"logout"success:"true"o"false"auth_method: Metodo di autenticazione, ad esempio"oauth"error_category: Tipo di errore categoriale quando l'azione non è riuscita. Il messaggio di errore grezzo non viene mai inclusostatus_code: Codice di stato HTTP come stringa quando l'azione non è riuscita con un errore HTTP
Evento di connessione del server MCP
Registrato quando un server MCP si connette, si disconnette o non riesce a connettersi.
Nome dell'evento: claude_code.mcp_server_connection
Attributi:
- Tutti gli attributi standard
event.name:"mcp_server_connection"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventistatus:"connected","failed"o"disconnected"transport_type: Trasporto del server, ad esempio"stdio","sse"o"http"server_scope: Ambito in cui è configurato il server, ad esempio"user","project"o"local"duration_ms: Durata del tentativo di connessione in millisecondierror_code: Codice di errore quando la connessione non è riuscitais_plugin:truequando il server è fornito da un plugin,falsealtrimentiplugin_id_hash(quandois_pluginètrue): Hash stabile del nome del plugin e del marketplace, per raggruppare gli eventi per plugin senza esporne il nome. Claude Code lo calcola come descritto nell'evento di plugin caricatoplugin.name(quandois_pluginètrue): Nome del plugin che fornisce il server. Per i plugin di terze parti è la stringa letterale"third-party"a meno che non sia impostatoOTEL_LOG_TOOL_DETAILS=1; questo impedisce che i nomi dei plugin di terze parti compaiano nei log per impostazione predefinita. I plugin provenienti da fonti ufficiali Anthropic sono sempre identificati per nome. Gli attributiplugin_id_hasheplugin.namearrivano al tuo backend di monitoraggio e non vengono inviati ad Anthropicserver_name(quandoOTEL_LOG_TOOL_DETAILS=1): Nome configurato del servererror(quandoOTEL_LOG_TOOL_DETAILS=1): Messaggio di errore completo quando la connessione non è riuscita
Evento di errore interno
Registrato quando Claude Code intercetta un errore interno imprevisto. Vengono registrati solo il nome della classe di errore e un codice in stile errno. Il messaggio di errore e lo stack trace non vengono mai inclusi. Questo evento non viene emesso quando si usa Amazon Bedrock, Agent Platform di Google Cloud o Microsoft Foundry, oppure quando è impostato DISABLE_ERROR_REPORTING.
Nome dell'evento: claude_code.internal_error
Attributi:
- Tutti gli attributi standard
event.name:"internal_error"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventierror_name: Nome della classe di errore, ad esempio"TypeError"o"SyntaxError"error_code: Codice errno di Node.js, ad esempio"ENOENT", quando presente nell'errore
Evento di plugin installato
Registrato quando un plugin termina l'installazione, sia dal comando CLI claude plugin install sia dall'interfaccia interattiva /plugin.
Nome dell'evento: claude_code.plugin_installed
Attributi:
- Tutti gli attributi standard
event.name:"plugin_installed"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventimarketplace.is_official:"true"se il marketplace è un marketplace ufficiale Anthropic,"false"altrimentiinstall.trigger:"cli"o"ui"plugin.name: Nome del plugin installato. Per i marketplace di terze parti è incluso solo quandoOTEL_LOG_TOOL_DETAILS=1plugin.version: Versione del plugin, quando dichiarata nella voce del marketplace. Per i marketplace di terze parti è inclusa solo quandoOTEL_LOG_TOOL_DETAILS=1marketplace.name: Marketplace da cui è stato installato il plugin. Per i marketplace di terze parti è incluso solo quandoOTEL_LOG_TOOL_DETAILS=1
Evento di plugin caricato
Registrato una volta per ogni plugin abilitato all'avvio della sessione. Usa questo evento per fare l'inventario dei plugin attivi nel tuo parco macchine, come complemento a plugin_installed, che registra l'azione di installazione stessa.
Nome dell'evento: claude_code.plugin_loaded
Attributi:
- Tutti gli attributi standard
event.name:"plugin_loaded"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventiplugin.name: nome del plugin. Per i plugin esterni al marketplace ufficiale e al pacchetto integrato il valore è"third-party"a meno che non sia impostatoOTEL_LOG_TOOL_DETAILS=1marketplace.name: marketplace da cui è stato installato il plugin, quando noto. Oscurato come"third-party"alla stessa condizione diplugin.nameplugin.version: versione dal manifest del plugin. Inclusa solo quando il nome non è oscurato e il manifest dichiara una versioneplugin.scope: categoria di provenienza del plugin:"official","community","org","user-local"o"default-bundle"enabled_via: modo in cui il plugin è stato abilitato:"default-enable","org-policy","admin-install","seed-mount"o"user-install". Il valore"admin-install"significa che il plugin è impostato come obbligatorio o a installazione automatica per la tua organizzazione in Organization settings > Plugins & skills. Prima della v2.1.246, Claude Code riportava questi plugin come"user-install"o"seed-mount"plugin_id_hash: hash deterministico del nome del plugin e del marketplace, inviato solo al tuo exporter configurato. Ti consente di contare i plugin di terze parti distinti caricati nel tuo parco macchine senza registrarne i nomi. Per i plugin sincronizzati da claude.ai, Claude Code calcola l'hash del nome del plugin con il nome del marketplace che claude.ai riporta per il plugin, oppure consyncedaltrimenti. Prima della v2.1.246, Claude Code non usava nell'hash il nome del marketplace riportato da claude.aihas_hooks: se il plugin fornisce hook, tramite la configurazione degli hook o come modhas_mcp: se il plugin fornisce server MCPhost_owned_mcp:truequando l'host dell'SDK gestisce le connessioni MCP di questo plugin e Claude Code ha saltato la lettura della configurazione dei server MCP del plugin,falsealtrimentiskill_path_count: numero di directory di skill dichiarate dal plugincommand_path_count: numero di directory di comandi dichiarate dal pluginagent_path_count: numero di directory di agenti dichiarate dal pluginsafe_mode:"true"quando la sessione è stata avviata con--safe-mode,"false"altrimenti. In modalità sicura questo evento riporta solo l'inventario configurato; i comandi, le skill, gli hook e i server MCP del plugin non vengono caricati. Richiede Claude Code v2.1.169 o successiva
Evento di skill attivata
Registrato quando viene invocata una skill, sia che Claude la chiami tramite lo strumento Skill sia che tu la esegua come comando /.
Nome dell'evento: claude_code.skill_activated
Attributi:
- Tutti gli attributi standard
event.name:"skill_activated"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventiskill.name: Nome della skill. Per le skill definite dall'utente e quelle dei plugin di terze parti il valore è il segnaposto"custom_skill"a meno che non sia impostatoOTEL_LOG_TOOL_DETAILS=1invocation_trigger: Modo in cui è stata attivata la skill ("user-slash","claude-proactive"o"nested-skill")skill.source: Da dove è stata caricata la skill (ad esempio,"bundled","userSettings","projectSettings","plugin")skill.kind:"workflow"quando la skill è una skill di workflow. Assente altrimentiplugin.name(quandoOTEL_LOG_TOOL_DETAILS=1o il plugin proviene da un marketplace ufficiale): Nome del plugin proprietario quando la skill è fornita da un pluginmarketplace.name(quandoOTEL_LOG_TOOL_DETAILS=1o il plugin proviene da un marketplace ufficiale): Marketplace da cui è stato installato il plugin proprietario, quando la skill è fornita da un plugin
Evento di menzione con @
Registrato quando Claude Code risolve una menzione @ in un prompt. Non tutte le menzioni emettono un evento: i percorsi di uscita anticipata, come i permessi negati, i file troppo grandi, gli allegati di riferimento PDF e gli errori nell'elenco delle directory, terminano senza registrare nulla.
Ogni volta che Claude Code legge un prompt, registra al massimo 100 eventi con mention_type pari a "agent" e 100 con "mcp_resource". Le menzioni oltre uno dei due limiti vengono comunque risolte ma non emettono alcun evento.
Nome dell'evento: claude_code.at_mention
Attributi:
- Tutti gli attributi standard
event.name:"at_mention"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventimention_type: Tipo di menzione ("file","directory","agent","mcp_resource","peer"). Il valore"peer"significa che hai menzionato una delle tue altre sessioni di Claude Code. Richiede Claude Code v2.1.232 o successivasuccess: Se la menzione è stata risolta correttamente ("true"o"false")
Evento di nuovi tentativi API esauriti
Registrato una volta quando una richiesta API non riesce dopo più di un tentativo. Emesso insieme all'evento api_error finale.
Nome dell'evento: claude_code.api_retries_exhausted
Attributi:
- Tutti gli attributi standard
event.name:"api_retries_exhausted"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventimodel: Modello utilizzatoerror: Messaggio di errore finalestatus_code: Codice di stato HTTP come numero. Assente per errori non HTTP.total_attempts: Numero totale di tentativi effettuatitotal_retry_duration_ms: Tempo reale totale su tutti i tentativispeed:"fast"o"normal"
Evento di hook registrato
Registrato una volta per ogni hook configurato all'avvio della sessione. Usa questo evento per fare l'inventario degli hook attivi nel tuo parco macchine, come complemento agli eventi per singola esecuzione hook_execution_start e hook_execution_complete.
Nome dell'evento: claude_code.hook_registered
Attributi:
- Tutti gli attributi standard
event.name:"hook_registered"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventihook_event: tipo di evento dell'hook, ad esempio"PreToolUse"o"PostToolUse"hook_type: tipo di implementazione dell'hook:"command","prompt","mcp_tool","http"o"agent"hook_source: dove è definito l'hook:"userSettings","projectSettings","localSettings","flagSettings","policySettings"o"pluginHook"safe_mode:"true"quando la sessione è stata avviata con--safe-mode,"false"altrimenti. Richiede Claude Code v2.1.169 o successivahook_matcher(quandoOTEL_LOG_TOOL_DETAILS=1): la stringa del matcher dalla configurazione dell'hook, quando impostataplugin.name(quandohook_sourceè"pluginHook"): nome del plugin che fornisce l'hook. Per i plugin esterni al marketplace ufficiale e al pacchetto integrato il valore è"third-party"a meno che non sia impostatoOTEL_LOG_TOOL_DETAILS=1plugin_id_hash(quandohook_sourceè"pluginHook"): hash deterministico del nome del plugin e del marketplace, inviato solo al tuo exporter configurato. Ti consente di contare i plugin distinti che forniscono hook senza registrarne i nomi. Claude Code lo calcola come descritto nell'evento di plugin caricato
Evento di avvio dell'esecuzione degli hook
Registrato quando uno o più hook iniziano l'esecuzione per un evento di hook.
Nome dell'evento: claude_code.hook_execution_start
Attributi:
- Tutti gli attributi standard
event.name:"hook_execution_start"event.timestamp: Timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventihook_event: Tipo di evento dell'hook, ad esempio"PreToolUse"o"PostToolUse"hook_name: Nome completo dell'hook incluso il matcher, ad esempio"PreToolUse:Write"num_hooks: Numero di comandi hook corrispondentimanaged_only:"true"quando sono consentiti solo gli hook dei criteri gestitihook_source:"policySettings"o"merged"safe_mode:"true"quando la sessione è stata avviata con--safe-mode,"false"altrimenti. Richiede Claude Code v2.1.169 o successivahook_definitions: Configurazione dell'hook serializzata in JSON. Inclusa solo quando sono abilitati sia il tracing beta dettagliato siaOTEL_LOG_TOOL_DETAILS=1
Evento di completamento dell'esecuzione degli hook
Registrato quando tutti gli hook per un evento hook sono terminati.
Nome evento: claude_code.hook_execution_complete
Attributi:
- Tutti gli attributi standard
event.name:"hook_execution_complete"event.timestamp: timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventihook_event: tipo di evento hookhook_name: nome completo dell'hook, incluso il matchernum_hooks: numero di comandi hook corrispondentinum_success: numero di quelli completati correttamentenum_blocking: numero di quelli che hanno restituito una decisione bloccantenum_non_blocking_error: numero di quelli che non sono riusciti senza bloccarenum_cancelled: numero di quelli annullati prima del completamentototal_duration_ms: durata in tempo reale di tutti gli hook corrispondentistdout_chars: caratteri totali di stdout tra gli hook corrispondenti completati correttamente. Richiede Claude Code v2.1.280 o successivaadditional_context_chars: caratteri totali diadditionalContextrestituiti dagli hook corrispondenti. Richiede Claude Code v2.1.280 o successivasystem_message_chars: caratteri totali disystemMessagerestituiti dagli hook corrispondenti. Richiede Claude Code v2.1.280 o successivainitial_user_message_chars: caratteri totali diinitialUserMessagerestituiti dagli hook corrispondenti. Richiede Claude Code v2.1.280 o successivanum_outputs_persisted: numero di output degli hook oltre il limite di 10.000 caratteri che Claude Code ha salvato in un file. Richiede Claude Code v2.1.280 o successivamanaged_only:"true"quando sono consentiti solo gli hook delle policy gestitehook_source:"policySettings"o"merged"safe_mode:"true"quando la sessione è stata avviata con--safe-mode,"false"altrimenti. Richiede Claude Code v2.1.169 o successivahook_definitions: configurazione degli hook serializzata in JSON. Inclusa solo quando sono abilitati sia il tracing beta dettagliato siaOTEL_LOG_TOOL_DETAILS=1
Evento delle metriche dei plugin hook
Registrato quando un hook di un plugin del marketplace ufficiale emette metriche per singola invocazione. Solo i plugin installati da un marketplace ufficiale di Anthropic possono emetterle. I plugin di marketplace di terze parti e gli hook configurati dall'utente non emettono questo evento. Usa questo evento per monitorare il comportamento dei plugin, come tassi di rilevamento, costi e durate, dal tuo stack di osservabilità.
Nome evento: claude_code.hook_plugin_metrics
Attributi:
- Tutti gli attributi standard
event.name:"hook_plugin_metrics"event.timestamp: timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventiplugin_id: identificatore del plugin nel formato<name>@<marketplace>hook_event: tipo di evento hook che ha emesso le metriche- Fino a 20 chiavi di metrica emesse dal plugin. I nomi corrispondono a
^[a-z][a-z0-9_]{0,39}$. I valori sono booleani o numerici.
Evento di compattazione
Registrato al completamento della compattazione della conversazione.
Nome evento: claude_code.compaction
Attributi:
- Tutti gli attributi standard
event.name:"compaction"event.timestamp: timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventitrigger:"auto"o"manual"success:"true"o"false"duration_ms: durata della compattazionepre_tokens: numero approssimativo di token prima della compattazionepost_tokens: numero approssimativo di token dopo la compattazioneerror: messaggio di errore quando la compattazione non è riuscitaprecompute_reuse: impostato solo quandotriggerè"manual", oppure quandotriggerè"auto"per una compattazione in inattività in una sessione interattiva nel terminale. La compattazione automatica può preparare un riepilogo in background prima che la finestra di contesto si riempia, e questo attributo registra se la compattazione ha riutilizzato quel riepilogo preparato."hit"indica che è stato riutilizzato;"miss_custom_instructions","miss_hook"e"miss_not_ready"indicano il motivo per cui è stato invece calcolato un nuovo riepilogo
Evento di completamento del subagent
Registrato quando un subagent termina e restituisce il suo risultato alla conversazione che lo ha avviato. Usalo per aggregare l'uso degli strumenti e il tempo di esecuzione per tipo di subagent; per aggregare token o costi, usa il contatore dei token e il contatore dei costi filtrati per query_source "subagent", poiché il total_tokens di questo evento copre solo la richiesta finale. La categoria "subagent" conta anche le richieste degli hook basati su agenti, che non emettono alcun evento di subagent.
Nome evento: claude_code.subagent_completed
Attributi:
- Tutti gli attributi standard
event.name:"subagent_completed"event.timestamp: timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventiagent_type: il tipo di subagent. I nomi degli agenti integrati e degli agenti dei plugin del marketplace ufficiale appaiono testualmente; gli altri nomi di agenti sono sostituiti con"custom"a meno che non sia impostatoOTEL_LOG_TOOL_DETAILS=1agent.source: la provenienza della definizione dell'agente:built-in,plugino l'origine delle impostazioni che ha definito un agente personalizzato, comeuserSettingsoprojectSettingsis_built_in: se il subagent è un tipo di agente integratois_async: se il subagent è stato eseguito in backgroundtotal_tokens: l'impronta in token della richiesta API finale del subagent: i token di input, creazione della cache, lettura della cache e output di quella sola richiesta, approssimativamente la dimensione del contesto del subagent al completamento. Non è una somma sull'intera esecuzionetotal_tool_uses: numero di chiamate agli strumenti effettuate dal subagent nell'intera esecuzioneduration_ms: tempo di esecuzione in millisecondimodel: il modello con cui è stato risolto il subagentfinal_model: il modello che ha prodotto la risposta finale del subagent, che differisce damodeldopo un cambio durante l'esecuzione, come un fallbackmodel_swapped: se più di un modello ha servito le richieste del subagentplugin_id_hash,plugin.name: presenti per gli agenti forniti da plugin. I nomi dei plugin del marketplace ufficiale appaiono testualmente; gli altri nomi di plugin sono sostituiti con"third-party"a meno che non sia impostatoOTEL_LOG_TOOL_DETAILS=1
Evento del sondaggio di feedback
Registrato quando un sondaggio sulla qualità della sessione viene mostrato o riceve una risposta. Consulta Sondaggi sulla qualità della sessione per sapere cosa raccolgono i sondaggi e come controllarli.
Nome evento: claude_code.feedback_survey
Attributi:
- Tutti gli attributi standard
event.name:"feedback_survey"event.timestamp: timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventievent_type: evento del ciclo di vita del sondaggio, ad esempio"appeared","responded"o"transcript_prompt_appeared"appearance_id: ID univoco che collega gli eventi emessi per una singola istanza del sondaggiosurvey_type: quale sondaggio ha prodotto l'evento."session"è il prompt di valutazione "How is Claude doing?"response: la selezione dell'utente negli eventirespondedenabled_via_override:truequando è impostatoCLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL. Emesso come booleano, non come stringa. Presente negli eventi del sondaggiosession. Filtra su questo attributo per verificare che l'override sia applicato su un'intera flotta
Evento della pulizia per conservazione
Registrato una volta per ogni esecuzione della pulizia per conservazione, che elimina le trascrizioni delle sessioni e altri dati dell'applicazione più vecchi dell'impostazione cleanupPeriodDays. Claude Code esegue la pulizia in background al massimo una volta per sessione, e un'esecuzione che non elimina nulla emette comunque l'evento. Se Claude Code ha eseguito la pulizia in una qualsiasi sessione sulla stessa macchina nelle ultime 24 ore, ritarda la pulizia di questa sessione di almeno 10 minuti, quindi una sessione che termina prima non emette nulla. Quando esegui claude -p con --bare, Claude Code non esegue la pulizia e non emette nulla.
Come ogni evento OTel in questa pagina, viene inviato solo al backend di telemetria che configuri. Richiede Claude Code v2.1.227 o successiva.
Leggi result per sapere se la pulizia è stata eseguita:
"complete": la pulizia è stata eseguita e l'evento riporta i relativi conteggi"skipped": Claude Code non è riuscito a determinare in modo sicuro il periodo di conservazione, quindi ha sospeso la pulizia e l'evento non riporta conteggi. Seskip_reasonè"settings_unknowable"o"settings_invalid_key_set", correggi l'errore nelle impostazioni che/statussegnala su quella macchina, in modo che una sessione successiva possa eseguire la pulizia
Quando le impostazioni gestite impostano cleanupPeriodDays, il valore gestito fissa il periodo di conservazione e la pulizia viene eseguita anche quando un file di impostazioni in un ambito a priorità inferiore è danneggiato o non valido.
Nome evento: claude_code.retention_sweep
Attributi:
- Tutti gli attributi standard
event.name:"retention_sweep"event.timestamp: timestamp ISO 8601event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventiresult:"complete"quando la pulizia è stata eseguita,"skipped"quando Claude Code l'ha sospesaperiod_days: il periodo di conservazione con cui è iniziata la pulizia, in giorni:cleanupPeriodDaysdalle impostazioni combinate, con l'eventuale modifica di un hooksettings.readapplicata.30quando in questo modo la chiave resta non impostata. Negli eventi saltati, il valore che la pulizia avrebbe usato, calcolato dalle origini delle impostazioni che Claude Code è riuscito a leggereused_default:"true"quandoperiod_daysè ricaduto sul valore30,"false"altrimenti. Negli eventi completati,"true"indica che è stato applicato il valore predefinito di 30 giorniskip_reason: perché Claude Code ha sospeso la pulizia. Presente solo quandoresultè"skipped":"user_source_disabled": le impostazioni utente sono escluse, ad esempio dal flag--setting-sourceso dall'opzionesettingSourcesdell'SDK, e nessuna origine abilitata forniscecleanupPeriodDays"settings_unknowable": un file di impostazioni non può essere letto o analizzato, quindicleanupPeriodDaysodesktopSessionCleanupPeriodDayspotrebbero essere impostati su un valore che Claude Code non può vedere"settings_invalid_key_set": le impostazioni presentano errori di validazione ecleanupPeriodDaysodesktopSessionCleanupPeriodDaysè impostato esplicitamente, quindi ripiegare sul valore predefinito potrebbe eliminare o conservare file in contrasto con tale impostazione"remote_settings_unknowable": una sessione nella scheda Code di Claude Desktop su un deploy di terze parti ha richiesto le impostazioni gestite dal server. Non ha ricevuto alcuna risposta utilizzabile, quindicleanupPeriodDayspotrebbe essere impostato su un valore che Claude Code non può vedere
transcripts_deleted: numero di trascrizioni delle sessioni, i file di primo livello~/.claude/projects/*/*.jsonl, eliminate dalla puliziatranscripts_exempted_desktop: numero di trascrizioni oltre il periodo di conservazione che la pulizia ha conservato in base alla regola di Claude Desktop e Cowork. Queste non vengono conteggiate infiles_past_cutoff. Richiede Claude Code v2.1.248 o successivasession_files_deleted: numero di artefatti eliminati dalla pulizia dei file di sessione: le trascrizioni più i file associati a ciascuna sessione, come sidecar, registrazioni e risultati degli strumentiartifacts_deleted: numero totale di elementi eliminati dalla pulizia nelle directory di dati che copre, inclusi i file di sessione. Alcune pulizie contano un intero albero di directory rimosso come un solo elemento e alcuni passaggi di pulizia non contribuiscono al contatore, quindi considera il valore come un minimo anziché un conteggio esatto dei filefiles_retained_fresh: file ispezionati e lasciati al loro posto perché ancora entro il periodo di conservazione. Solo le pulizie per singolo file li conteggiano, quindi il valore è un minimo; un valore diverso da zero è il normale stato a regimefiles_past_cutoff: file più vecchi del periodo di conservazione che la pulizia non è riuscita a eliminare, ad esempio a causa di un errore di permessi o di un file tenuto aperto. Il conteggio include anche ogni cartella obsoleta che la pulizia trova inskills/synced/oplugins/synced/, indipendentemente dal fatto che sposti o meno la cartella nel cestino. A parte queste cartelle, un valore superiore a zero significa che alcuni file sono sopravvissuti oltre il periodo di conservazione configurato; zero non è la prova che nessuno lo abbia fatto, perché una rimozione non riuscita di un'intera directory viene invece conteggiata inerror_counterror_count: numero di errori incontrati dalla pulizia durante l'elenco o l'eliminazione dei file
Evento di risoluzione delle impostazioni gestite
Registrato con le impostazioni gestite risolte da una sessione: una volta all'avvio della sessione, di nuovo quando le impostazioni gestite o lo stato dell'helper di policy cambiano durante la sessione, e quando Claude Code si rifiuta di avviarsi o termina la sessione per uno dei motivi elencati dall'attributo error.type.
Usa questo evento per individuare le macchine che operano con un'origine gestita inattesa, le macchine il cui helper di policy non funziona e il motivo per cui una macchina si è rifiutata di avviarsi.
Richiede Claude Code v2.1.274 o successiva.
Per impostazione predefinita, l'evento contiene le origini gestite e lo stato dell'helper di policy, ma non le impostazioni stesse. Per aggiungere l'attributo redatto managed_settings.settings e il digest managed_settings.resolved_sha256, imposta OTEL_LOG_MANAGED_SETTINGS=1:
- Impostalo nel blocco
envdelle impostazioni gestite, delle impostazioni utente o di--settings, oppure nell'ambiente con cui avvii Claude Code. Un valore nelle impostazioni di progetto o locali non lo attiva, perché un repository clonato può scriverle. - Le impostazioni gestite dal server possono impostarlo senza mostrare la finestra di dialogo di approvazione di sicurezza, perché la variabile aggiunge solo la policy redatta della tua organizzazione a un evento che la tua organizzazione riceve già.
In una sessione interattiva in una cartella che non hai considerato attendibile, Claude Code non esporta l'evento di rifiuto.
Nome evento: claude_code.managed_settings_resolved
Attributi:
-
Tutti gli attributi standard
-
event.name:"managed_settings_resolved" -
event.timestamp: timestamp ISO 8601 -
event.sequence: contatore per processo per ordinare gli eventi, descritto in Attributi di correlazione degli eventi -
managed_settings.trigger:"startup"per l'evento di avvio della sessione,"change"quando le impostazioni gestite o lo stato dell'helper di policy sono cambiati più avanti nella sessione, oppure"refused"quando una policy delle impostazioni gestite ha interrotto la sessione. Claude Code invia un eventochangesolo quando un attributo differisce dall'ultimo evento inviato, e un valore di impostazione modificato conta anche quandoOTEL_LOG_MANAGED_SETTINGSè disattivato -
error.type: il motivo per cui Claude Code ha interrotto la sessione. Presente solo negli eventirefused:"helper_failed": un'esecuzione dell'helper di policy non è riuscita"policy_invalid": le impostazioni gestite contengono un errore che impedisce a Claude Code di avviarsi, oppure un'origine di amministrazione non è stata caricata per un motivo diverso da una lettura negata, quindi Claude Code non può verificare il login dell'organizzazione o l'applicazione dei provider"provider_not_allowed": la sessione userebbe un provider API, o invierebbe il traffico di un provider a un host, che l'elenco gestitoallowedProvidersnon consente. Richiede Claude Code v2.1.285 o successiva"consent_rejected": l'utente ha rifiutato la finestra di dialogo di approvazione di sicurezza per le impostazioni gestite dal server"force_refresh_failed": il recupero delle impostazioni richiesto daforceRemoteSettingsRefreshnon è riuscito"gateway_rejected": un gateway delle app Claude ha risposto al caricamento delle impostazioni gestite con HTTP 403"version_below_minimum": questa versione di Claude Code è inferiore arequiredMinimumVersiono superiore arequiredMaximumVersion"_OTHER": il caricamento delle impostazioni gestite dal gateway delle app Claude non è riuscito per un altro motivo
-
managed_settings.sources: ogni origine gestita che fornisce almeno una chiave di policy, dalla priorità più alta, incluse le origini le cui chiavi non hanno effetto confirst-wins. I valori sono"remote","plist"o"hklm"per la policy MDM o a livello di sistema operativo,"file"per i file di impostazioni gestite e i drop-in,"parent"quando un host di incorporamento fornisce impostazioni, e"hkcu"per il valore del registro HKCU di Windows quando Claude Code lo legge. Un'origine che contiene solo chiavi di controllo, o che Claude Code non è riuscito a leggere, non viene elencata. Emesso come array di stringhe, vuoto quando nessuna origine gestita fornisce una chiave di policy -
managed_settings.source_behavior: il valore dimanagedSourcesBehaviorletto da Claude Code,"first-wins"o"merge"."first-wins"quando nessuna origine imposta la chiave -
managed_settings.helper.state: stato dell'helper di policy configurato dall'origine MDM o file selezionata:"ok": l'output dell'helper funge da impostazioni gestite"bad_path","not_a_file","exit_nonzero","timed_out","oversize","parse_failed","envelope_invalid"o"schema_rejected": l'ultima esecuzione dell'helper non è riuscita. Errori dell'helper descrive i casi"none": nessun helper è configurato, oppure l'origine che lo configura non è una policy MDM o un file di impostazioni gestite
-
managed_settings.helper.applied:"output"mentre l'output dell'helper funge da impostazioni gestite,"none"quando non è così -
managed_settings.helper.entry:"policyHelper"quando Claude Code ha selezionato unpolicyHelper. Assente quando non ha selezionato alcun helper -
managed_settings.helper.path: ilpathconfigurato per l'helper. Presente ogni volta che Claude Code ha selezionato un helper, indipendentemente dal fatto cheOTEL_LOG_MANAGED_SETTINGSsia impostato -
managed_settings.resolved_sha256(quandoOTEL_LOG_MANAGED_SETTINGS=1): SHA-256 delle impostazioni gestite risolte prima della redazione, serializzate come JSON con chiavi ordinate ricorsivamente e senza spazi. Le macchine con lo stesso digest eseguono la stessa policy. Claude Code invia il digest solo con l'attivazione esplicita perché una policy breve può essere ricostruita calcolando l'hash di ipotesi. Assente quando non è stata risolta alcuna impostazione gestita, e negli eventirefused -
managed_settings.settings(quandoOTEL_LOG_MANAGED_SETTINGS=1): i nomi e la struttura delle impostazioni gestite risolte come stringa JSON, con i valori redatti. Assente negli eventirefused. Claude Code lo costruisce a partire dal suo schema delle impostazioni:- Un nome di impostazione dichiarato dallo schema viene esportato, mentre una chiave non dichiarata viene omessa
- I booleani, i numeri e i valori stringa che lo schema limita a un insieme fisso di opzioni, come
permissions.defaultMode, vengono esportati così come sono.sandbox.network.httpProxyPortesandbox.network.socksProxyPortvengono esportati come"[REDACTED]" - Ogni altra stringa, come
model,apiKeyHelper, ogni valore dienv, ogni URL e ogni comando, viene esportata come"[REDACTED]" - I nomi delle voci delle mappe, come i nomi delle variabili
enve gli ID dei plugin, vengono esportati così come sono. Un'impostazione le cui voci non sono tipizzate dallo schema, comevimInsertModeRemaps, viene esportata come un singolo"[REDACTED]", esandbox.ignoreViolationsviene esportato come elenco dei suoi elenchi di percorsi senza i pattern dei comandi - Un elenco mantiene la sua lunghezza, con ogni voce redatta secondo le stesse regole
- Una regola
permissions.allow,permissions.denyopermissions.askviene esportata come nome del suo strumento con il contenuto redatto, ad esempioRead([REDACTED]), quando lo strumento è integrato in questa versione di Claude Code o è un riferimentomcp__comemcp__jira__create_issue. Qualsiasi altra regola viene esportata come"[REDACTED]" - Gli hook seguono le stesse regole, quindi i campi a opzioni fisse e numerici come
typeetimeoutsono visibili, mentre ogni comando, URL,matchere condizioneifviene esportato come"[REDACTED]"
Ad esempio, impostazioni gestite con
apiKeyHelper, due variabilienve una regola di negazione vengono esportate come{"apiKeyHelper":"[REDACTED]","env":{"HTTPS_PROXY":"[REDACTED]","CLAUDE_CODE_ENABLE_TELEMETRY":"[REDACTED]"},"permissions":{"deny":["Read([REDACTED])"]}}.Claude Code tronca il valore a 8 KB di UTF-8, e il valore troncato non è JSON valido
-
managed_settings.settings_truncated(quandomanaged_settings.settingsè presente):truequando Claude Code ha troncatomanaged_settings.settingsa 8 KB,falsealtrimenti. Emesso come booleano, non come stringa
Interpretazione dei dati di metriche e eventi
Le metriche e gli eventi esportati supportano una gamma di analisi:
Monitoraggio dell'utilizzo
| Metrica | Opportunità di analisi |
|---|---|
claude_code.token.usage |
Suddividi per type di token, utente, team, modello, skill.name, plugin.name, o agent.name |
claude_code.lines_of_code.count |
Misura la produttività tracciando le aggiunte e le rimozioni di codice, suddivise per modello |
claude_code.commit.count & claude_code.pull_request.count |
Comprendi l'impatto sui flussi di lavoro di sviluppo |
Per confrontare gli utenti attivi tra le superfici, imposta OTEL_METRICS_INCLUDE_ENTRYPOINT=true per aggiungere app.entrypoint a metriche ed eventi. Poi conta i valori distinti di user.account_uuid per entrypoint sugli eventi claude_code.user_prompt, oppure su claude_code.token.usage se esporti solo le metriche. Ad esempio, usa cli per le sessioni CLI interattive e raggruppa claude-desktop, claude-desktop-3p e remote_desktop per la scheda Code di Claude Desktop.
user.account_uuid non identifica le persone nelle sessioni dei canali Claude Tag ed è assente dalle sessioni senza un account Claude: consulta Attribuire le azioni agli utenti. Quando una persona avvia molte sessioni, o una sessione non riceve alcun prompt, claude_code.session.count aumenta senza aggiungere un utente attivo.
Monitoraggio dei costi
La metrica claude_code.cost.usage aiuta con:
- Tracciare i trend di utilizzo tra team o individui
- Identificare sessioni ad alto utilizzo per l'ottimizzazione
- Attribuire la spesa a skill, plugin, o tipi di subagent specifici tramite gli attributi
skill.name,plugin.name, eagent.name
[!NOTE]
Le metriche di costo sono approssimazioni. Per i dati di fatturazione ufficiali, consulta Gestire i costi per la tua organizzazione.
Claude Code conta ogni risposta in streaming verso le metriche di costo e token esattamente una volta, incluso quando un gateway o proxy dietro ANTHROPIC_BASE_URL trasmette l'utilizzo progressivamente su più frame.
Avvisi e segmentazione
Avvisi comuni da considerare:
- Picchi di costo
- Consumo di token inusuale
- Alto volume di sessioni da utenti specifici
Tutte le metriche possono essere segmentate dagli attributi standard. L'attributo model è disponibile su claude_code.token.usage, claude_code.cost.usage e claude_code.lines_of_code.count.
Le suddivisioni per modello dei commit possono essere solo approssimate tramite un join con le metriche di token o di costo su session.id, poiché una sessione può estendersi su più modelli. Filtra il lato token o costo sulle righe in cui query_source è "main", in modo che le richieste ausiliarie e dei subagent non attribuiscano i commit della sessione a un modello che non li ha effettuati.
Rilevare l'esaurimento dei tentativi
Claude Code ritenta internamente le richieste API non riuscite ed emette un singolo evento claude_code.api_error solo dopo che rinuncia, quindi l'evento stesso è il segnale terminale per quella richiesta. I tentativi di ripetizione intermedi non vengono registrati come eventi separati.
L'attributo attempt sull'evento registra il numero di tentativi. CLAUDE_CODE_MAX_RETRIES ha un valore predefinito di 10 ed è limitato a 15; con CLAUDE_CODE_RETRY_WATCHDOG impostato, il valore predefinito è più alto e non c'è alcun limite.
Quando la richiesta esaurisce tutti i nuovi tentativi su un errore transitorio, attempt è al massimo uno più di quel limite effettivo: 11 per impostazione predefinita.
Anche un valore inferiore può indicare che i nuovi tentativi sono stati esauriti: attempt riparte da 1 ogni volta che Claude Code invia di nuovo la richiesta dopo un errore di streaming.
Per distinguere una sessione che si è ripresa da una che si è bloccata, raggruppa gli eventi per session.id e verifica se esiste un evento api_request successivo dopo l'errore.
Analisi degli eventi
I dati degli eventi forniscono informazioni dettagliate sulle interazioni di Claude Code:
Modelli di utilizzo dello strumento: analizza gli eventi di risultato dello strumento per identificare:
- Strumenti più frequentemente utilizzati
- Tassi di successo dello strumento
- Tempi di esecuzione medi dello strumento
- Modelli di errore per tipo di strumento
Monitoraggio delle prestazioni: traccia le durate delle richieste API e i tempi di esecuzione dello strumento per identificare i colli di bottiglia delle prestazioni.
Mappare i token di input alle convenzioni semantiche GenAI di OpenTelemetry
Claude Code esporta i conteggi dei token di input così come appaiono nel blocco usage della risposta API, quindi questi valori escludono i token letti dalla o scritti nella cache del prompt:
input_tokenssullo spanclaude_code.llm_requeste sull'eventoapi_request- Il tipo
"input"della metricaclaude_code.token.usage
Claude Code non imposta gli attributi gen_ai.usage.*. Le convenzioni semantiche GenAI di OpenTelemetry stabiliscono che gen_ai.usage.input_tokens dovrebbe includere i token letti dalla e scritti nella cache. Per calcolare questo totale:
- Dallo span o dall'evento: somma
input_tokens,cache_read_tokensecache_creation_tokens - Dalla metrica
claude_code.token.usage: somma i suoi tipi"input","cacheRead"e"cacheCreation"
Le convenzioni definiscono anche attributi separati per le letture dalla cache e le scritture nella cache:
cache_read_tokenscorrisponde agen_ai.usage.cache_read.input_tokenscache_creation_tokenscorrisponde agen_ai.usage.cache_write.input_tokens. Le versioni precedenti delle convenzioni chiamano l'attributo di scrittura nella cachegen_ai.usage.cache_creation.input_tokens, quindi usa il nome che il tuo backend si aspetta.
Audit degli eventi di sicurezza
Gli eventi OpenTelemetry sono la fonte di dati di audit per l'attività di Claude Code. Ogni evento porta attributi di identità che collegano le chiamate agli strumenti, l'attività MCP e le decisioni di autorizzazione all'utente che le ha attivate. L'esportatore di log OTLP può fornire questi eventi a qualsiasi piattaforma SIEM (Security Information and Event Management) con un ricevitore OTLP, o a un OpenTelemetry Collector che inoltra al vostro SIEM.
Attribuisci le azioni agli utenti
Gli attributi standard su ogni evento includono l'identità dell'utente autenticato: user.email, user.account_uuid, user.account_id, e organization.id quando accedete con un account Claude o, in una sessione cloud, quando le credenziali della sessione stessa le portano, più user.id e il session.id per sessione. user.id è un identificatore con ambito di installazione, tranne nelle sessioni accedute a un Claude apps gateway tramite /login, dove è il soggetto IdP dal token emesso dal gateway.
In una sessione che uno sviluppatore avvia, le chiamate agli strumenti MCP, i comandi Bash e le modifiche ai file sono quindi attribuite a quello sviluppatore. Claude Code non agisce con un account di servizio separato; l'identità registrata su ogni evento è l'account Claude dello sviluppatore, o l'identità IdP dello sviluppatore in una sessione Claude apps gateway. Nelle sessioni dei canali Claude Tag, Claude funziona come l'identità condivisa della vostra organizzazione.
Quando Claude Code si autentica con una chiave API diretta, o contro Amazon Bedrock, Google Cloud's Agent Platform, o Microsoft Foundry, non c'è un account Claude nella sessione e solo user.id e session.id vengono popolati. In questi deployment, allegate l'identità dell'utente voi stessi con OTEL_RESOURCE_ATTRIBUTES, impostato per utente tramite il file impostazioni gestite o un wrapper di avvio. Le sessioni Claude apps gateway non hanno bisogno di nulla di tutto questo: vedete Attributi standard per l'identità che i loro export portano.
export OTEL_RESOURCE_ATTRIBUTES="enduser.id=jdoe@example.com,enduser.directory_id=S-1-5-21-..."
Audit dell'attività MCP
Per acquisire l'attività del server MCP con dettagli completi della chiamata, abilitate l'esportatore di log e impostate OTEL_LOG_TOOL_DETAILS=1. Ogni operazione MCP produce quindi eventi strutturati che portano il nome del server, il nome dello strumento e gli argomenti della chiamata insieme agli attributi di identità standard:
| Evento | Cosa registra per MCP |
|---|---|
mcp_server_connection |
Connessione del server, disconnessione e guasto di connessione con server_name, transport_type, server_scope, e dettagli dell'errore |
tool_result |
Ogni chiamata dello strumento MCP con tool_name e mcp_server_scope, un payload tool_parameters contenente mcp_server_name e mcp_tool_name, e un payload tool_input contenente gli argomenti della chiamata |
tool_decision |
Se la chiamata è stata consentita o negata, se la decisione proveniva da config, un hook, o l'utente, e un payload tool_parameters contenente mcp_server_name e mcp_tool_name |
Senza OTEL_LOG_TOOL_DETAILS, questi eventi riducono il dettaglio identificativo:
tool_result: mantienemcp_server_scopee untool_namesostituito con il letterale"mcp_tool"per i server configurati dall'utente, omette il contenuto degli argomenti. Per i server integrati di Claude Desktop, nelle sessioni di cui Claude Desktop è proprietario, mantiene anche la coppiamcp_server_name/mcp_tool_nameall'interno ditool_parameters, la stessa eccezione creata dall'host cometool_decisiontool_decision: mantienetool_sourcee untool_namesostituito con il letterale"mcp_tool"per i server configurati dall'utente, omette il contenuto degli argomenti. Per i server integrati di Claude Desktop, nelle sessioni di cui Claude Desktop è proprietario, mantiene anche la coppiamcp_server_name/mcp_tool_nameall'interno ditool_parametersmcp_server_connection: ometteserver_namee il messaggio di errore, ma mantieneis_plugin,plugin_id_hash, eplugin.name, con i nomi dei plugin non Anthropic sostituiti con il letterale"third-party", in modo che i server forniti dai plugin rimangano distinguibili senza registrazione dettagliata
Mappa le domande di sicurezza agli eventi
Quando costruite regole di rilevamento, cercate il segnale che volete monitorare e interrogate il vostro backend per l'evento corrispondente e gli attributi:
| Segnale | Evento | Attributi chiave |
|---|---|---|
| Chiamata a uno strumento consentita o negata, e da dove proviene la decisione, ad esempio la configurazione, un hook o l'utente | tool_decision |
decision, source, classifier_verdict, permission_mode, tool_name; tool_parameters quando imposti OTEL_LOG_TOOL_DETAILS=1 |
| Quale controllo ha rifiutato una chiamata a uno strumento o ha reso necessaria una richiesta di permesso per essa | safety_event in cui category indica il controllo, ad esempio "managed_policy", "permission_rule", "hook" o "auto_mode_block". decision è "reject" per una chiamata che non è stata eseguita. Alcune chiamate non hanno un evento di sicurezza |
category, decision, reason_code, rule_source, tool_name, tool_use_id |
| Il classificatore della modalità auto ha consentito o bloccato una chiamata a uno strumento, oppure Claude Code ha negato la chiamata senza un verdetto del classificatore | tool_decision in cui è presente classifier_verdict. Per un diniego senza verdetto, classifier_verdict è "no_verdict" o "unavailable" |
classifier_verdict, permission_mode, tool_name; classifier_category quando imposti OTEL_LOG_TOOL_DETAILS=1 |
| Escalation della modalità di autorizzazione | permission_mode_changed |
from_mode, to_mode, trigger |
| In quale modalità di permesso è stata verificata ogni chiamata a uno strumento, incluse le chiamate effettuate dai subagent | tool_decision |
permission_mode, session.id |
| Hook della politica ha bloccato un'azione | hook_execution_complete |
hook_event, num_blocking |
| Quale chiamata a uno strumento è stata rifiutata da un hook, e quale risultato o fine del turno è stato bloccato da un hook | safety_event in cui category è "hook" e decision è "reject" per una chiamata rifiutata, oppure category è "hook_review" per un risultato o una fine del turno bloccati |
category, decision, hook_event; tool_use_id per una chiamata a uno strumento |
| Il proxy di rete della sandbox ha rifiutato una connessione o una richiesta da un comando Bash o PowerShell | safety_event in cui sandbox_violation_count è presente e non è "0" |
sandbox_violation_count, category, sandbox_enabled, tool_use_id |
| Login, logout e guasto di autenticazione | auth |
action, success, error_category |
| Connessione del server MCP o guasto | mcp_server_connection |
status, server_name, is_plugin, error_code |
| Plugin installato e la sua fonte | plugin_installed |
plugin.name, marketplace.name, marketplace.is_official |
| Comandi eseguiti e file toccati | tool_result (eseguito) o tool_decision (rifiutato) con OTEL_LOG_TOOL_DETAILS=1 |
tool_parameters; tool_input (tool_result solo) |
| Quali fonti di impostazioni gestite una macchina esegue, se il suo helper di politica è integro e perché una macchina ha rifiutato di avviarsi | managed_settings_resolved |
managed_settings.trigger, managed_settings.sources, managed_settings.source_behavior, managed_settings.helper.state, error.type; managed_settings.settings e managed_settings.resolved_sha256 con OTEL_LOG_MANAGED_SETTINGS=1 |
Claude Code emette solo il flusso di eventi grezzo. Il rilevamento delle anomalie, il baselining, la correlazione tra sessioni e gli avvisi sono responsabilità del vostro SIEM o backend di osservabilità.
Mappa i percorsi di uscita ai controlli gestiti e agli eventi
La tabella associa i percorsi che possono portare il contenuto della sessione fuori da una macchina, più la conservazione locale, alle chiavi delle impostazioni gestite che li limitano e agli eventi che li registrano. Per ciò che Claude Code stesso invia ad Anthropic, come i report di /feedback, consulta Utilizzo dei dati. I nomi rimandano alle rispettive voci di riferimento, che riportano i valori e i valori predefiniti.
| Percorso | Controlli gestiti | Eventi |
|---|---|---|
| Comandi Bash e PowerShell | sandbox.enabled, sandbox.failIfUnavailable, sandbox.allowUnsandboxedCommands, sandbox.network.allowManagedDomainsOnly, sandbox.network.allowedDomains |
tool_decision, tool_result |
| Server MCP | allowedMcpServers, allowManagedMcpServersOnly, deniedMcpServers, managed-mcp.json |
mcp_server_connection, tool_decision, tool_result |
| Hook | allowManagedHooksOnly, allowedHttpHookUrls |
hook_registered, hook_execution_start, hook_execution_complete |
| Plugin | strictKnownMarketplaces, disableSideloadFlags, syncClaudeAiPlugins, syncClaudeAiSkills |
plugin_installed, plugin_loaded |
| WebFetch | permissions.deny, allowManagedPermissionRulesOnly |
tool_decision, tool_result |
| Strumenti che caricano contenuti su claude.ai, come Artifact | permissions.deny, enableArtifact |
tool_decision, tool_result |
| Remote Control | disableRemoteControl |
Nessun evento dedicato |
| Conservazione locale delle trascrizioni | cleanupPeriodDays |
retention_sweep |
Le voci allowedHttpHookUrls, managed-mcp.json e degli eventi degli hook richiedono più di quanto mostra la tabella:
allowedHttpHookUrls: le voci vengono sottoposte a merge tra i file di impostazioni, quindi uno sviluppatore può aggiungere voci a un elenco gestito vuoto. ÈallowManagedHooksOnlya decidere quali hook vengono eseguitimanaged-mcp.json: per disattivare MCP, consulta Disable MCP entirely. Per confermare che Claude Code legga il file, consulta Validate the configuration- Eventi degli hook: Claude Code registra
hook_execution_startehook_execution_completeuna volta per ogni evento di hook, coprendo tutti gli hook corrispondenti.OTEL_LOG_TOOL_DETAILS=1da solo non registra l'URL di un hook HTTP. La configurazione dell'hook compare solo inhook_definitions, che richiede anche il tracing beta dettagliato
OTEL_LOG_TOOL_DETAILS=1 aggiunge a questi eventi le stringhe dei comandi, i nomi dei server e degli strumenti e l'input degli strumenti. Quel dettaglio può contenere lo stesso contenuto sensibile della sessione stessa, quindi abilitalo solo quando il tuo collector è approvato per conservare quel contenuto.
Verifica la pulizia di conservazione
Per dare a ogni macchina lo stesso periodo di conservazione, imposta cleanupPeriodDays nelle impostazioni gestite. Per verificare che le macchine eseguano la pulizia con quel valore, raccogli l'evento retention_sweep. period_days e i contatori sono stringhe, quindi convertili in numeri prima di confrontarli.
| Cosa riporta una macchina | Cosa significa |
|---|---|
result è "skipped" |
Claude Code ha sospeso la pulizia. skip_reason indica la causa |
used_default è "true", oppure period_days differisce dal tuo valore gestito |
La macchina non sta applicando il tuo cleanupPeriodDays gestito |
error_count è maggiore di zero |
La pulizia ha incontrato errori durante l'elenco o l'eliminazione dei file, quindi possono rimanere dati oltre il periodo di conservazione |
files_past_cutoff è maggiore di zero |
La pulizia non è riuscita a eliminare file oltre il periodo di conservazione, oppure ha trovato cartelle obsolete di skill e plugin sincronizzati. Leggilo insieme a error_count |
| Nessun evento | Di per sé non è un errore |
Una macchina che funziona come previsto può non emettere eventi per motivi come questi:
- Nessuno avvia Claude Code: non viene eseguita alcuna pulizia e la macchina conserva i suoi dati fino al prossimo avvio
- Una sessione resta aperta: Claude Code esegue la pulizia al massimo una volta per sessione
- Una sessione termina in anticipo: una pulizia che non è terminata quando la sessione si chiude non emette nulla, e lo stesso vale per una che si interrompe per un errore imprevisto
La pulizia non copre ogni percorso. Kept until you delete them elenca ciò che rimane, e Clear local data mostra come rimuoverlo.
Invia gli eventi a un SIEM
Puntate OTEL_EXPORTER_OTLP_LOGS_ENDPOINT al ricevitore OTLP del vostro SIEM, o a un OpenTelemetry Collector che inoltra all'API di ingestione nativa del vostro SIEM. Il seguente esempio di impostazioni gestite esporta solo gli eventi, con dettagli completi dello strumento abilitati per il controllo MCP e Bash:
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_LOG_TOOL_DETAILS": "1",
"OTEL_EXPORTER_OTLP_LOGS_PROTOCOL": "http/protobuf",
"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT": "https://siem.example.com:4318/v1/logs",
"OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer your-siem-token"
}
}
Per confermare che gli eventi arrivano, inviate un prompt in una sessione in esecuzione con questa configurazione e controllate il vostro SIEM per l'evento claude_code.user_prompt. Se nulla arriva, avviate Claude Code con claude --debug-file <path> e controllate il log per gli errori di esportazione [3P telemetry].
Considerazioni sul backend
La scelta dei backend di metriche, log e tracce determina i tipi di analisi che puoi eseguire:
Backend per le metriche
- Database di serie temporali: Calcoli di velocità, metriche aggregate
- Archivi colonnari: Query complesse, analisi di utenti univoci
- Piattaforme di osservabilità complete: Query avanzate, visualizzazione, avvisi
Backend per eventi e log
- Sistemi di aggregazione dei log: Ricerca full-text, analisi dei log
- Archivi colonnari: Analisi degli eventi strutturati
- Piattaforme di osservabilità complete: Correlazione tra metriche e eventi
Backend per le tracce
Scegli un backend che supporti l'archiviazione di tracce distribuite e la correlazione degli span:
- Sistemi di traccia distribuita: Visualizzazione degli span, waterfall delle richieste, analisi della latenza
- Piattaforme di osservabilità complete: Ricerca di tracce e correlazione con metriche e log
Per le organizzazioni che richiedono metriche Daily/Weekly/Monthly Active User (DAU/WAU/MAU), considera backend che supportano query di valori univoci efficienti.
Informazioni sul servizio
Tutte le metriche e gli eventi vengono esportati con i seguenti attributi di risorsa:
service.name:claude-codeper le sessioni di terminale,claude-code-desktopper le sessioni locali avviate dalla scheda Code nell'app Claude Desktopservice.version: Versione corrente di Claude Code, o la versione dell'app Desktop per le sessioni locali della scheda Codeos.type: Tipo di sistema operativo (ad esempio,linux,darwin,windows)os.version: Stringa della versione del sistema operativohost.arch: Architettura dell'host (ad esempio,amd64,arm64)wsl.version: Numero di versione WSL (presente solo quando si esegue su Windows Subsystem for Linux)- Meter Name:
com.anthropic.claude_code
Se le pipeline del tuo collettore o i tuoi dashboard filtrano su service.name = claude-code, aggiungi claude-code-desktop al filtro per acquisire anche la telemetria dalle sessioni locali della scheda Code.
Risorse di misurazione del ROI
Per una guida completa sulla misurazione del ritorno sull'investimento per Claude Code, inclusa la configurazione della telemetria, l'analisi dei costi, le metriche di produttività e i report automatizzati, consulta la Guida alla misurazione del ROI di Claude Code. Questo repository fornisce configurazioni Docker Compose pronte all'uso, configurazioni Prometheus e OpenTelemetry, e modelli per generare report di produttività integrati con strumenti come Linear.
Sicurezza e privacy
- L'esportazione OpenTelemetry al tuo backend è opt-in e richiede una configurazione esplicita. Per la telemetria operazionale separata di Anthropic e come disabilitarla, vedi Data usage
- Per impostazione predefinita, i contenuti dei file grezzi e i frammenti di codice non sono inclusi nelle metriche o negli eventi. Se imposti una variabile come
OTEL_LOG_TOOL_DETAILSoOTEL_LOG_RAW_API_BODIES, gli eventi possono includerli. Gli span di traccia sono un percorso dati separato: vedi il puntoOTEL_LOG_TOOL_CONTENTdi seguito - Quando autenticato tramite OAuth,
user.emailè incluso negli attributi di telemetria, inviato solo all'endpoint OTel che configuri, mai ad Anthropic. Se questo è una preoccupazione per la tua organizzazione, lavora con il tuo backend di telemetria per filtrare o oscurare questo campo - Il contenuto del prompt dell'utente non viene raccolto per impostazione predefinita. Viene registrata solo la lunghezza del prompt. Per includere il contenuto del prompt, imposta
OTEL_LOG_USER_PROMPTS=1. Quando abilitato:-
Gli eventi
user_promptportano il testo del prompt in due attributi,prompteprompt_text. Se nel tuo collector elimini o mascheri il testo del prompt dell'evento in base al nome dell'attributo, indica entrambi gli attributi nella regolaQuesto processore
attributesdi OpenTelemetry Collector elimina entrambi gli attributi nelle pipeline che lo elencano:processors: attributes/drop-prompt-text: actions: - key: prompt action: delete - key: prompt_text action: delete -
Con il tracing attivo, lo span
claude_code.interactionporta il testo del prompt nel suo attributouser_prompt -
Sotto la traccia beta dettagliata, gli span portano anche i nuovi messaggi dell'utente, i risultati degli strumenti e i promemoria di sistema inviati con ogni richiesta, il testo del prompt di sistema e l'output del modello. Attributi di contenuto sotto la traccia beta dettagliata elenca ciascun attributo. L'evento
claude_code.system_promptporta il prompt di sistema completo
-
- Il testo della risposta dell'assistente non viene raccolto per impostazione predefinita. Viene registrata solo la lunghezza della risposta. Per includere il testo della risposta, imposta
OTEL_LOG_ASSISTANT_RESPONSES=1. Come tutti i dati OpenTelemetry da Claude Code, il testo della risposta viene inviato solo all'endpoint OTel che configuri, mai ad Anthropic. Quando questa variabile non è impostata,OTEL_LOG_USER_PROMPTSviene utilizzato come fallback, quindi impostaOTEL_LOG_ASSISTANT_RESPONSES=0se desideri il contenuto del prompt senza il contenuto della risposta negli eventi. Sotto la traccia beta dettagliata, lo spanclaude_code.llm_requestporta comunque l'output del modello inresponse.model_output, che segueOTEL_LOG_USER_PROMPTSanziché questa variabile - Gli argomenti di input dello strumento e i parametri non vengono registrati per impostazione predefinita. Per includerli, imposta
OTEL_LOG_TOOL_DETAILS=1. Per i server integrati di Claude Desktop, nelle sessioni di cui Claude Desktop è proprietario,tool_decisionetool_resultportano la coppiamcp_server_name/mcp_tool_name, nomi creati dall'host piuttosto che contenuto degli argomenti, anche con il flag disattivato. Questi dati vengono inviati solo all'endpoint OTEL che configuri, mai ad Anthropic. Gli argomenti potrebbero comunque contenere valori sensibili, quindi configura il tuo backend di telemetria per filtrare o oscurare questi attributi secondo necessità. Quando abilitato:- Gli eventi
tool_resultetool_decisionincludono un attributotool_parameterscon comandi Bash, nomi dei server MCP e dello strumento, e nomi delle skill. I campi comefull_commandvengono emessi non troncati - Gli eventi
tool_resultincludono inoltre un attributotool_inputcon percorsi di file, URL, modelli di ricerca e altri argomenti. I singoli valori superiori a 512 caratteri vengono troncati e il totale è limitato a circa 4 K caratteri - Gli eventi
user_promptincludono ilcommand_nameverbatim per i comandi personalizzati, plugin e MCP - I contatori di costo e token e gli eventi
api_request,api_erroreapi_refusalportano nomi reali di agente, skill, plugin e server MCP e strumento nei loro attributi di attribuzione - Lo span
claude_code.toolporta attributi derivati dall'input comefile_path. Sotto la traccia beta dettagliata porta anche un attributotool_input
- Gli eventi
- Il contenuto dello strumento non viene registrato negli span di traccia per impostazione predefinita. Per includerlo, imposta
OTEL_LOG_TOOL_CONTENT=1. Lo spanclaude_code.toolquindi porta un evento spantool.outputcon contenuti di file grezzi, output dei comandi Bash e ciò che restituiscono gli strumenti MCP, WebFetch e WebSearch, troncato al limite di contenuto (60 KB per impostazione predefinita) per attributo. I risultati degli strumenti MCP, WebFetch e WebSearch richiedono Claude Code v2.1.283 o successivo. Il contenuto dello strumento raggiunge anche gli span attraversonew_context, il cui gate differisce per span. Configura il tuo backend di telemetria per filtrare o oscurare questi attributi secondo necessità - I corpi grezzi della richiesta e della risposta dell'API Anthropic Messages non vengono registrati per impostazione predefinita. Per includerli, imposta
OTEL_LOG_RAW_API_BODIESnella tua shell, nelle impostazioni utente o nelle impostazioni gestite. Viene ignorato nelle impostazioni di progetto e locali. I corpi contengono l'intera cronologia della conversazione, incluso il prompt di sistema, ogni turno precedente dell'utente e dell'assistente, e risultati degli strumenti, quindi l'abilitazione di questa opzione implica il consenso a tutto ciò che gli altri flag di contenutoOTEL_LOG_*rivelerebbero. Claude Code oscura sempre il contenuto del pensiero esteso di Claude in questi corpi, indipendentemente da altre impostazioni. Il valore che imposti determina come Claude Code fornisce i corpi:-
Con
=1, Claude Code emette eventi di logapi_request_bodyeapi_response_bodyper ogni chiamata API. L'attributobodydegli eventi porta il payload serializzato in JSON, troncato al limite di contenuto (60 KB per impostazione predefinita) -
Con
=file:<dir>, Claude Code scrive i corpi non troncati nei file.request.jsone.response.jsonin quella directory, e gli eventi portano un percorsobody_refinvece del corpo inline. Spedisci la directory con un log collector o sidecar piuttosto che attraverso il flusso di telemetria.Per ogni risposta riuscita, Claude Code aggiunge anche una riga a
index.jsonlin quella directory, collegando il file di risposta al file di richiesta che lo ha prodotto e al messaggio di trascrizione in cui è diventato. Ogni riga non contiene contenuto di messaggio, e la sezione evento corpo della risposta API elenca i suoi campi. Il file di indice richiede Claude Code v2.1.274 o successivo
-
Monitoraggio di Claude Code su Amazon Bedrock
Per una guida dettagliata al monitoraggio dell'utilizzo di Claude Code per Amazon Bedrock, consulta Claude Code Monitoring Implementation (Amazon Bedrock).