Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Os itens marcados como visualização neste artigo estão atualmente em versão prévia. Esta versão prévia é fornecida sem um contrato de nível de serviço (SLA), e a Microsoft não a recomenda para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou ter recursos restritos. Para obter mais informações, consulte Supplemental Terms of Use for Microsoft Azure Previews.
O Microsoft Foundry captura automaticamente rastreamentos do lado do servidor para agentes em execução no portal. O rastreamento do lado do cliente estende essa visibilidade ao seu próprio código de aplicativo. Ao instrumentar seu aplicativo de agente com o OpenTelemetry, você pode capturar intervalos para chamadas de modelo, invocações de ferramentas e lógica personalizada , em seguida, exportá-los para Azure Monitor Application Insights, o console ou qualquer back-end de observabilidade que dê suporte ao protocolo OpenTelemetry (OTLP), como Datadog, Grafana Tempo, Jaeger ou Honeycomb.
Neste artigo, você aprenderá a:
- Instale os pacotes de rastreamento OpenTelemetry necessários.
- Habilitar a instrumentação de rastreamento do GenAI para aplicações de agentes.
- Exporte rastreamentos para Azure Monitor, o console ou um back-end compatível com OTLP.
- Habilite a gravação de conteúdo para capturar o conteúdo da mensagem.
- Habilite a propagação de contexto de rastreamento para rastreamento distribuído (Python).
- Rastrear funções personalizadas.
Pré-requisitos
Um projeto do Foundry com um recurso do Application Insights conectado.
Um modelo de IA implantado no projeto. Observe o nome da implantação.
CLI do Azure instalado. Faça login executando
az login.Colaborador ou função superior no projeto Foundry. Para exibir rastreamentos, você também precisa do Log Analytics Reader do recurso do Application Insights conectado. Se essas tabelas do Log Analytics estiverem protegidas, atribua também Privileged Monitoring Data Reader. Para obter mais informações, consulte o controle de acesso baseado em função no Foundry.
As seguintes variáveis de ambiente estão definidas com seus próprios valores:
Variável Descrição FOUNDRY_PROJECT_ENDPOINTURL do endpoint do projeto Foundry. Localize-o na página Visão geral do projeto no portal do Foundry. FOUNDRY_MODEL_NAMEO nome do modelo de IA implantado no seu projeto. Localize-o em Modelos no portal do Foundry.
Pré-requisitos específicos do idioma
- Python 3.10 ou posterior.
- O
azure-ai-projectspacote versão 2.0.0 ou posterior.
Instalar pacotes de rastreamento
Instale o SDK do Microsoft Foundry, o OpenTelemetry e o exportador de Azure Monitor:
pip install azure-ai-projects opentelemetry-sdk azure-core-tracing-opentelemetry azure-monitor-opentelemetry
Para exportação somente de console ou OTLP (por exemplo, Aspire Dashboard), instale o exportador OTLP:
pip install opentelemetry-exporter-otlp
Habilitar o rastreamento do GenAI
A instrumentação de rastreamento do GenAI é um recurso de prévia experimental. Intervalos, atributos e eventos podem mudar em versões futuras. Você deve optar explicitamente por ativar o rastreamento.
Defina a variável de AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING ambiente para trueantes de chamar AIProjectInstrumentor().instrument():
import os
os.environ["AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING"] = "true"
from azure.ai.projects.telemetry import AIProjectInstrumentor
# Enable instrumentation
AIProjectInstrumentor().instrument()
Se a variável não estiver definida ou não for true (sem diferenciar maiúsculas de minúsculas), a instrumentação de rastreamento não será habilitada e um aviso será registrado.
Exportar rastreamentos para Azure Monitor
Envie rastreamentos para Aplicativo Azure Insights para que eles apareçam na exibição Traces do portal do Foundry e no Azure Monitor.
import os
os.environ["AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING"] = "true"
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import PromptAgentDefinition
from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
AGENT_NAME = "MyAgent"
with (
DefaultAzureCredential() as credential,
AIProjectClient(endpoint=endpoint, credential=credential) as project,
):
# Get the Application Insights connection string from the project
connection_string = project.telemetry.get_application_insights_connection_string()
configure_azure_monitor(connection_string=connection_string)
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("agent-tracing-scenario"):
# Create an agent
agent = project.agents.create_version(
agent_name=AGENT_NAME,
definition=PromptAgentDefinition(
model=os.environ["FOUNDRY_MODEL_NAME"],
instructions="You are a helpful assistant.",
),
)
print(f"Agent created (id: {agent.id}, name: {agent.name})")
with project.get_openai_client(agent_name=agent.name) as openai:
# Create a conversation and get a response
conversation = openai.conversations.create()
response = openai.responses.create(
conversation=conversation.id,
input="What is the largest city in France?",
)
print(f"Response: {response.output_text}")
# Clean up
openai.conversations.delete(conversation_id=conversation.id)
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
Referência: AIProjectClient, , DefaultAzureCredentialconfigure_azure_monitor
Nota
Para correlacionar rastreamentos com um agente específico no portal do Foundry, inclua o agent_reference com name e id em sua chamada responses.create() (conforme mostrado no exemplo de Python acima). Os traços normalmente aparecem dentro de 2 a 5 minutos.
Exportar rastreamentos para o console
A exportação de console é útil para depuração local. Os rastreamentos são impressos diretamente na saída padrão.
import os
os.environ["AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING"] = "true"
from azure.ai.projects.telemetry import AIProjectInstrumentor
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor
# Set up console tracing
tracer_provider = TracerProvider()
tracer_provider.add_span_processor(
SimpleSpanProcessor(ConsoleSpanExporter()))
trace.set_tracer_provider(tracer_provider)
# Enable instrumentation
AIProjectInstrumentor().instrument()
tracer = trace.get_tracer(__name__)
Você também pode usar o Aspire Dashboard como um visualizador compatível com OTLP local. Instale o exportador OTLP (pip install opentelemetry-exporter-otlp) e configure-o como exportador em vez de ConsoleSpanExporter.
Referência: AIProjectInstrumentor, ConsoleSpanExporter
Habilitar gravação de conteúdo
A gravação de conteúdo captura o conteúdo das mensagens e os argumentos das chamadas de ferramentas nos rastreamentos. Esses dados podem incluir informações confidenciais do usuário.
Cuidado
A gravação de conteúdo captura mensagens do usuário, argumentos de chamada de ferramenta e saídas de modelo. Habilite apenas essa configuração em ambientes de desenvolvimento. Não habilite a gravação de conteúdo em produção, a menos que seus requisitos de conformidade e privacidade permitam isso.
Defina a variável de ambiente antes da instrumentação:
import os
os.environ["OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT"] = "true"
Importante
Essa variável controla a gravação apenas para rastreamentos internos. Ao usar o decorador @trace_function em suas próprias funções, todos os parâmetros e valores de retorno são sempre rastreados, independentemente dessa configuração.
Desabilitar a instrumentação automática (Python)
O SDK do Python instrumenta automaticamente as chamadas à API de Conversas e Respostas OpenAI. Para desabilitar essa instrumentação automática, defina AZURE_TRACING_GEN_AI_INSTRUMENT_RESPONSES_API como false antes de chamar AIProjectInstrumentor().instrument(). Quando desabilitado, somente intervalos personalizados explícitos são registrados.
import os
os.environ["AZURE_TRACING_GEN_AI_INSTRUMENT_RESPONSES_API"] = "false"
Rastrear dados binários (Python)
Quando a gravação de conteúdo está habilitada, o SDK rastreia IDs de arquivo e nomes de arquivo por padrão. Para incluir URLs de imagem completa (incluindo URIs de dados base64) e dados de arquivo em intervalos, defina AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA como true.
import os
os.environ["AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA"] = "true"
Aviso
Habilitar AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA pode aumentar significativamente o tamanho da carga útil de rastreamento. Alguns back-ends de rastreamento têm limitações no tamanho máximo dos dados de intervalo. Verifique se o back-end de observabilidade dá suporte aos tamanhos de carga útil esperados antes de ativar essa configuração.
Habilitar a propagação de contexto de rastreamento (Python)
A propagação de contexto de rastreamento permite que os intervalos do lado do cliente se correlacionem com intervalos do lado do servidor do OpenAI do Azure e de outros serviços do Azure. Quando habilitado, o SDK injeta automaticamente cabeçalhos de contexto de rastreamento W3C (traceparent e tracestate) em solicitações HTTP feitas por clientes OpenAI obtidas por meio de get_openai_client().
A propagação de contexto de rastreamento é habilitada por padrão quando o rastreamento está habilitado. Para desabilitá-la, defina a variável de ambiente AZURE_TRACING_GEN_AI_ENABLE_TRACE_CONTEXT_PROPAGATION como false, ou passe o parâmetro diretamente:
from azure.ai.projects.telemetry import AIProjectInstrumentor
# Disable trace context propagation
AIProjectInstrumentor().instrument(enable_trace_context_propagation=False)
As alterações nessa configuração afetam apenas os clientes OpenAI obtidos via get_openai_client()após a alteração. Os clientes adquiridos anteriormente não são afetados.
Propagação de bagagem de controle (Python)
Por padrão, somente traceparent e tracestate cabeçalhos são propagados. Para incluir também o baggage cabeçalho, defina AZURE_TRACING_GEN_AI_TRACE_CONTEXT_PROPAGATION_INCLUDE_BAGGAGE como true.
Importante
O baggage cabeçalho pode conter pares chave-valor arbitrários, incluindo identificadores de usuário, informações de sessão ou outros dados potencialmente confidenciais. Antes de habilitar a propagação de bagagem:
- Verifique quais dados são adicionados pelo seu aplicativo e pelas bibliotecas de terceiros à bagagem do OpenTelemetry.
- Entenda que a bagagem é enviada para Azure OpenAI e pode ser registrada por serviços de Azure.
- Nunca adicione informações confidenciais à bagagem quando a propagação estiver habilitada.
Nota
O SDK C# depende da propagação padrão do .NET System.Diagnostics.Activity. A injeção explícita de contexto de rastreamento por solicitação não é exposta como um recurso separado do SDK.
Rastrear funções personalizadas
Python – use o decorador @trace_function
O decorador trace_function cria um intervalo OpenTelemetry para cada chamada para sua função. Os parâmetros são registrados como code.function.parameter.<name> e o valor retornado como code.function.return.value.
from azure.ai.projects.telemetry import trace_function
@trace_function
def fetch_weather(location: str) -> str:
"""Get the current weather for a location."""
return f"Weather in {location}: sunny, 72°F"
Para usar um nome de intervalo personalizado em vez do nome da função, passe-o como um parâmetro:
@trace_function("get-current-weather")
def fetch_weather(location: str) -> str:
"""Get the current weather for a location."""
return f"Weather in {location}: sunny, 72°F"
Os registros do decorador:
-
Parâmetros como atributos de intervalo
code.function.parameter.<name>. -
Valores de retorno como
code.function.return.value. -
Tipos com suporte:
str, ,int,float,boole coleções (list, ,dict,tuple).setOs tipos de objeto são omitidos.
Nota
A OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT variável de ambiente não afeta o rastreamento de função personalizada. O @trace_function decorador sempre rastreia parâmetros e retorna valores.
C# — use ActivitySource manualmente
O SDK do C# não inclui um decorador de rastreamento. Use o padrão .NET ActivitySource para instrumentar suas próprias funções:
using System.Diagnostics;
using ActivitySource source = new("MyApp.CustomFunctions");
string FetchWeather(string location)
{
using var activity = source.StartActivity("FetchWeather");
activity?.SetTag("input.location", location);
var result = $"Weather in {location}: sunny, 72°F";
activity?.SetTag("output", result);
return result;
}
Registre sua fonte personalizada junto com a origem do SDK em seu provedor de rastreamento:
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Azure.AI.Projects.*")
.AddSource("MyApp.CustomFunctions")
.SetResourceBuilder(
ResourceBuilder.CreateDefault().AddService("MyApp"))
.AddConsoleExporter()
.Build();
Configurar a instrumentação programaticamente (Python)
Como alternativa às variáveis de ambiente, passe os parâmetros de configuração diretamente para AIProjectInstrumentor().instrument():
from azure.ai.projects.telemetry import AIProjectInstrumentor
AIProjectInstrumentor().instrument(
enable_content_recording=True,
enable_trace_context_propagation=True,
enable_baggage_propagation=False,
)
| Parâmetro | Equivalente à variável de ambiente | Padrão |
|---|---|---|
enable_content_recording |
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT |
False |
enable_trace_context_propagation |
AZURE_TRACING_GEN_AI_ENABLE_TRACE_CONTEXT_PROPAGATION |
True* |
enable_baggage_propagation |
AZURE_TRACING_GEN_AI_TRACE_CONTEXT_PROPAGATION_INCLUDE_BAGGAGE |
False |
* O padrão é True quando o rastreamento está habilitado.
Quando um parâmetro e sua variável de ambiente correspondente são definidos, o valor do parâmetro tem prioridade.
Adicionar atributos personalizados a spans
Crie um SpanProcessor personalizado para injetar metadados, como IDs de sessão, em cada span:
from opentelemetry.sdk.trace import SpanProcessor, ReadableSpan
from opentelemetry.trace import Span
class CustomAttributeSpanProcessor(SpanProcessor):
def on_start(self, span: Span, parent_context=None):
span.set_attribute("session.id", "user-session-abc")
def on_end(self, span: ReadableSpan):
pass
Registre o processador com o provedor de rastreamento global:
from typing import cast
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
provider = cast(TracerProvider, trace.get_tracer_provider())
provider.add_span_processor(CustomAttributeSpanProcessor())
Controlar o comportamento de rastreamento com variáveis de ambiente
A tabela a seguir lista todas as variáveis de ambiente que você pode usar para configurar o comportamento de rastreamento:
| Variável | Linguagem | Padrão | Descrição |
|---|---|---|---|
AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING |
Python, C# | false |
Habilite a instrumentação de rastreamento do GenAI. |
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT |
Python, C# | false |
Capturar o conteúdo da mensagem e os parâmetros de chamada de ferramenta. |
AZURE_TRACING_GEN_AI_ENABLE_TRACE_CONTEXT_PROPAGATION |
Python | true* |
Injete cabeçalhos de "Trace Context" W3C em solicitações. |
AZURE_TRACING_GEN_AI_TRACE_CONTEXT_PROPAGATION_INCLUDE_BAGGAGE |
Python | false |
Inclua o baggage cabeçalho na propagação de contexto de rastreamento. |
AZURE_TRACING_GEN_AI_INSTRUMENT_RESPONSES_API |
Python | true |
Instrumente automaticamente APIs de Respostas e Conversas. |
AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA |
Python | false |
Inclua dados de imagem e arquivo em intervalos (não apenas IDs de arquivo). |
* O padrão é true quando o rastreamento está habilitado.
Para obter a lista completa de variáveis de ambiente e seu comportamento, consulte Tracing in the Azure AI Projects SDK README.
Segurança e privacidade
O rastreamento do lado do cliente pode capturar informações confidenciais. Siga estas práticas para reduzir o risco:
- Gravação de conteúdo: captura entradas do usuário, respostas de modelo e argumentos de chamada de ferramenta. Desative na produção, exceto se necessário.
- Propagação de bagagem: pode expor PII (Informações de Identificação Pessoal) e dados de sessão. Desabilitado por padrão.
- Propagação de contexto de rastreamento: envia IDs de rastreamento para os serviços do Azure. Se os requisitos de conformidade proibirem o compartilhamento de identificadores de rastreamento, desabilite-os.
- Segredos: não armazene segredos, credenciais ou tokens em prompts, argumentos de ferramenta ou atributos de intervalo.
- Controle de acesso: tratar dados de rastreamento como telemetria de produção. Aplique os mesmos controles de acesso e políticas de retenção que você usa para logs e métricas.
Solucionando problemas
| Questão | Resolução |
|---|---|
| O rastreamento não produz intervalos | Verifique se AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING está definido como trueantes de chamar AIProjectInstrumentor().instrument() (Python) ou antes de criar o provedor de rastreamento (C#). |
| O conteúdo da mensagem não aparece em trechos | Definir OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT como true. |
| Os traços não aparecem no Azure Monitor | Verifique se a cadeia de conexão do Application Insights está correta e se o recurso está acessível. Verifique se sua conta tem a função Log Analytics Leitor. Se as tabelas estiverem protegidas, atribua também o Leitor de Dados de Monitoramento Privilegiado. |
| Os intervalos do lado do cliente e do servidor não estão correlacionados | (Python) Verifique se a propagação de contexto de rastreamento está habilitada e se os clientes do OpenAI são obtidos via get_openai_client()após a instrumentação. |
| Os rastreamentos aparecem com um atraso | Os rastreamentos geralmente levam de 2 a 5 minutos para aparecer no portal do Foundry e no Azure Monitor. Aguarde e atualize. |