Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Waarneembaarheid is een belangrijk aspect van het bouwen van betrouwbare en onderhoudbare systemen. Agent Framework biedt ingebouwde ondersteuning voor waarneembaarheid, zodat u het gedrag van uw agents kunt bewaken.
In deze handleiding wordt u begeleid bij de stappen voor het inschakelen van waarneembaarheid met Agent Framework, zodat u begrijpt hoe uw agents presteren en eventuele problemen diagnosticeren.
Integratie van OpenTelemetry
Agent Framework kan worden geïntegreerd met OpenTelemetry en met name Agent Framework verzendt traceringen, logboeken en metrische gegevens volgens de Semantische Conventies van OpenTelemetry GenAI.
Waarneembaarheid inschakelen (C#)
Als u waarneembaarheid voor uw chatclient wilt inschakelen, moet u de chatclient als volgt bouwen:
// Using the Azure OpenAI client as an example
var instrumentedChatClient = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential())
.GetChatClient(deploymentName)
.AsIChatClient() // Converts a native OpenAI SDK ChatClient into a Microsoft.Extensions.AI.IChatClient
.AsBuilder()
.UseOpenTelemetry(sourceName: "MyApplication", configure: (cfg) => cfg.EnableSensitiveData = true) // Enable OpenTelemetry instrumentation with sensitive data
.Build();
Als u waarneembaarheid voor uw agent wilt inschakelen, moet u de agent als volgt bouwen:
var agent = new ChatClientAgent(
instrumentedChatClient,
name: "OpenTelemetryDemoAgent",
instructions: "You are a helpful assistant that provides concise and informative responses.",
tools: [AIFunctionFactory.Create(GetWeatherAsync)]
).WithOpenTelemetry(sourceName: "MyApplication", enableSensitiveData: true); // Enable OpenTelemetry instrumentation with sensitive data
Belangrijk
Wanneer u waarneembaarheid inschakelt voor uw chatclients en agents, ziet u mogelijk dubbele informatie, met name wanneer gevoelige gegevens zijn ingeschakeld. De chatcontext (inclusief prompts en antwoorden) die door zowel de chatclient als de agent wordt vastgelegd, wordt opgenomen in beide bereiken. Afhankelijk van uw behoeften kunt u ervoor kiezen om alleen waarneembaarheid in te schakelen op de chatclient of alleen op de agent om duplicatie te voorkomen. Zie de Semantische Conventies van GenAI voor meer informatie over de kenmerken die zijn vastgelegd voor LLM en agents.
Opmerking
Schakel gevoelige gegevens alleen in in ontwikkel- of testomgevingen, omdat gebruikersgegevens mogelijk worden weergegeven in productielogboeken en traceringen. Gevoelige gegevens omvatten prompts, antwoorden, argumenten voor functieoproep en resultaten.
Configuratie
Nu uw chatclient en -agent zijn geïnstrueerd, kunt u de OpenTelemetry-exporteurs configureren om de telemetriegegevens naar de gewenste back-end te verzenden.
Sporen
Als u traceringen naar de gewenste back-end wilt exporteren, kunt u de OpenTelemetry SDK configureren in de opstartcode van uw toepassing. Als u bijvoorbeeld traceringen wilt exporteren naar een Azure Monitor-resource:
using Azure.Monitor.OpenTelemetry.Exporter;
using OpenTelemetry;
using OpenTelemetry.Trace;
using OpenTelemetry.Resources;
using System;
var SourceName = "MyApplication";
var applicationInsightsConnectionString = Environment.GetEnvironmentVariable("APPLICATION_INSIGHTS_CONNECTION_STRING")
?? throw new InvalidOperationException("APPLICATION_INSIGHTS_CONNECTION_STRING is not set.");
var resourceBuilder = ResourceBuilder
.CreateDefault()
.AddService(ServiceName);
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetResourceBuilder(resourceBuilder)
.AddSource(SourceName)
.AddSource("*Microsoft.Extensions.AI") // Listen to the Experimental.Microsoft.Extensions.AI source for chat client telemetry.
.AddSource("*Microsoft.Extensions.Agents*") // Listen to the Experimental.Microsoft.Extensions.Agents source for agent telemetry.
.AddAzureMonitorTraceExporter(options => options.ConnectionString = applicationInsightsConnectionString)
.Build();
Aanbeveling
Afhankelijk van uw back-end kunt u verschillende exporteurs gebruiken. Zie de OpenTelemetry .NET-documentatie voor meer informatie. Voor lokale ontwikkeling kunt u overwegen om het Aspire Dashboard te gebruiken.
Metrics
Als u metrische gegevens naar de gewenste back-end wilt exporteren, kunt u de OpenTelemetry SDK configureren in de opstartcode van uw toepassing. Als u bijvoorbeeld metrische gegevens wilt exporteren naar een Azure Monitor-resource:
using Azure.Monitor.OpenTelemetry.Exporter;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using System;
var applicationInsightsConnectionString = Environment.GetEnvironmentVariable("APPLICATION_INSIGHTS_CONNECTION_STRING")
?? throw new InvalidOperationException("APPLICATION_INSIGHTS_CONNECTION_STRING is not set.");
var resourceBuilder = ResourceBuilder
.CreateDefault()
.AddService(ServiceName);
using var meterProvider = Sdk.CreateMeterProviderBuilder()
.SetResourceBuilder(resourceBuilder)
.AddSource(SourceName)
.AddMeter("*Microsoft.Agents.AI") // Agent Framework metrics
.AddAzureMonitorMetricExporter(options => options.ConnectionString = applicationInsightsConnectionString)
.Build();
Logs
Logboeken worden vastgelegd via het logboekregistratieframework dat u gebruikt, bijvoorbeeld Microsoft.Extensions.Logging. Als u logboeken wilt exporteren naar een Azure Monitor-resource, kunt u de logboekprovider configureren in de opstartcode van uw toepassing:
using Azure.Monitor.OpenTelemetry.Exporter;
using Microsoft.Extensions.Logging;
var applicationInsightsConnectionString = Environment.GetEnvironmentVariable("APPLICATION_INSIGHTS_CONNECTION_STRING")
?? throw new InvalidOperationException("APPLICATION_INSIGHTS_CONNECTION_STRING is not set.");
using var loggerFactory = LoggerFactory.Create(builder =>
{
// Add OpenTelemetry as a logging provider
builder.AddOpenTelemetry(options =>
{
options.SetResourceBuilder(resourceBuilder);
options.AddAzureMonitorLogExporter(options => options.ConnectionString = applicationInsightsConnectionString);
// Format log messages. This is default to false.
options.IncludeFormattedMessage = true;
options.IncludeScopes = true;
})
.SetMinimumLevel(LogLevel.Debug);
});
// Create a logger instance for your application
var logger = loggerFactory.CreateLogger<Program>();
Ambidashboard
Overweeg om het Aspire Dashboard te gebruiken als een snelle manier om uw traceringen en metrische gegevens tijdens de ontwikkeling te visualiseren. Zie de documentatie van Het Dashboard van Aspire voor meer informatie. Het Aspire Dashboard ontvangt gegevens via een OpenTelemetry Collector, die u als volgt kunt toevoegen aan uw tracerprovider:
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetResourceBuilder(resourceBuilder)
.AddSource(SourceName)
.AddSource("*Microsoft.Extensions.AI") // Listen to the Experimental.Microsoft.Extensions.AI source for chat client telemetry.
.AddSource("*Microsoft.Extensions.Agents*") // Listen to the Experimental.Microsoft.Extensions.Agents source for agent telemetry.
.AddOtlpExporter(options => options.Endpoint = new Uri("http://localhost:4317"))
.Build();
Aan de slag
Bekijk een volledig voorbeeld van een agent waarvoor OpenTelemetry is ingeschakeld in de agentframeworkopslagplaats.
Afhankelijkheden
Meegeleverde pakketten
Als u waarneembaarheid in uw Python-toepassing wilt inschakelen, worden de volgende OpenTelemetry-pakketten standaard geïnstalleerd:
Exporteurs
We installeren geen exporteurs standaard om onnodige afhankelijkheden en potentiële problemen met automatische instrumentatie te voorkomen. Er is een grote verscheidenheid aan exporteurs beschikbaar voor verschillende back-ends, zodat u de exporteurs kunt kiezen die het beste bij uw behoeften passen.
Sommige algemene exporteurs die u mogelijk wilt installeren op basis van uw behoeften:
- Voor gRPC-protocolondersteuning: installeren
opentelemetry-exporter-otlp-proto-grpc - Voor http-protocolondersteuning: installeren
opentelemetry-exporter-otlp-proto-http - Voor Azure Application Insights: installeren
azure-monitor-opentelemetry
Gebruik het OpenTelemetry Registry om meer exporteurs en instrumentatiepakketten te vinden.
Waarneembaarheid inschakelen (Python)
Vijf patronen voor het configureren van waarneembaarheid
We hebben verschillende manieren geïdentificeerd om waarneembaarheid in uw toepassing te configureren, afhankelijk van uw behoeften:
1. Standaard Omgevingsvariabelen van OpenTelemetry (aanbevolen)
De eenvoudigste aanpak: configureer alles via omgevingsvariabelen:
from agent_framework.observability import configure_otel_providers
# Reads OTEL_EXPORTER_OTLP_* environment variables automatically
configure_otel_providers()
Of als u alleen consoleexporteurs wilt:
from agent_framework.observability import configure_otel_providers
configure_otel_providers(enable_console_exporters=True)
2. Aangepaste exporteurs
Voor meer controle over de exporteurs, maak ze zelf en geef ze door aan configure_otel_providers():
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
from agent_framework.observability import configure_otel_providers
# Create custom exporters with specific configuration
exporters = [
OTLPSpanExporter(endpoint="http://localhost:4317", compression=Compression.Gzip),
OTLPLogExporter(endpoint="http://localhost:4317"),
OTLPMetricExporter(endpoint="http://localhost:4317"),
]
# These will be added alongside any exporters from environment variables
configure_otel_providers(exporters=exporters, enable_sensitive_data=True)
3. Installatie van derden
Veel OpenTelemetry-pakketten van derden hebben hun eigen installatiemethoden. U kunt deze methoden eerst gebruiken en vervolgens aanroepen enable_instrumentation() om agent framework-instrumentatiecodepaden te activeren:
from azure.monitor.opentelemetry import configure_azure_monitor
from agent_framework.observability import create_resource, enable_instrumentation
# Configure Azure Monitor first
configure_azure_monitor(
connection_string="InstrumentationKey=...",
resource=create_resource(), # Uses OTEL_SERVICE_NAME, etc.
enable_live_metrics=True,
)
# Then activate Agent Framework's telemetry code paths
# This is optional if ENABLE_INSTRUMENTATION and/or ENABLE_SENSITIVE_DATA are set in env vars
enable_instrumentation(enable_sensitive_data=False)
Voor Langfuse:
from agent_framework.observability import enable_instrumentation
from langfuse import get_client
langfuse = get_client()
# Verify connection
if langfuse.auth_check():
print("Langfuse client is authenticated and ready!")
# Then activate Agent Framework's telemetry code paths
enable_instrumentation(enable_sensitive_data=False)
4. Handmatige installatie
Voor volledige controle kunt u handmatig exporteurs, providers en instrumentatie instellen. Gebruik de helperfunctie create_resource() om een resource te maken met de juiste servicenaam en -versie. Zie de Documentatie voor OpenTelemetry Python voor gedetailleerde richtlijnen over handmatige instrumentatie.
5. Automatische instrumentatie (nulcode)
Gebruik het hulpprogramma OpenTelemetry CLI om uw toepassing automatisch te instrumenteren zonder codewijzigingen:
opentelemetry-instrument \
--traces_exporter console,otlp \
--metrics_exporter console \
--service_name your-service-name \
--exporter_otlp_endpoint 0.0.0.0:4317 \
python agent_framework_app.py
Zie de Python-documentatie van OpenTelemetry Zero-code voor meer informatie.
Tracers en meters gebruiken
Zodra waarneembaarheid is geconfigureerd, kunt u aangepaste spans of metrische gegevens maken:
from agent_framework.observability import get_tracer, get_meter
tracer = get_tracer()
meter = get_meter()
with tracer.start_as_current_span("my_custom_span"):
# do something
pass
counter = meter.create_counter("my_custom_counter")
counter.add(1, {"key": "value"})
Dit zijn wrappers van de OpenTelemetry-API die een tracer of meter retourneren van de globale provider, waarbij agent_framework deze standaard is ingesteld als de naam van de instrumentatiebibliotheek.
Omgevingsvariabelen
De volgende omgevingsvariabelen bepalen de waarneembaarheid van Agent Framework:
-
ENABLE_INSTRUMENTATION- De standaardwaarde isfalseingesteld omtrueOpenTelemetry-instrumentatie in te schakelen. -
ENABLE_SENSITIVE_DATA- De standaardwaarde isfalseingesteld om logboekregistratie van gevoelige gegevens in tetrueschakelen (prompts, antwoorden, argumenten voor functieoproep en resultaten). Wees voorzichtig met deze instelling, omdat gevoelige gegevens mogelijk worden weergegeven. -
ENABLE_CONSOLE_EXPORTERS- De standaardwaarde isfalseingesteld om console-uitvoer voor telemetrie in tetrueschakelen. -
VS_CODE_EXTENSION_PORT- Poort voor AI Toolkit of Integratie van Azure AI Foundry VS Code-extensie.
Opmerking
Gevoelige informatie omvat prompts, antwoorden en meer, en mag alleen worden ingeschakeld in ontwikkel- of testomgevingen. Het wordt niet aanbevolen om dit in productie in te schakelen, omdat gevoelige gegevens mogelijk worden weergegeven.
Omgevingsvariabelen van Standard OpenTelemetry
De configure_otel_providers() functie leest automatisch standaard omgevingsvariabelen van OpenTelemetry:
OTLP-configuratie (voor Aspire Dashboard, Jaeger, enzovoort):
-
OTEL_EXPORTER_OTLP_ENDPOINT- Basiseindpunt voor alle signalen (bijvoorbeeldhttp://localhost:4317) -
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT- Traceringen-specifiek eindpunt (overschrijft basis) -
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT- Metrische gegevensspecifiek eindpunt (overschrijft basis) -
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT- Logboekspecifiek eindpunt (overschrijft basis) -
OTEL_EXPORTER_OTLP_PROTOCOL- Protocol dat moet worden gebruikt (grpcofhttp, standaard):grpc) -
OTEL_EXPORTER_OTLP_HEADERS- Kopteksten voor alle signalen (bijvoorbeeldkey1=value1,key2=value2)
Serviceidentificatie:
-
OTEL_SERVICE_NAME- Servicenaam (standaard:agent_framework) -
OTEL_SERVICE_VERSION- Serviceversie (standaard: pakketversie) -
OTEL_RESOURCE_ATTRIBUTES- Aanvullende resourcekenmerken
Zie de OpenTelemetry-specificatie voor meer informatie.
Installatie van Microsoft Foundry
Microsoft Foundry biedt ingebouwde ondersteuning voor tracering met visualisatie voor uw spans.
Zorg ervoor dat uw Foundry is geconfigureerd met een Azure Monitor-exemplaar. Zie de details
Installeer het azure-monitor-opentelemetry-pakket:
pip install azure-monitor-opentelemetry
Configureer de waarneembaarheid rechtstreeks vanuit het AzureAIClientvolgende:
Voor Azure AI Foundry-projecten kunt u waarneembaarheid rechtstreeks vanuit het AzureAIClientvolgende configureren:
from agent_framework.azure import AzureAIClient
from azure.ai.projects.aio import AIProjectClient
from azure.identity.aio import AzureCliCredential
async def main():
async with (
AzureCliCredential() as credential,
AIProjectClient(endpoint="https://<your-project>.foundry.azure.com", credential=credential) as project_client,
AzureAIClient(project_client=project_client) as client,
):
# Automatically configures Azure Monitor with connection string from project
await client.configure_azure_monitor(enable_live_metrics=True)
Aanbeveling
De argumenten voor client.configure_azure_monitor() worden doorgegeven aan de onderliggende configure_azure_monitor() functie uit het azure-monitor-opentelemetry pakket, raadpleeg de documentatie voor meer informatie, we zorgen voor het instellen van de verbindingsreeks en resource.
Configureer Azure Monitor en schakel eventueel instrumentatie in:
Voor niet-Azure AI-projecten met Application Insights moet u een aangepaste agent instellen in Foundry, zie de details.
Voer vervolgens uw agent uit met dezelfde OpenTelemetry-agent-id als geregistreerd in Foundry en configureer Azure Monitor als volgt:
from azure.monitor.opentelemetry import configure_azure_monitor
from agent_framework.observability import create_resource, enable_instrumentation
configure_azure_monitor(
connection_string="InstrumentationKey=...",
resource=create_resource(),
enable_live_metrics=True,
)
# optional if you do not have ENABLE_INSTRUMENTATION in env vars
enable_instrumentation()
# Create your agent with the same OpenTelemetry agent ID as registered in Foundry
agent = ChatAgent(
chat_client=...,
name="My Agent",
instructions="You are a helpful assistant.",
id="<OpenTelemetry agent ID>"
)
# use the agent as normal
Ambidashboard
Voor lokale ontwikkeling zonder Azure-installatie kunt u het Aspire Dashboard gebruiken, dat lokaal wordt uitgevoerd via Docker en een uitstekende telemetrieweergave biedt.
Aspire Dashboard instellen met Docker
# Pull and run the Aspire Dashboard container
docker run --rm -it -d \
-p 18888:18888 \
-p 4317:18889 \
--name aspire-dashboard \
mcr.microsoft.com/dotnet/aspire-dashboard:latest
Met deze opdracht wordt het dashboard gestart met:
- Webgebruikersinterface: beschikbaar op http://localhost:18888
-
OTLP-eindpunt: beschikbaar voor
http://localhost:4317uw toepassingen voor het verzenden van telemetriegegevens
Uw toepassing configureren
Stel de volgende omgevingsvariabelen in:
ENABLE_INSTRUMENTATION=true
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
U kunt ze ook opnemen in uw .env bestand en het voorbeeld uitvoeren.
Zodra het voorbeeld is uitgevoerd, gaat u naar http://localhost:18888 een webbrowser om de telemetriegegevens te bekijken. Volg de verkenningshandleiding van Het Aspire Dashboard om u te verifiëren bij het dashboard en uw traceringen, logboeken en metrische gegevens te verkennen.
Spans en metrische gegevens
Zodra alles is ingesteld, ziet u dat spans en metrische gegevens automatisch voor u worden gemaakt, de spans zijn:
-
invoke_agent <agent_name>: Dit is het hoogste niveau voor elke aanroep van de agent, deze bevat alle andere spanten als onderliggende items. -
chat <model_name>: Deze periode wordt gemaakt wanneer de agent het onderliggende chatmodel aanroept, bevat deze de prompt en het antwoord als kenmerken, indienenable_sensitive_dataingesteld opTrue. -
execute_tool <function_name>: Deze periode wordt gemaakt wanneer de agent een functiehulpprogramma aanroept, bevat deze de functieargumenten en het resultaat als kenmerken, alsenable_sensitive_datadeze is ingesteld opTrue.
De metrische gegevens die worden gemaakt, zijn:
Voor de chatclient en
chat-bewerkingen:-
gen_ai.client.operation.duration(histogram): Met deze metrische waarde wordt de duur van elke bewerking in seconden meten. -
gen_ai.client.token.usage(histogram): Met deze metrische waarde wordt het tokengebruik meten in het aantal tokens berekend.
-
Voor functie-aanroep tijdens de
execute_toolbewerkingen:-
agent_framework.function.invocation.duration(histogram): Met deze metrische waarde wordt de duur van elke uitvoering van de functie in seconden meten.
-
Voorbeeld van traceringsuitvoer
Wanneer u een agent uitvoert waarvoor waarneembaarheid is ingeschakeld, ziet u traceringsgegevens die vergelijkbaar zijn met de volgende console-uitvoer:
{
"name": "invoke_agent Joker",
"context": {
"trace_id": "0xf2258b51421fe9cf4c0bd428c87b1ae4",
"span_id": "0x2cad6fc139dcf01d",
"trace_state": "[]"
},
"kind": "SpanKind.CLIENT",
"parent_id": null,
"start_time": "2025-09-25T11:00:48.663688Z",
"end_time": "2025-09-25T11:00:57.271389Z",
"status": {
"status_code": "UNSET"
},
"attributes": {
"gen_ai.operation.name": "invoke_agent",
"gen_ai.system": "openai",
"gen_ai.agent.id": "Joker",
"gen_ai.agent.name": "Joker",
"gen_ai.request.instructions": "You are good at telling jokes.",
"gen_ai.response.id": "chatcmpl-CH6fgKwMRGDtGNO3H88gA3AG2o7c5",
"gen_ai.usage.input_tokens": 26,
"gen_ai.usage.output_tokens": 29
}
}
Deze tracering toont:
- Tracerings- en span-id's: voor het correleren van gerelateerde bewerkingen
- Tijdsinstellingen: Wanneer de bewerking is gestart en beëindigd
- Metagegevens van agent: agent-id, naam en instructies
- Modelinformatie: Het AI-systeem dat wordt gebruikt (OpenAI) en de antwoord-id
- Tokengebruik: het aantal invoer- en uitvoertoken voor het bijhouden van kosten
Samples
Er zijn een aantal voorbeelden in de microsoft/agent-framework opslagplaats die deze mogelijkheden demonstreren. Zie de map waarneembaarheidsvoorbeelden voor meer informatie. Deze map bevat ook voorbeelden voor het gebruik van telemetrie met nulcode.