Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktigt
Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller har begränsade funktioner. Mer information finns i Supplemental Terms of Use for Microsoft Azure Previews.
Microsoft Foundry samlar automatiskt in serverloggar för agenter som körs i portalen. Spårning på klientsidan utökar den insynen i din egen programkod. Genom att instrumentera agentprogrammet med OpenTelemetry kan du samla in intervall för modellanrop, verktygsanrop och anpassad logik– och sedan exportera dem till Azure Monitor Application Insights, konsolen eller eventuella observerbarhetsservrar som stöder OpenTelemetry-protokollet (OTLP), till exempel Datadog, Grafana Tempo, Jaeger eller Honeycomb.
I den här artikeln lär du dig att:
- Installera nödvändiga OpenTelemetry-spårningspaket.
- Aktivera GenAI-spårningsinstrumentation för agentprogram.
- Exportera spårningar till Azure Monitor, konsolen eller en OTLP-kompatibel serverdel.
- Aktivera innehållsinspelning för att samla in meddelandeinnehåll.
- Aktivera spårningskontextspridning för distribuerad spårning (Python).
- Spåra anpassade funktioner.
Förutsättningar
Ett Foundry-projekt med en Application Insights-resurs ansluten.
En AI-modell som har distribuerats till projektet. Observera distributionsnamnet.
Azure CLI är installerat. Logga in genom att köra
az login.Deltagare eller högre roll i Foundry-projektet. Om du vill visa spårningar behöver du även Log Analytics Reader på den anslutna Application Insights-resursen. Mer information finns i Rollbaserad åtkomstkontroll i Foundry.
Följande miljövariabler anges med dina egna värden:
Variabel Beskrivning FOUNDRY_PROJECT_ENDPOINTSlutpunkts-URL för Ditt Foundry-projekt. Hitta den på projektöversiktssidan i Foundry-portalen. FOUNDRY_MODEL_NAMEDistribueringsnamnet för en AI-modell i ditt projekt. Hitta den under Modeller i Foundry-portalen.
Språkspecifika krav
Installera spårningspaket
Installera Microsoft Foundry SDK, OpenTelemetry och Azure Monitor-exportören:
pip install azure-ai-projects azure-identity opentelemetry-sdk azure-core-tracing-opentelemetry azure-monitor-opentelemetry
Installera OTLP-exportören för endast konsol- eller OTLP-export (till exempel Aspire Dashboard):
pip install opentelemetry-exporter-otlp
Aktivera GenAI-spårning
GenAI-spårningsinstrumentation är en experimentell förhandsversionsfunktion. Intervall, attribut och händelser kan ändras i framtida versioner. Du måste uttryckligen anmäla dig innan spårningen är aktiv.
AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING Ange miljövariabeln till trueinnan du anropar AIProjectInstrumentor().instrument():
import os
os.environ["AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING"] = "true"
from azure.ai.projects.telemetry import AIProjectInstrumentor
# Enable instrumentation
AIProjectInstrumentor().instrument()
Om variabeln inte har angetts eller inte true är (skiftlägesokänslig) aktiveras inte spårningsinstrumentationen och en varning loggas.
Exportera spårningar till Azure Monitor
Skicka spårningar till Azure Application Insights så att de visas i vyn Traces i 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"]
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"):
with project.get_openai_client() as openai:
# Create an agent
agent = project.agents.create_version(
agent_name="MyAgent",
definition=PromptAgentDefinition(
model=os.environ["FOUNDRY_MODEL_NAME"],
instructions="You are a helpful assistant.",
),
)
print(f"Agent created (id: {agent.id}, name: {agent.name})")
# Create a conversation and get a response
conversation = openai.conversations.create()
response = openai.responses.create(
conversation=conversation.id,
extra_body={"agent_reference": {"name": agent.name, "id": agent.id, "type": "agent_reference"}},
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)
Referens: AIProjectClient, DefaultAzureCredential, configure_azure_monitor
Observera
Om du vill korrelera spårningar med en specifik agent i Foundry-portalen inkluderar du agent_reference med både name och id i ditt responses.create()-anrop (som du ser i Python exemplet ovan). Spårningar visas vanligtvis inom 2–5 minuter.
Exportera spårningar till konsolen
Konsolexport är användbart för lokal felsökning. Spårningar skrivs ut direkt till standardutdata.
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__)
Du kan också använda Aspire Dashboard som ett lokalt OTLP-kompatibelt visningsprogram. Installera OTLP-exportören (pip install opentelemetry-exporter-otlp) och konfigurera den som exportör istället för ConsoleSpanExporter.
Referens: AIProjectInstrumentor, ConsoleSpanExporter
Aktivera innehållsinspelning
Innehållsinspelning samlar in meddelandeinnehåll och verktygsanropsargument i spårningar. Dessa data kan innehålla känslig användarinformation.
Försiktighet
Innehållsinspelning samlar in användarmeddelanden, argument för verktygsanrop och modellutdata. Aktivera endast den här inställningen i utvecklingsmiljöer. Aktivera inte innehållsinspelning i produktion om inte dina efterlevnads- och sekretesskrav tillåter det.
Ange miljövariabeln före instrumentering:
import os
os.environ["OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT"] = "true"
Viktigt
Den här variabeln styr inspelning endast för inbyggda spårningar. När du använder dekoratören @trace_function på dina egna funktioner spåras alltid alla parametrar och returvärden oavsett den här inställningen.
Inaktivera automatisk instrumentering (Python)
Python SDK instrumenterar automatiskt OpenAI-svars- och konversations-API-anrop. Om du vill inaktivera den här automatiska instrumenteringen anger du AZURE_TRACING_GEN_AI_INSTRUMENT_RESPONSES_API till false innan du anropar AIProjectInstrumentor().instrument(). När det är inaktiverat registreras endast explicita anpassade intervall.
import os
os.environ["AZURE_TRACING_GEN_AI_INSTRUMENT_RESPONSES_API"] = "false"
Spåra binära data (Python)
När innehållsinspelning är aktiverat spårar SDK fil-ID:t och filnamnen som standard. Om du vill inkludera fullständiga avbildnings-URL:er (inklusive base64-data-URI:er) och fildata i intervall anger du AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA till true.
import os
os.environ["AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA"] = "true"
Varning
Aktivering AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA kan avsevärt öka spårningsnyttolastens storlek. Vissa spårningsserverdelar har begränsningar för den maximala storleken på span-data. Kontrollera att din observerbarhetsserverdel stöder de förväntade nyttolaststorlekarna innan du aktiverar den här inställningen.
Aktivera spårningskontextspridning (Python)
Med spårningskontextspridning kan klientsidans intervall korrelera med serversidans intervall från Azure OpenAI och andra Azure tjänster. När det är aktiverat matar SDK automatiskt in W3C Trace Context-huvuden (traceparent och tracestate) i HTTP-begäranden som görs av OpenAI-klienter som hämtas via get_openai_client().
Spårningskontextspridning aktiveras som standard när spårning är aktiverat. Om du vill inaktivera den anger du AZURE_TRACING_GEN_AI_ENABLE_TRACE_CONTEXT_PROPAGATION miljövariabeln till falseeller skickar parametern direkt:
from azure.ai.projects.telemetry import AIProjectInstrumentor
# Disable trace context propagation
AIProjectInstrumentor().instrument(enable_trace_context_propagation=False)
Ändringar i den här inställningen påverkar endast OpenAI-klienter som hämtas via get_openai_client()efter ändringen. Tidigare förvärvade klienter påverkas inte.
Kontrollbagagespridning (Python)
Endast traceparent och tracestate rubriker sprids som standard. Om du även vill inkludera baggage rubriken anger du AZURE_TRACING_GEN_AI_TRACE_CONTEXT_PROPAGATION_INCLUDE_BAGGAGE till true.
Viktigt
Rubriken baggage kan innehålla godtyckliga nyckel/värde-par, inklusive användaridentifierare, sessionsinformation eller andra potentiellt känsliga data. Innan du aktiverar bagagespridning:
- Granska vilka data som ditt program och bibliotek från tredje part lägger till i OpenTelemetry-bagaget.
- Förstå att bagage skickas till Azure OpenAI och kan loggas av Azure tjänster.
- Lägg aldrig till känslig information i bagaget när spridning är aktiverat.
Observera
C# SDK förlitar sig på standard .NET-propagering System.Diagnostics.Activity. Explicit spårningskontextinmatning per begäran exponeras inte som en separat SDK-funktion.
Spåra anpassade funktioner
Python – använd @trace_function dekoratör
Dekoratören trace_function skapar ett OpenTelemetry-intervall för varje anrop till din funktion. Parametrar registreras som code.function.parameter.<name> och returvärdet som 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"
Om du vill använda ett anpassat spannnamn i stället för funktionsnamnet skickar du det som en parameter:
@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"
Dekoratören registrerar:
-
Parametrar som
code.function.parameter.<name>span-attribut. -
Returnera värden som
code.function.return.value. -
Typer som stöds:
str,int,float,booloch samlingar (list,dict,tuple,set). Objekttyper utelämnas.
Observera
Miljövariabeln OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT påverkar inte anpassad funktionsspårning. Dekoratören @trace_function spårar alltid parametrar och returnerar värden.
C# – använd ActivitySource manuellt
C# SDK innehåller ingen spårningsdekoratör. Använd standard-.NET ActivitySource för att instrumentera dina egna funktioner:
using System.Diagnostics;
// Define a custom activity source
private static readonly ActivitySource s_source = new("MyApp.CustomFunctions");
string FetchWeather(string location)
{
using var activity = s_source.StartActivity("FetchWeather");
activity?.SetTag("input.location", location);
var result = $"Weather in {location}: sunny, 72°F";
activity?.SetTag("output", result);
return result;
}
Registrera din anpassade källa tillsammans med SDK-källan i spårningsprovidern:
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Azure.AI.Projects.*")
.AddSource("MyApp.CustomFunctions")
.SetResourceBuilder(
ResourceBuilder.CreateDefault().AddService("MyApp"))
.AddConsoleExporter()
.Build();
Konfigurera instrumentation programmatiskt (Python)
Som ett alternativ till miljövariabler skickar du konfigurationsparametrarna direkt till AIProjectInstrumentor().instrument():
from azure.ai.projects.telemetry import AIProjectInstrumentor
AIProjectInstrumentor().instrument(
enable_content_recording=True,
enable_trace_context_propagation=True,
enable_baggage_propagation=False,
)
| Parameter | Motsvarande miljövariabel | Standard |
|---|---|---|
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 |
* Standard är True när spårning är aktiverat.
När både en parameter och dess motsvarande miljövariabel anges prioriteras parametervärdet.
Lägga till anpassade attribut i intervall (Python)
Skapa en anpassad SpanProcessor för att injicera metadata, såsom sessions-ID, i varje 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
Registrera processorn med den globala spårningsprovidern:
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())
Kontrollera spårningsbeteende med miljövariabler
I följande tabell visas alla miljövariabler som du kan använda för att konfigurera spårningsbeteende:
| Variabel | Språk | Standard | Beskrivning |
|---|---|---|---|
AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING |
Python, C# | false |
Aktivera GenAI-spårningsinstrumentation. |
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT |
Python, C# | false |
Avbilda meddelandeinnehåll och verktygsanropsparametrar. |
AZURE_TRACING_GEN_AI_ENABLE_TRACE_CONTEXT_PROPAGATION |
Python | true* |
Inför W3C Trace Context-huvuden i förfrågningar. |
AZURE_TRACING_GEN_AI_TRACE_CONTEXT_PROPAGATION_INCLUDE_BAGGAGE |
Python | false |
Inkludera baggage-headern i spårkontextutbredning. |
AZURE_TRACING_GEN_AI_INSTRUMENT_RESPONSES_API |
Python | true |
Api:er för autoinstrumentsvar och konversationer. |
AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA |
Python | false |
Inkludera bild- och fildata i intervall (inte bara fil-ID:t). |
* Standard är true när spårning är aktiverat.
En fullständig lista över miljövariabler och deras beteende finns i Spårning i Azure AI Projects SDK README.
Säkerhet och sekretess
Spårning på klientsidan kan samla in känslig information. Följ dessa metoder för att minska risken:
- Innehållsinspelning: Samlar in användarindata, modellsvar och argument för verktygsanrop. Inaktivera i produktion om det inte krävs.
- Bagagespridning: Kan exponera PII- och sessionsdata. Inaktiverad som standard.
- Trace-kontextspridning: Skickar spårnings-ID:n till Azure-tjänster. Om efterlevnadskrav förbjuder delning av spårningsidentifierare inaktiverar du det.
- Hemligheter: Lagra inte hemligheter, autentiseringsuppgifter eller token i prompter, verktygsargument eller span-attribut.
- Åtkomstkontroll: Behandla spårningsdata som produktionstelemetri. Tillämpa samma åtkomstkontroller och kvarhållningsprinciper som du använder för loggar och mått.
Felsökning
| Frågan | Upplösning |
|---|---|
| Spårning ger inga intervall | Kontrollera att AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING är inställt på trueinnan du anropar AIProjectInstrumentor().instrument() (Python) eller innan du skapar tracer-providern (C#). |
| Meddelandeinnehållet visas inte i intervall | Ange OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT till true. |
| Spårningar visas inte i Azure Monitor | Kontrollera att Application Insights-reťazec pripojenia är korrekt och att resursen är tillgänglig. Kontrollera att ditt konto har rollen Log Analytics Reader. |
| Intervallen på klientsidan och serversidan är inte korrelerade | (Python) Kontrollera att spårningskontextspridning är aktiverat och att OpenAI-klienter hämtas via instrumentationen get_openai_client()after. |
| Spårningar visas med en fördröjning | Spårningar tar vanligtvis 2–5 minuter att visas i Foundry-portalen och Azure Monitor. Vänta och uppdatera. |