Use o OpenTelemetry com o Claude SDK
Rastreie cada requisição que o Claude SDK envia e cada ferramenta que o seu tool runner executa, e envie os spans para a sua plataforma de observabilidade.
Com o OpenTelemetry, o Claude SDK pode emitir um span (intervalo) para cada requisição que envia e para cada uso de ferramenta que o tool runner executa. Você pode visualizar esses spans na sua plataforma de observabilidade, aninhados nos seus próprios traces.
O SDK emite spans na sua aplicação. O exportador do OpenTelemetry da sua aplicação os envia para a sua plataforma de observabilidade.
1. Instale o SDK
Instale ou atualize para a versão mais recente do Claude SDK:
pip install --upgrade anthropicSe a sua aplicação ainda não usa o SDK do OpenTelemetry, instale-o junto com um exportador de console, que você usará na próxima etapa para imprimir os spans:
pip install opentelemetry-sdk2. Registre um tracer provider
Um tracer provider (provedor de tracer) é o objeto do OpenTelemetry que cria spans e os repassa ao seu exportador. O SDK usa o tracer provider que a sua aplicação registra, então suas chamadas ao SDK permanecem as mesmas. Registre-o antes da primeira chamada que você deseja rastrear.
O exemplo a seguir registra um tracer provider que imprime cada span no console e, em seguida, faz uma chamada. Use-o para ver os spans antes de conectar uma plataforma de observabilidade:
from anthropic import Anthropic
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor
# Registra um tracer provider que imprime cada span no 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)O console mostra um span anthropic.messages.create.
3. Envie os spans para a sua plataforma de observabilidade
Substitua o exportador de console por um exportador OTLP que aponte para a sua plataforma de observabilidade. Para a configuração na sua linguagem, consulte a documentação do OpenTelemetry sobre exportadores para Python, exportadores para TypeScript, exportadores para .NET, exportadores para Go, configuração do SDK para Java, exportadores para PHP, ou exportadores para Ruby.
4. Configure o SDK
Use as opções a seguir para decidir o que entra nos seus spans e para onde eles são enviados. Você pode definir uma opção no seu código ou, se ela tiver uma, com a variável de ambiente indicada abaixo do nome dela.
| Opção | Use-a para | Padrão |
|---|---|---|
traces.content_modeANTHROPIC_OPEN_TELEMETRY_TRACES_CONTENT_MODE=content | Incluir prompts e respostas nos spans. Consulte Modos de conteúdo. | metadata_only |
traces.max_content_bytesANTHROPIC_OPEN_TELEMETRY_TRACES_MAX_CONTENT_BYTES | Alterar o limite de conteúdo de cada span. Consulte Limites de conteúdo. | 0,75 MB |
conversation_id | Vincular várias chamadas em uma única conversa. O SDK grava o ID em gen_ai.conversation.id. O ID é exportado em ambos os modos de conteúdo, portanto não coloque dados pessoais nem segredos nele. | Nenhum |
tracer_provider | Escolher o tracer provider que recebe os spans do SDK. | O tracer provider que você configurou em Registre um tracer provider |
propagationANTHROPIC_OPEN_TELEMETRY_PROPAGATION=false | Parar de enviar os cabeçalhos de contexto de trace e de baggage com as requisições, por exemplo quando a instrumentação do seu cliente HTTP já os envia. O SDK continua emitindo spans. Disponível nos SDKs de Python, TypeScript, Go, Java, Ruby e PHP. | Ativado |
open_telemetryANTHROPIC_OPEN_TELEMETRY=false | Desativar os spans para um cliente, por exemplo quando outra biblioteca já rastreia o SDK. | Ativado |
O exemplo a seguir mostra como usar cada opção:
# Use um tracer provider específico e registre o conteúdo.
# Definir open_telemetry substitui todas as variáveis de ambiente ANTHROPIC_OPEN_TELEMETRY*.
client = Anthropic(
open_telemetry={"tracer_provider": provider, "traces": {"content_mode": "content"}}
)
# Desative os spans para um cliente.
quiet_client = Anthropic(open_telemetry=False)
# Defina um ID de conversa com with_options(), que retorna uma cópia do cliente.
# with_options() substitui a opção inteira, então comece a partir de 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"}],
)Próximos passos
Obtenha observabilidade na Claude API.
Acompanhe uma requisição desde o seu cliente até a Claude API.
Rastreamento de um stream
O span anthropic.messages.create de um stream termina quando o seu código leu o stream inteiro ou o fechou, então feche um stream que você parar de ler antes do fim. No modo de conteúdo, o span contém a resposta do modelo somente quando você lê o stream com messages.stream().
Os spans que você inicia enquanto lê um stream são irmãos do span do SDK, não filhos dele. Para agrupá-los com a requisição, inicie seu próprio span envolvendo tanto a chamada quanto o loop de leitura.
Rastreamento de um sandbox auto-hospedado do Managed Agents
Em um sandbox auto-hospedado do Managed Agents, é o seu sandbox que executa as ferramentas, então os spans das ferramentas vêm do SDK em vez da API. O worker de ambiente dos SDKs para Python, TypeScript e Go emite um span para cada ferramenta que executa e para cada requisição que envia. Ele os agrupa sob um span anthropic.environment.work para cada item de trabalho.
Para obter esses spans:
- No processo que executa o worker, configure o rastreamento do SDK conforme as etapas 1 a 4.
- Permita o tráfego de rede do sandbox para a sua plataforma de observabilidade ou o seu OpenTelemetry Collector.
Quando o worker envia um resultado de ferramenta, o span da API dessa requisição fica aninhado sob o span do SDK dela. Para requisições que o worker envia ao Claude Platform on AWS, os spans da API ficam em traces próprios.
Contexto de trace e baggage
Em cada requisição, o SDK usa o propagador da sua aplicação para enviar o contexto de trace para a API em cabeçalhos como traceparent. Se esse propagador também gravar baggage, o SDK envia também o seu baggage. Para enviar o contexto de trace sem baggage, registre apenas o propagador de contexto de trace W3C.
Para que o SDK não envie esses cabeçalhos, por exemplo quando a instrumentação do seu cliente HTTP já os envia, desative a propagação do SDK:
client = Anthropic(open_telemetry={"propagation": False})Enquanto o SDK chama uma ferramenta MCP, o span da ferramenta do SDK é o span atual. Algumas bibliotecas cliente de MCP enviam o contexto de trace ao servidor MCP em _meta, de modo que um servidor que o leia pode adicionar seus spans ao seu trace sob esse span de ferramenta. O pacote mcp do Python a partir da versão 2.0 e o pacote ModelContextProtocol do C# fazem isso. Os SDKs de MCP para TypeScript, Go, Java, Ruby e PHP não fazem isso por conta própria.
Solução de problemas
| Problema | O que verificar |
|---|---|
| Nenhum span do SDK | Registre o tracer provider antes da primeira chamada. Certifique-se de que você instalou o SDK conforme Instalar o SDK e de que ANTHROPIC_OPEN_TELEMETRY não é false. |
| O SDK Java não envia spans para o tracer provider registrado, ou não envia o contexto de trace para a API | Outra dependência define opentelemetry-api abaixo de 1.57.0. Atualize opentelemetry-api para 1.57.0 ou posterior. |
| Os spans do SDK não ficam aninhados sob seus spans, ou os spans que sua ferramenta cria não ficam aninhados sob o span da ferramenta | Chame o SDK de dentro de um dos seus próprios spans, como faz o exemplo em Conecte os spans da API aos seus próprios traces. Em Go, inicie os spans que sua ferramenta cria a partir do ctx que o tool runner passa para ela. |
As requisições do SDK não têm um cabeçalho traceparent | Registre o propagador de contexto de trace W3C no OpenTelemetry. O SDK grava os cabeçalhos com o propagador da sua aplicação. |
| O span do SDK de um stream não termina ou não tem a resposta | Consulte Rastreamento de um stream. |
| Cada requisição aparece duas vezes | O span do SDK e o span da API de uma requisição têm o mesmo nome. Use o tipo do span ou service.name para diferenciá-los. Se outra biblioteca também rastrear o SDK, desative uma das duas. |
Compatibility
- Supported platforms
- Claude APIBeta
- Claude Platform on AWSBeta
- Amazon BedrockBeta
- Google CloudBeta
- Microsoft FoundryBeta
- Compatível com
- Messages API, Claude Managed Agents
Was this page helpful?