Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wichtig
Elemente, die in diesem Artikel als Vorschau gekennzeichnet sind, befinden sich derzeit in der Vorschau. Diese Vorschau wird ohne Service Level Agreement (SLA) bereitgestellt, und Microsoft empfiehlt sie nicht für Produktionsworkloads. Bestimmte Features werden möglicherweise nicht unterstützt oder weisen eingeschränkte Funktionen auf. Weitere Informationen finden Sie unter Supplementale Nutzungsbedingungen für Microsoft Azure Previews.
Microsoft Foundry erfasst automatisch serverseitige Traces für Agents, die im Portal ausgeführt werden. Client-seitiges Tracing erweitert diese Sichtbarkeit innerhalb des eigenen Anwendungscodes. Durch die Instrumentierung Ihrer Agent-Anwendung mit OpenTelemetry können Sie Spans für Modellaufrufe, Toolaufrufe und benutzerdefinierte Logik erfassen und sie anschließend nach Azure Monitor Application Insights, in die Konsole oder in ein beliebiges Observability-Backend exportieren, das das OpenTelemetry-Protokoll (OTLP) unterstützt, z. B. Datadog, Grafana Tempo, Jaeger oder Honeycomb.
In diesem Artikel erfahren Sie, wie Sie:
- Installieren Sie die erforderlichen OpenTelemetry-Tracing-Pakete.
- Aktivieren Sie die Tracing-Instrumente für GenAI in Agentenanwendungen.
- Exportieren Sie Traces nach Azure Monitor, in die Konsole oder in ein OTLP-kompatibles Backend.
- Aktivieren Sie die Inhaltsaufzeichnung zum Erfassen von Nachrichteninhalten.
- Aktivieren Sie die Ablaufverfolgungskontextverteilung für die verteilte Ablaufverfolgung (Python).
- Nachverfolgen benutzerdefinierter Funktionen.
Voraussetzungen
Ein Foundry-Projekt, das mit einer Application Insights-Ressource verbunden ist.
Ein KI-Modell, das für das Projekt bereitgestellt wird. Notieren Sie sich den Bereitstellungsnamen.
Azure CLI installiert. Melden Sie sich an, indem Sie
az loginausführen.Mitwirkender oder höher für das Foundry-Projekt. Zum Anzeigen von Traces benötigen Sie außerdem die Rolle Log Analytics Reader für die verbundene Application Insights-Ressource. Wenn diese Log Analytics Tabellen geschützt sind, weisen Sie auch privileged Monitoring Data Reader zu. Weitere Informationen finden Sie unter Rollenbasierte Zugriffssteuerung in Foundry.
Die folgenden Umgebungsvariablen werden mit eigenen Werten gesetzt.
Variable Beschreibung FOUNDRY_PROJECT_ENDPOINTDie Endpunkt-URL Ihres Foundry-Projekts. Suchen Sie es auf der Projektübersichtsseite im Foundry-Portal. FOUNDRY_MODEL_NAMEDer Bereitstellungsname eines KI-Modells in Ihrem Projekt. Suchen Sie es unter "Modelle " im Findry-Portal.
Sprachspezifische Voraussetzungen
- Python 3.10 oder höher.
- Die Version 2.0.0 oder höher des
azure-ai-projectsPakets.
Installieren Sie Ablaufverfolgungspakete
Installieren Sie das Microsoft Foundry SDK, OpenTelemetry und den Azure Monitor Exporter:
pip install azure-ai-projects azure-identity opentelemetry-sdk azure-core-tracing-opentelemetry azure-monitor-opentelemetry
Installieren Sie für den reinen Konsolen- oder OTLP-Export (z. B. Aspire Dashboard) den OTLP-Exporter:
pip install opentelemetry-exporter-otlp
Aktivieren der GenAI-Ablaufverfolgung
GenAI-Tracing-Instrumentierung ist eine experimentelle Vorschaufunktion. Spans, Attribute und Ereignisse können sich in zukünftigen Versionen ändern. Sie müssen die Ablaufverfolgung ausdrücklich aktivieren, bevor sie wirksam wird.
Setzen Sie die Umgebungsvariable AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACINGtrue Aufrufen auf AIProjectInstrumentor().instrument():
import os
os.environ["AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING"] = "true"
from azure.ai.projects.telemetry import AIProjectInstrumentor
# Enable instrumentation
AIProjectInstrumentor().instrument()
Wenn die Variable nicht festgelegt ist oder nicht true entspricht (ohne Beachtung der Groß-/Kleinschreibung), wird die Tracing-Instrumentierung nicht aktiviert, und es wird eine Warnung protokolliert.
Exportieren von Ablaufverfolgungen in Azure Monitor
Senden Sie Ablaufverfolgungen an Azure-Anwendung Insights, so dass sie in der Ansicht Ablaufverfolgungens des Foundry-Portals und in Azure Monitor angezeigt werden.
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)
Referenz: AIProjectClient, , DefaultAzureCredentialconfigure_azure_monitor
Hinweis
Um Traces mit einem bestimmten Agenten im Foundry-Portal zu korrelieren, schließen Sie agent_reference zusammen mit name und id in Ihrem responses.create()-Aufruf ein (wie im oben dargestellten Python-Beispiel gezeigt). Spuren erscheinen in der Regel innerhalb von 2 bis 5 Minuten.
Ablaufverfolgungen in die Konsole exportieren
Der Konsolenexport ist für das lokale Debuggen nützlich. Ablaufverfolgungen werden direkt in die Standardausgabe geschrieben.
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__)
Sie können das Aspire Dashboard auch als lokalen OTLP-kompatiblen Viewer verwenden. Installieren Sie den OTLP-Exporter (pip install opentelemetry-exporter-otlp) und konfigurieren Sie ihn als Exporter anstelle von ConsoleSpanExporter.
Referenz: AIProjectInstrumentor, ConsoleSpanExporter
Aktivieren der Inhaltsaufzeichnung
Die Inhaltsaufzeichnung erfasst Nachrichteninhalte und Argumente von Toolaufrufen in Ablaufverfolgungen. Diese Daten können vertrauliche Benutzerinformationen enthalten.
Vorsicht
Die Inhaltsaufzeichnung erfasst Benutzernachrichten, Toolaufrufargumente und Modellausgaben. Aktivieren Sie diese Einstellung nur in Entwicklungsumgebungen. Aktivieren Sie die Inhaltsaufzeichnung nicht in der Produktion, es sei denn, Ihre Compliance- und Datenschutzanforderungen erlauben dies.
Legen Sie die Umgebungsvariable vor der Instrumentierung fest:
import os
os.environ["OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT"] = "true"
Wichtig
Diese Variable steuert die Aufzeichnung nur für integrierte Ablaufverfolgungen. Wenn Sie den @trace_function Decorator für Ihre eigenen Funktionen verwenden, werden alle Parameter und Rückgabewerte immer unabhängig von dieser Einstellung nachverfolgt.
Automatische Instrumentierung deaktivieren (Python)
Das Python SDK überwacht automatisch die OpenAI Responses und Conversations API-Aufrufe. Um diese automatische Instrumentierung zu deaktivieren, legen Sie AZURE_TRACING_GEN_AI_INSTRUMENT_RESPONSES_API auf false fest, bevor Sie AIProjectInstrumentor().instrument() aufrufen. Wenn diese Option deaktiviert ist, werden nur explizite benutzerdefinierte Spannen aufgezeichnet.
import os
os.environ["AZURE_TRACING_GEN_AI_INSTRUMENT_RESPONSES_API"] = "false"
Binärdaten nachverfolgen (Python)
Wenn die Inhaltsaufzeichnung aktiviert ist, zeichnet das SDK standardmäßig die Datei-IDs und Dateinamen auf. Um vollständige Bild-URLs (einschließlich Base64-Daten-URIs) und Dateidaten in Spannen einzuschließen, setzen Sie AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA auf true.
import os
os.environ["AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA"] = "true"
Warnung
Die Aktivierung von AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA kann die Tracing-Payload-Größe erheblich vergrößern. Für einige Abflaufverfolgungs-Back-Ends gelten Einschränkungen für die maximale Größe von Span-Daten. Stellen Sie sicher, dass Ihr Observability-Back-End die erwarteten Nutzlastgrößen unterstützt, bevor Sie diese Einstellung aktivieren.
Aktivieren der Ablaufverfolgungskontextverteilung (Python)
Die Transaktionskontextweitergabe ermöglicht die Korrelation clientseitiger Spans mit serverseitigen Spans von Azure OpenAI und anderen Azure-Diensten. Wenn diese Funktion aktiviert ist, fügt das SDK automatisch W3C Trace Context-Header (traceparent und tracestate) in HTTP-Anforderungen ein, die von über get_openai_client() abgerufenen OpenAI-Clients gesendet werden.
Die Ablaufverfolgungskontextweitergabe ist standardmäßig aktiviert, wenn die Ablaufverfolgung aktiviert ist. Um sie zu deaktivieren, legen Sie die AZURE_TRACING_GEN_AI_ENABLE_TRACE_CONTEXT_PROPAGATION Umgebungsvariable auf false, oder übergeben Sie den Parameter direkt:
from azure.ai.projects.telemetry import AIProjectInstrumentor
# Disable trace context propagation
AIProjectInstrumentor().instrument(enable_trace_context_propagation=False)
Änderungen an dieser Einstellung wirken sich nur auf OpenAI-Clients aus, die get_openai_client() der Änderung über abgerufen werden. Zuvor erworbene Kunden sind nicht betroffen.
Steuerung der Gepäckweiterleitung (Python)
Standardmäßig werden nur traceparent und tracestate Kopfzeilen weitergegeben. Um auch den baggage Header einzuschließen, setzen Sie AZURE_TRACING_GEN_AI_TRACE_CONTEXT_PROPAGATION_INCLUDE_BAGGAGE auf true.
Wichtig
Der baggage Header kann beliebige Schlüsselwertpaare enthalten, einschließlich Benutzer-IDs, Sitzungsinformationen oder anderer potenziell vertraulicher Daten. Vor der Aktivierung der Gepäckweitergabe:
- Überprüfen Sie, welche Daten Ihre Anwendung und Drittanbieterbibliotheken zu OpenTelemetry-Gepäck hinzufügen.
- Verstehen Sie, dass Gepäck an Azure OpenAI gesendet wird und möglicherweise von Azure-Diensten protokolliert wird.
- Fügen Sie dem Gepäck niemals vertrauliche Informationen hinzu, wenn die Weiterleitung aktiviert ist.
Hinweis
Das C#-SDK basiert auf der standardmäßigen .NET System.Diagnostics.Activity-Verteilung. Die explizite Injektion des Tracekontexts pro Anforderung wird nicht als separates SDK-Feature bereitgestellt.
Nachverfolgen benutzerdefinierter Funktionen
Python - verwenden Sie den @trace_function Dekorateur
Der Decorator trace_function erstellt für jeden Aufruf Ihrer Funktion einen OpenTelemetry-Span. Die Parameter werden als code.function.parameter.<name> und der Rückgabewert als code.function.return.value aufgezeichnet.
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"
Um einen benutzerdefinierten Span-Namen anstelle des Funktionsnamens zu verwenden, übergeben Sie ihn als 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"
Der Decorator zeichnet auf:
-
Parameter als
code.function.parameter.<name>Spanattribute. -
Rückgabewerte als
code.function.return.value. -
Unterstützte Typen:
str, ,intfloat,bool, und Auflistungen (list,dict,tuple,set). Objekttypen werden weggelassen.
Hinweis
Die OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT Umgebungsvariable wirkt sich nicht auf die Ablaufverfolgung benutzerdefinierter Funktionen aus. Der @trace_function Dekorateur verfolgt immer Parameter und Rückgabewerte.
C# – manuell verwenden ActivitySource
Das C#-SDK enthält keinen Ablaufverfolgungs-Decorator. Verwenden Sie das Standard-.NET-Framework ActivitySource, um Ihre eigenen Funktionen zu instrumentieren:
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;
}
Registrieren Sie Ihre benutzerdefinierte Quelle zusammen mit der SDK-Quelle in Ihrem Tracer-Anbieter:
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Azure.AI.Projects.*")
.AddSource("MyApp.CustomFunctions")
.SetResourceBuilder(
ResourceBuilder.CreateDefault().AddService("MyApp"))
.AddConsoleExporter()
.Build();
Programmgesteuerte Konfiguration der Instrumentation (Python)
Als Alternative zu Umgebungsvariablen übergeben Sie Konfigurationsparameter direkt an 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 | Umgebungsvariablenentsprechung | 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 |
* Der Standardwert ist True, wenn die Ablaufverfolgung aktiviert ist.
Wenn sowohl ein Parameter als auch die entsprechende Umgebungsvariable festgelegt werden, hat der Parameterwert Vorrang.
Hinzufügen von benutzerdefinierten Attributen zu Spans
Erstellen Sie eine benutzerdefinierte SpanProcessor, um Metadaten wie Sitzungs-IDs in jeden Abschnitt einzufügen.
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
Registrieren Sie den Prozessor beim globalen Tracer-Provider.
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())
Steuern des Tracing-Verhaltens mit Umgebungsvariablen
In der folgenden Tabelle sind alle Umgebungsvariablen aufgeführt, die Sie zum Konfigurieren des Ablaufverfolgungsverhaltens verwenden können:
| Variable | Sprache | Standard | Beschreibung |
|---|---|---|---|
AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING |
Python, C# | false |
Aktivieren Sie die GenAI-Ablaufverfolgungsinstrumentierung. |
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT |
Python, C# | false |
Erfassen Sie Nachrichteninhalte und Toolaufrufparameter. |
AZURE_TRACING_GEN_AI_ENABLE_TRACE_CONTEXT_PROPAGATION |
Python | true* |
Fügen Sie W3C-Ablaufverfolgungskontext-Header in Anforderungen ein. |
AZURE_TRACING_GEN_AI_TRACE_CONTEXT_PROPAGATION_INCLUDE_BAGGAGE |
Python | false |
Schließen Sie den Header baggage in die Transaktionskontextweitergabe ein. |
AZURE_TRACING_GEN_AI_INSTRUMENT_RESPONSES_API |
Python | true |
Responses- und Conversations-APIs automatisch instrumentieren. |
AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA |
Python | false |
Bild- und Dateidaten in Abschnitten einschließen (nicht nur Datei-IDs). |
* Der Standardwert ist true, wenn die Ablaufverfolgung aktiviert ist.
Eine vollständige Liste der Umgebungsvariablen und deren Verhalten finden Sie unter Tracing im AZURE AI Projects SDK README.
Sicherheit und Datenschutz
Clientseitige Ablaufverfolgung kann vertrauliche Informationen erfassen. Befolgen Sie die folgenden Methoden, um Risiken zu reduzieren:
- Inhaltsaufzeichnung: Erfasst Benutzereingaben, Modellantworten und Toolaufrufargumente. In der Produktion deaktivieren, es sei denn, es ist erforderlich.
- Baggage-Weitergabe: Kann PII- und Sitzungsdaten exponieren. Standardmäßig deaktiviert.
- Weitergabe des Ablaufverfolgungskontexts: Sendet Ablaufverfolgungs-IDs an Azure-Dienste. Wenn Complianceanforderungen die Freigabe von Verfolgungs-IDs verbieten, deaktivieren Sie sie.
- Geheime Schlüssel: Speichern Sie keine geheimen Schlüssel, Anmeldeinformationen oder Token in Eingabeaufforderungen, Toolargumenten oder Span-Attributen.
- Zugriffssteuerung: Ablaufverfolgungsdaten als Produktionstelemetrie behandeln. Wenden Sie dieselben Zugriffssteuerungen und Aufbewahrungsrichtlinien an, die Sie für Protokolle und Metriken verwenden.
Problembehandlung
| Angelegenheit | Auflösung |
|---|---|
| Tracing erzeugt keine Spans | Vergewissern Sie sich, dass AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING auf true gesetzt wird bevor Sie AIProjectInstrumentor().instrument() aufrufen (Python) oder bevor Sie den Traceranbieter erstellen (C#). |
| Nachrichteninhalte werden nicht in Spans angezeigt | Setze OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT auf true. |
| Ablaufverfolgungen werden nicht in Azure Monitor angezeigt | Überprüfen Sie, ob die Application Insights-Verbindungszeichenfolge korrekt ist und auf die Ressource zugegriffen werden kann. Überprüfen Sie, ob Ihr Konto über die Rolle Log Analytics Reader verfügt. Wenn die Tabellen geschützt sind, weisen Sie auch privileged Monitoring Data Reader zu. |
| Clientseitige und serverseitige Spannweiten werden nicht korreliert | (Python) Vergewissern Sie sich, dass die Transaktionskontextweitergabe aktiviert ist und dass OpenAI-Clients get_openai_client() der Instrumentierung über abgerufen werden. |
| Ablaufverfolgungen werden mit Verzögerung angezeigt | Es dauert in der Regel 2 bis 5 Minuten, bis Ablaufverfolgungen im Foundry-Portal und in Azure Monitor angezeigt werden. Warten und aktualisieren. |