Usa OpenTelemetry con il Claude SDK
Traccia ogni richiesta inviata dal Claude SDK e ogni strumento eseguito dal suo tool runner, e invia gli span alla tua piattaforma di osservabilità.
Con OpenTelemetry, il Claude SDK può emettere uno span (intervallo) per ogni richiesta che invia e per ogni uso di uno strumento eseguito dal tool runner. Puoi visualizzare questi span nella tua piattaforma di osservabilità, annidati nelle tue tracce.
L'SDK emette span nella tua applicazione. L'exporter OpenTelemetry della tua applicazione li invia alla tua piattaforma di osservabilità.
1. Installa l'SDK
Installa o aggiorna all'ultima versione del Claude SDK:
pip install --upgrade anthropicSe la tua applicazione non usa ancora l'SDK di OpenTelemetry, installalo insieme a un exporter per console, che userai nel passaggio successivo per stampare gli span:
pip install opentelemetry-sdk2. Registra un tracer provider
Un tracer provider (fornitore di tracer) è l'oggetto OpenTelemetry che crea gli span e li passa al tuo exporter. L'SDK usa il tracer provider registrato dalla tua applicazione, quindi le tue chiamate all'SDK restano invariate. Registralo prima della prima chiamata che vuoi tracciare.
L'esempio seguente registra un tracer provider che stampa ogni span sulla console e poi effettua una chiamata. Usalo per vedere gli span prima di collegare una piattaforma di osservabilità:
from anthropic import Anthropic
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor
# Registra un tracer provider che stampa ogni span sulla console.
provider = TracerProvider()
provider.add_span_processor(SimpleSpanProcessor(ConsoleSpanExporter()))
trace.set_tracer_provider(provider)
client = Anthropic()
message = client.messages.create(
model="claude-opus-5-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
)
print(message.content)La console mostra uno span anthropic.messages.create.
3. Invia gli span alla tua piattaforma di osservabilità
Sostituisci l'exporter per console con un exporter OTLP che punta alla tua piattaforma di osservabilità. Per la configurazione nel tuo linguaggio, consulta la documentazione di OpenTelemetry su exporter Python, exporter TypeScript, exporter .NET, exporter Go, configurazione dell'SDK Java, exporter PHP, o exporter Ruby.
4. Configura l'SDK
Usa le opzioni seguenti per decidere cosa includere nei tuoi span e dove inviarli. Puoi impostare un'opzione nel tuo codice oppure, se ne ha una, con la variabile d'ambiente indicata sotto il suo nome.
| Opzione | Usala per | Predefinito |
|---|---|---|
traces.content_modeANTHROPIC_OPEN_TELEMETRY_TRACES_CONTENT_MODE=content | Includere prompt e risposte negli span. Consulta Modalità di contenuto. | metadata_only |
traces.max_content_bytesANTHROPIC_OPEN_TELEMETRY_TRACES_MAX_CONTENT_BYTES | Modificare il limite del contenuto di ogni span. Consulta Limiti del contenuto. | 0,75 MB |
conversation_id | Collegare più chiamate in un'unica conversazione. L'SDK scrive l'ID in gen_ai.conversation.id. L'ID viene esportato in entrambe le modalità di contenuto, quindi non inserirvi dati personali o segreti. | Nessuno |
tracer_provider | Scegliere il tracer provider che riceve gli span dell'SDK. | Il tracer provider che hai configurato in Registra un tracer provider |
propagationANTHROPIC_OPEN_TELEMETRY_PROPAGATION=false | Smettere di inviare gli header del contesto di traccia e del baggage con le richieste, ad esempio quando la strumentazione del tuo client HTTP li invia già. L'SDK continua a emettere span. Disponibile negli SDK per Python, TypeScript, Go, Java, Ruby e PHP. | Attivo |
open_telemetryANTHROPIC_OPEN_TELEMETRY=false | Disattivare gli span per un client, ad esempio quando un'altra libreria traccia già l'SDK. | Attivo |
L'esempio seguente mostra come usare ciascuna opzione:
# Usa un tracer provider specifico e registra il contenuto.
# L'impostazione di open_telemetry sostituisce tutte le variabili d'ambiente ANTHROPIC_OPEN_TELEMETRY*.
client = Anthropic(
open_telemetry={"tracer_provider": provider, "traces": {"content_mode": "content"}}
)
# Disattiva gli span per un singolo client.
quiet_client = Anthropic(open_telemetry=False)
# Imposta un ID di conversazione con with_options(), che restituisce una copia del client.
# with_options() sostituisce l'intera opzione, quindi parti da client.open_telemetry.
message = client.with_options(
open_telemetry={**client.open_telemetry, "conversation_id": "conv_42"}
).messages.create(
model="claude-opus-5-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
)Passaggi successivi
Ottieni osservabilità sulla Claude API.
Segui una richiesta dal tuo client fino alla Claude API.
Tracciamento di uno stream
Lo span anthropic.messages.create di uno stream termina quando il tuo codice ha letto l'intero stream o lo ha chiuso, quindi chiudi uno stream che smetti di leggere in anticipo. In modalità contenuto, lo span contiene la risposta del modello solo quando leggi lo stream con messages.stream().
Gli span che avvii mentre leggi uno stream sono fratelli dello span dell'SDK, non suoi figli. Per raggrupparli con la richiesta, avvia un tuo span che racchiuda sia la chiamata sia il ciclo di lettura.
Tracciamento di una sandbox self-hosted di Managed Agents
In una sandbox self-hosted di Managed Agents, è la tua sandbox a eseguire gli strumenti, quindi gli span degli strumenti provengono dall'SDK anziché dall'API. Il worker dell'ambiente degli SDK Python, TypeScript e Go emette uno span per ogni strumento che esegue e per ogni richiesta che invia. Li raggruppa sotto uno span anthropic.environment.work per ogni elemento di lavoro.
Per ottenere questi span:
- Nel processo che esegue il worker, configura il tracing dell'SDK come nei passaggi da 1 a 4.
- Consenti il traffico di rete dalla sandbox alla tua piattaforma di osservabilità o all'OpenTelemetry Collector.
Quando il worker invia un risultato dello strumento, lo span dell'API di quella richiesta è annidato sotto il relativo span dell'SDK. Per le richieste che il worker invia a Claude Platform on AWS, invece, gli span dell'API si trovano in tracce separate.
Contesto di traccia e baggage
A ogni richiesta, l'SDK usa il propagatore della tua applicazione per inviare il contesto di traccia all'API in header come traceparent. Se quel propagatore scrive anche il baggage, l'SDK invia inoltre il tuo baggage. Per inviare il contesto di traccia senza baggage, registra solo il propagatore del contesto di traccia W3C.
Per evitare che l'SDK invii questi header, ad esempio quando la strumentazione del tuo client HTTP li invia già, disattiva la propagazione dell'SDK:
client = Anthropic(open_telemetry={"propagation": False})Mentre l'SDK chiama uno strumento MCP, lo span di strumento dell'SDK è lo span corrente. Alcune librerie client MCP inviano il contesto di traccia al server MCP in _meta, così un server che lo legge può aggiungere i propri span alla tua traccia sotto quello span di strumento. Lo fanno il pacchetto Python mcp dalla versione 2.0 e il pacchetto C# ModelContextProtocol. Gli SDK MCP per TypeScript, Go, Java, Ruby e PHP non lo fanno da soli.
Risoluzione dei problemi
| Problema | Cosa verificare |
|---|---|
| Nessuno span dall'SDK | Registra il tracer provider prima della prima chiamata. Assicurati di aver installato l'SDK come in Installare l'SDK e che ANTHROPIC_OPEN_TELEMETRY non sia false. |
| L'SDK Java non invia span al tracer provider registrato, oppure non invia il contesto di traccia all'API | Un'altra dipendenza imposta opentelemetry-api a una versione inferiore alla 1.57.0. Aggiorna opentelemetry-api alla 1.57.0 o successiva. |
| Gli span dell'SDK non sono annidati sotto i tuoi span, oppure gli span creati dal tuo strumento non sono annidati sotto lo span di strumento | Chiama l'SDK dall'interno di uno dei tuoi span, come fa l'esempio in Collega gli span dell'API alle tue tracce. In Go, avvia gli span creati dal tuo strumento a partire dal ctx che il tool runner gli passa. |
Le richieste dall'SDK non hanno un header traceparent | Registra il propagatore del contesto di traccia W3C con OpenTelemetry. L'SDK scrive gli header con il propagatore della tua applicazione. |
| Lo span dell'SDK di uno stream non termina o non contiene la risposta | Consulta Tracciamento di uno stream. |
| Ogni richiesta appare due volte | Lo span dell'SDK e lo span dell'API di una richiesta hanno lo stesso nome. Usa il tipo di span o service.name per distinguerli. Se anche un'altra libreria traccia l'SDK, disattiva una delle due. |
Compatibility
- Supported platforms
- Claude APIBeta
- Claude Platform on AWSBeta
- Amazon BedrockBeta
- Google CloudBeta
- Microsoft FoundryBeta
- Compatibile con
- Messages API, Claude Managed Agents
Was this page helpful?