Agent-Observabilität

Von Bedeutung

Um die Observierbarkeit in Agent 365 zu ermöglichen, verwenden Sie die Microsoft OpenTelemetry Distro. Diese Verteilung bietet ein einzelnes Observability-SDK innerhalb von Microsoft, das Agent 365, Microsoft Foundry, Azure Monitor und weitere Dienste unterstützt. Der in diesem Artikel beschriebene bestehende Ansatz funktioniert weiterhin, ohne Änderungen zu unterbrechen. Anleitungen zur Migration nach Sprache finden Sie in den folgenden Leitfäden:

Note

Observability ist eine der inkrementellen Fähigkeitsstufen in der Entwicklung von Agent 365 und gilt für alle Agenttypen.

Um am Agent-365-Ökosystem teilzunehmen, fügen Sie Ihrem Agenten Agent 365 Observability-Funktionen hinzu. Agent 365 Observability baut auf OpenTelemetry (OTel) auf und bietet ein einheitliches Rahmenwerk, um Telemetrie konsistent und sicher über alle Agentenplattformen hinweg zu erfassen. Durch die Implementierung dieser erforderlichen Komponente ermöglichen Sie IT-Administratoren, die Aktivitäten Ihres Agenten im Microsoft Admin Center zu überwachen und Sicherheitsteams die Nutzung von Defender und Purview für Compliance und Bedrohungserkennung zu ermöglichen.

Die wichtigsten Vorteile

  • End-to-End-Sichtbarkeit: Erfassen Sie umfassende Telemetrie für jede Agentenaufrufe, einschließlich Sitzungen, Tool-Calls und Ausnahmen, sodass Sie plattformübergreifend vollständig nachverfolgt werden.
  • Sicherheits- und Compliance-Unterstützung: Geben Sie einheitliche Audit-Logs in Defender und Purview ein, wodurch fortgeschrittene Sicherheitsszenarien und Compliance-Berichte für Ihren Agenten ermöglicht werden.
  • Plattformübergreifende Flexibilität: Bauen Sie auf OTel-Standards auf und unterstützen Sie verschiedene Laufzeiten und Plattformen wie Copilot Studio, Foundry und zukünftige Agent-Frameworks.
  • Betriebliche Effizienz für Administratoren: Bieten Sie zentrale Observierbarkeit im Microsoft 365 Admin Center, reduzieren Sie die Zeit für Fehlersuche und verbessern Sie die Governance mit rollenbasierten Zugriffskontrollen für IT-Teams, die Ihren Agenten verwalten.

Unterstützte Agents

Die folgenden Agenttypen unterstützen die Beobachtbarkeit von Agent 365:

Installation

Verwenden Sie diese Befehle, um die Observability-Module für die von Agent 365 unterstützten Sprachen zu installieren.

Installieren Sie die Kern-, Überwachbarkeits- und Laufzeitpakete. Alle Agents, die Agent 365 Observability verwenden, benötigen diese Pakete.

pip install microsoft-agents-a365-observability-core
pip install microsoft-agents-a365-runtime

Wenn Ihr Agent das Hostingpaket Microsoft Agents Hosting verwendet, installieren Sie das Hostingintegrationspaket. Es stellt Middleware bereit, die automatisch „Baggage“ und „Scopes“ aus dem TurnContext befüllt, und umfasst Token-Zwischenspeichern für den Einblicks-Exporteurs.

pip install microsoft-agents-a365-observability-hosting

Wenn Ihr Agent eines der unterstützten KI-Frameworks verwendet, installieren Sie die entsprechende Erweiterung für die automatische Instrumentierung, um Telemetrie automatisch ohne manuellen Instrumentierungscode zu erfassen. Konfigurationsdetails finden Sie unter "Automatische Instrumentierung".

# For Semantic Kernel
pip install microsoft-agents-a365-observability-extensions-semantic-kernel

# For OpenAI Agents SDK
pip install microsoft-agents-a365-observability-extensions-openai

# For Microsoft Agent Framework
pip install microsoft-agents-a365-observability-extensions-agent-framework

# For LangChain
pip install microsoft-agents-a365-observability-extensions-langchain

Konfiguration

Verwenden Sie die folgenden Einstellungen, um die Agent 365 Observability für Ihren Agenten zu aktivieren und anzupassen.

Setze die ENABLE_A365_OBSERVABILITY_EXPORTER Umgebungsvariable auf true für Beobachtbarkeit. Diese Einstellung exportiert Protokolle in den Dienst und setzt voraus, dass token_resolver bereitgestellt wird. Ansonsten wird der Konsolen-Exporter verwendet.

from microsoft_agents_a365.observability.core import configure

def token_resolver(agent_id: str, tenant_id: str) -> str | None:
    # Implement secure token retrieval here
    return "Bearer <token>"

configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    token_resolver=token_resolver,
)

Die Tokenlöserfunktion ist von der Protokollierung in der Konsole ausgeschlossen.

Sie können das Exporteurverhalten anpassen, indem Sie eine Agent365ExporterOptions-Instanz an exporter_options weitergeben. Wenn exporter_options bereitgestellt wird, hat es Vorrang vor den Parametern token_resolver und cluster_category.

from microsoft_agents_a365.observability.core import configure, Agent365ExporterOptions

configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    exporter_options=Agent365ExporterOptions(
        cluster_category="prod",
        token_resolver=token_resolver,
    ),
    suppress_invoke_agent_input=True,
)

In der folgenden Tabelle werden die optionalen Parameter für configure() beschrieben.

Parameter Description Vorgabe
logger_name Der Name des Python Loggers, der für das Debuggen und die Konsolenprotokollausgabe verwendet wird. microsoft_agents_a365.observability.core
exporter_options Eine Agent365ExporterOptions Instanz, die die Tokenlöser- und Clusterkategorie zusammen konfiguriert. None
suppress_invoke_agent_input Wenn True, werden Eingabemeldungen auf InvokeAgent-Spannen unterdrückt. False

Die folgende Tabelle beschreibt die optionalen Eigenschaften für Agent365ExporterOptions.

Eigentum Description Vorgabe
use_s2s_endpoint Wenn True, verwendet den Dienst-zu-Dienst-Endpunktpfad. False
max_queue_size Maximale Warteschlangengröße für den Batchprozessor. 2048
scheduled_delay_ms Verzögerung in Millisekunden zwischen Exportbatches. 5000
exporter_timeout_ms Timeout in Millisekunden für den Exportvorgang. 30000
max_export_batch_size Maximale Batchgröße für Exportvorgänge. 512

Gepäckattribute

Verwenden Sie BaggageBuilder, um Kontextinformationen festzulegen, die über alle Spannen in einer Anforderung fließen. Das SDK implementiert einen SpanProcessor, der alle nicht leeren Baggage-Einträge in neu gestartete Abschnitte kopiert, ohne vorhandene Attribute zu überschreiben.

from microsoft_agents_a365.observability.core import BaggageBuilder

with (
    BaggageBuilder()
    .tenant_id("tenant-123")
    .agent_id("agent-456")
    .conversation_id("conv-789")
    .build()
):
    # Any spans started in this context will receive these as attributes
    pass

Verwenden Sie das BaggageBuilder-Hilfsprogramm im TurnContext-Paket, um das populate aus dem microsoft-agents-a365-observability-hosting automatisch auszufüllen. Dieses Tool extrahiert automatisch Anrufer-, Agenten-, Mandanten-, Kommunikationskanal- und Unterhaltungsdetails aus der Aktivität.

from microsoft_agents.hosting.core.turn_context import TurnContext
from microsoft_agents_a365.observability.core import BaggageBuilder
from microsoft_agents_a365.observability.hosting.scope_helpers.populate_baggage import populate

builder = BaggageBuilder()
populate(builder, turn_context)

with builder.build():
    # Baggage is auto-populated from the TurnContext activity
    pass

Gepäck-Middleware

Wenn Ihr Agent das Hosting-Integrationspaket verwendet, registrieren Sie Gepäck-Middleware, um Gepäck für jede eingehende Anfrage automatisch aufzufüllen. Dieser Schritt entfernt die Notwendigkeit, manuell in jedem Aktivitätshandler aufzurufen BaggageBuilder .

Registrieren Sie BaggageMiddleware auf dem Adapter-Middleware-Set. Es extrahiert automatisch Angaben zu Anrufer, Mitarbeiter, Mandant, Kanal und Gespräch aus jedem eingehenden TurnContext und bündelt die Anfrage in einem Baggage-Scope.

from microsoft_agents_a365.observability.hosting import BaggageMiddleware

adapter.use(BaggageMiddleware())

Alternativ können Sie mit ObservabilityHostingManager Baggage Middleware zusammen mit anderen Hosting-Features konfigurieren.

from microsoft_agents_a365.observability.hosting import ObservabilityHostingManager, ObservabilityHostingOptions

options = ObservabilityHostingOptions(enable_baggage=True)
ObservabilityHostingManager.configure(adapter.middleware_set, options)

Die Middleware überspringt die Einrichtung von Baggage bei asynchronen Antworten (ContinueConversation-Ereignissen), um zu vermeiden, dass Baggage überschrieben wird, das bereits von der ursprünglichen Anfrage gesetzt wurde.

Tokenlöser

Wenn Sie den Agent 365-Exporter verwenden, müssen Sie eine Tokenlöserfunktion bereitstellen, die ein Authentifizierungstoken zurückgibt. Wenn Sie das Agent 365 Einblicks-SDK mit dem Agent Hosting Framework verwenden, können Sie Token mithilfe der TurnContext Agent-Aktivitäten generieren.

Der folgende Codeausschnitt zeigt, wie ein Token mithilfe des microsoft_agents.hosting.core SDK generiert wird. Das hier generierte Authentifizierungstoken wird verwendet, um die Abschnitte in den A365-Erfassungsdienst zu exportieren. Agents können ein Token selbst generieren, z. B. mithilfe der Microsoft-Authentifizierungsbibliothek (MSAL), aber sie müssen sicherstellen, dass das Token über den Observability-Bereich verfügt.

from microsoft_agents.activity import load_configuration_from_env
from microsoft_agents.authentication.msal import MsalConnectionManager
from microsoft_agents.hosting.aiohttp import CloudAdapter
from microsoft_agents.hosting.core import (
    AgentApplication,
    Authorization,
    MemoryStorage,
    TurnContext,
    TurnState,
)
from microsoft_agents_a365.runtime import (
    get_observability_authentication_scope,
)

agents_sdk_config = load_configuration_from_env(environ)

STORAGE = MemoryStorage()
CONNECTION_MANAGER = MsalConnectionManager(**agents_sdk_config)
ADAPTER = CloudAdapter(connection_manager=CONNECTION_MANAGER)
ADAPTER.use(TranscriptLoggerMiddleware(ConsoleTranscriptLogger()))
AUTHORIZATION = Authorization(STORAGE, CONNECTION_MANAGER, **agents_sdk_config)

AGENT_APP = AgentApplication[TurnState](
    storage=STORAGE, adapter=ADAPTER, authorization=AUTHORIZATION, **agents_sdk_config
)

@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
    aau_auth_token = await AGENT_APP.auth.exchange_token(
                        context,
                        scopes=get_observability_authentication_scope(),
                        auth_handler_id="AGENTIC",
                    )
    # cache this auth token and return via token resolver

Verwenden Sie bei einem Agenten, der mit dem A365 CLI erstellt wurde und der einen KI-basierten Teamkollegen sowie das Paket AgenticTokenCache verwendet, um die Token-Caching automatisch zu handhaben. Registrieren Sie das Token einmal pro Agent und Mandant während eines Aktivitätshandlers und übergeben Sie cache.get_observability_token als token_resolver in Ihrer Einblickskonfiguration.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.hosting.token_cache_helpers import (
    AgenticTokenCache,
    AgenticTokenStruct,
)
from microsoft_agents_a365.runtime import get_observability_authentication_scope

# Create a shared cache instance
token_cache = AgenticTokenCache()

# Use the cache as your token resolver in configure()
configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    token_resolver=token_cache.get_observability_token,
)

@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
    token_cache.register_observability(
        agent_id="agent-456",
        tenant_id="tenant-123",
        token_generator=AgenticTokenStruct(
            authorization=AGENT_APP.auth,
            turn_context=context,
        ),
        observability_scopes=get_observability_authentication_scope(),
    )

Automatische Instrumentierung

Die automatische Instrumentierung lauscht automatisch auf in agentenbasierten Frameworks (SDKs) nach vorhandenen Telemetriesignalen für Ablaufverfolgungen und leitet sie an den Agent 365-Einblicksdienst weiter. Diese Funktion beseitigt die Notwendigkeit für Entwickler, Überwachungscode manuell zu schreiben, vereinfacht die Einrichtung und gewährleistet eine konsistente Leistungsverfolgung.

Mehrere SDKs und Plattformen unterstützen Autoinstrumentierung:

Plattform Unterstützte SDKs / Frameworks
.NET Semantischer Kernel, OpenAI, Agent Framework
Python Semantischer Kernel, OpenAI, Agent Framework, LangChain
Node.js OpenAI,LangChain

Note

Die Unterstützung für die automatische Instrumentierung variiert je nach Plattform und SDK-Implementierung.

Semantischer Kern

Die automatische Instrumentierung erfordert die Verwendung des BaggageBuilders. Setzen Sie die Agenten-ID und die Mieter-ID mit BaggageBuilder.

Installiere das Paket.

pip install microsoft-agents-a365-observability-extensions-semantic-kernel

Konfigurieren der Beobachtbarkeit

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.semantickernel.trace_instrumentor import SemanticKernelInstrumentor

# Configure observability
configure(
    service_name="my-semantic-kernel-agent",
    service_namespace="ai.agents"
)

# Enable auto-instrumentation
instrumentor = SemanticKernelInstrumentor()
instrumentor.instrument()

# Your Semantic Kernel code is now automatically traced

OpenAI

Die automatische Instrumentierung erfordert die Verwendung des BaggageBuilders. Setzen Sie die Agenten-ID und die Mieter-ID mit BaggageBuilder.

Installiere das Paket.

pip install microsoft-agents-a365-observability-extensions-openai

Konfigurieren der Beobachtbarkeit

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.openai import OpenAIAgentsTraceInstrumentor

# Configure observability
configure(
    service_name="my-openai-agent",
    service_namespace="ai.agents"
)

# Enable auto-instrumentation
instrumentor = OpenAIAgentsTraceInstrumentor()
instrumentor.instrument()

# Your OpenAI Agents code is now automatically traced

Agenten-Framework

Die automatische Instrumentierung erfordert die Verwendung des BaggageBuilders. Setzen Sie die Agenten-ID und die Mieter-ID mit BaggageBuilder.

Installiere das Paket.

pip install microsoft-agents-a365-observability-extensions-agent-framework

Konfigurieren der Beobachtbarkeit

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.agentframework import (
    AgentFrameworkInstrumentor,
)

# Configure observability
configure(
    service_name="AgentFrameworkTracingWithAzureOpenAI",
    service_namespace="AgentFrameworkTesting",
)

# Enable auto-instrumentation
AgentFrameworkInstrumentor().instrument()

LangChain-Framework

Die automatische Instrumentierung erfordert die Verwendung von BaggageBuilder. Setzen Sie die Agenten-ID und die Mieter-ID mit BaggageBuilder.

Installiere das Paket.

pip install microsoft-agents-a365-observability-extensions-langchain

Konfigurieren der Beobachtbarkeit

from microsoft_agents_a365.observability.core.config import configure
from microsoft_agents_a365.observability.extensions.langchain import CustomLangChainInstrumentor

# Configure observability
configure(
    service_name="my-langchain-agent",
    service_namespace="ai.agents"
)

# Enable auto-instrumentation
CustomLangChainInstrumentor()

# Your LangChain code is now automatically traced

Manuelle Instrumentierung

Verwenden Sie das Agent 365 Observability SDK, um die interne Funktionsweise des Agenten zu verstehen. Das SDK bietet Bereiche, die Sie starten können: InvokeAgentScope, , ExecuteToolScope, InferenceScope, und OutputScope.

Agent-Aufruf

Nutzen Sie diesen Umfang zu Beginn Ihres Maklerprozesses. Durch die Nutzung des Aufruf-Agenten-Umfangs können Sie Eigenschaften wie den aktuell aufgerufenen Agenten, Agentenbenutzerdaten und mehr erfassen.

from microsoft_agents_a365.observability.core import (
    InvokeAgentScope,
    InvokeAgentScopeDetails,
    AgentDetails,
    CallerDetails,
    UserDetails,
    Channel,
    Request,
    ServiceEndpoint,
)

agent_details = AgentDetails(
    agent_id="agent-456",
    agent_name="My Agent",
    agent_description="An AI agent powered by Azure OpenAI",
    agentic_user_id="auid-123",
    agentic_user_email="agent@contoso.com",
    agent_blueprint_id="blueprint-789",
    tenant_id="tenant-123",
)

scope_details = InvokeAgentScopeDetails(
    endpoint=ServiceEndpoint(hostname="myagent.contoso.com", port=443),
)

request = Request(
    content="User asks a question",
    session_id="session-42",
    conversation_id="conv-xyz",
    channel=Channel(name="msteams"),
)

caller_details = CallerDetails(
    user_details=UserDetails(
        user_id="user-123",
        user_email="jane.doe@contoso.com",
        user_name="Jane Doe",
    ),
)

with InvokeAgentScope.start(request, scope_details, agent_details, caller_details):
    # Perform agent invocation logic
    response = call_agent(...)

Werkzeugausführung

Die folgenden Beispiele zeigen, wie Sie die Einblicksverfolgung bei der Toolausführung Ihres Agents implementieren können. Dieses Tracking erfasst Telemetrie zu Überwachungs- und Auditzwecken.

from microsoft_agents_a365.observability.core import (
    ExecuteToolScope,
    ToolCallDetails,
    Request,
    ServiceEndpoint,
)

# Use the same agent_details and request instances from the InvokeAgentScope example above

tool_details = ToolCallDetails(
    tool_name="summarize",
    tool_type="function",
    tool_call_id="tc-001",
    arguments="{'text': '...'}",
    description="Summarize provided text",
    endpoint=ServiceEndpoint(hostname="tools.contoso.com", port=8080),
)

with ExecuteToolScope.start(request, tool_details, agent_details) as scope:
    result = run_tool(tool_details)
    scope.record_response(result)

Schlussfolgerung

Die folgenden Beispiele zeigen, wie Sie KI-Modellinferenzaufrufe mit Beobachtungsverfolgung zur Erfassung der Tokennutzung, Modelldetails und Antwortmetadaten instrumentieren.

from microsoft_agents_a365.observability.core import (
    InferenceScope,
    InferenceCallDetails,
    InferenceOperationType,
)

# Use the same agent_details and request instances from the InvokeAgentScope example above

inference_details = InferenceCallDetails(
    operationName=InferenceOperationType.CHAT,
    model="gpt-4o-mini",
    providerName="azure-openai",
    inputTokens=123,
    outputTokens=456,
    finishReasons=["stop"],
)

with InferenceScope.start(request, inference_details, agent_details) as scope:
    completion = call_llm(...)
    scope.record_output_messages([completion.text])
    scope.record_input_tokens(completion.usage.input_tokens)
    scope.record_output_tokens(completion.usage.output_tokens)

Ausgabe

Verwenden Sie diesen Bereich für asynchrone Szenarien, in denen InvokeAgentScope, ExecuteToolScope oder InferenceScope Ausgabedaten nicht synchron erfassen können. Starten Sie OutputScope als untergeordneten Bereich, um die endgültigen Ausgabemeldungen aufzuzeichnen, nachdem der übergeordnete Bereich beendet ist.

from microsoft_agents_a365.observability.core import (
    OutputScope,
    Response,
    SpanDetails,
)

# Use the same agent_details and request instances from the InvokeAgentScope example above

# Get the parent context from the originating scope
parent_context = invoke_scope.get_context()

response = Response(messages=["Here is your organized inbox with 15 urgent emails."])

with OutputScope.start(
    request,
    response,
    agent_details,
    span_details=SpanDetails(parent_context=parent_context),
):
    # Output messages are recorded automatically from the response
    pass

Lokal validieren

Um zu überprüfen, ob Sie erfolgreich in das Observability SDK integriert sind, überprüfen Sie die Konsolenprotokolle, die von Ihrem Agent generiert wurden, und Protokolle aus dem Observability SDK.

Legen Sie die Umgebungsvariable ENABLE_A365_OBSERVABILITY_EXPORTER auf false fest. Diese Einstellung exportiert Bereiche (Ablaufverfolgungen) in die Konsole.

Um Fehler beim Exportieren zu untersuchen, aktivieren Sie die ausführliche Protokollierung, indem Sie ENABLE_A365_OBSERVABILITY_EXPORTER auf true setzen und die Debug-Protokollierung beim Start Ihrer Anwendung konfigurieren:

import logging

logging.basicConfig(level=logging.DEBUG)
logging.getLogger("microsoft_agents_a365.observability.core").setLevel(logging.DEBUG)

# Or target only the exporter:
logging.getLogger(
    "microsoft_agents_a365.observability.core.exporters.agent365_exporter"
).setLevel(logging.DEBUG)

Schlüsselprotokollmeldungen:

DEBUG  Token resolved for agent {agentId} tenant {tenantId}
DEBUG  Exporting {n} spans to {url}
DEBUG  HTTP 200 - correlation ID: abc-123
ERROR  Token resolution failed: {error}
ERROR  HTTP 401 exporting spans - correlation ID: abc-123
INFO   No spans with tenant/agent identity found; nothing exported.

Anzeigen exportierter Protokolle

Um die Agent-Telemetrie in Microsoft Purview oder Microsoft Defender anzuzeigen, stellen Sie sicher, dass die folgenden Anforderungen erfüllt sind:

Für die Veröffentlichung im Store validieren

Von Bedeutung

Für eine erfolgreiche Shop-Validierung muss Ihr Agent die InvokeAgentScope, InferenceScope und ExecuteToolScope Bereiche implementieren. Diese drei Bereiche sind für die Veröffentlichung erforderlich.

Verwenden Sie vor der Veröffentlichung Konsolenprotokolle, um Ihre Observability-Integration für den Agenten zu überprüfen, indem Sie die erforderlichen invoke agent, execute tool, inference und output Scopes implementieren. Vergleichen Sie dann die Logs Ihres Agenten mit den folgenden Attributlisten, um sicherzustellen, dass alle erforderlichen Attribute vorhanden sind. Erfassen Sie Attribute in jedem Scope oder über den Baggage-Builder und fügen Sie nach Belieben optionale Attribute hinzu.

Für weitere Informationen zu den Anforderungen an die Veröffentlichung im Store siehe die Store-Validierungsrichtlinien.

InvokeAgentScope-Attribute

Die folgende Liste fasst die erforderlichen und optionalen Telemetrieattribute zusammen, die beim Starten eines InvokeAgentScope aufgezeichnet werden.

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "microsoft.a365.caller.agent.blueprint.id": "Optional",
        "microsoft.a365.caller.agent.id": "Optional",
        "microsoft.a365.caller.agent.name": "Optional",
        "microsoft.a365.caller.agent.platform.id": "Optional",
        "microsoft.a365.caller.agent.user.email": "Optional",
        "microsoft.a365.caller.agent.user.id": "Optional",
        "microsoft.a365.caller.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.input.messages": "Required",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "server.address": "Required",
        "server.port": "Required",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

ExecuteToolScope-Attribute

Die folgende Liste fasst die erforderlichen und optionalen Telemetrieattribute zusammen, die beim Starten eines ExecuteToolScope aufgezeichnet werden.

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.operation.name": "Required",
        "gen_ai.tool.call.arguments": "Required",
        "gen_ai.tool.call.id": "Required",
        "gen_ai.tool.call.result": "Required",
        "gen_ai.tool.description": "Optional",
        "gen_ai.tool.name": "Required",
        "gen_ai.tool.type": "Required",
        "server.address": "Optional",
        "server.port": "Optional",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

InferenceScope-Attribute

Die folgende Liste fasst die erforderlichen und optionalen Telemetrieattribute zusammen, die beim Starten eines InferenceScope aufgezeichnet werden.

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.a365.agent.thought.process": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.input.messages": "Required",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "gen_ai.provider.name": "Required",
        "gen_ai.request.model": "Required",
        "gen_ai.response.finish_reasons": "Optional",
        "gen_ai.usage.input_tokens": "Optional",
        "gen_ai.usage.output_tokens": "Optional",
        "server.address": "Optional",
        "server.port": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.session.id": "Optional",
        "microsoft.tenant.id": "Required"
    }

OutputScope-Attribute

Die folgende Liste fasst die erforderlichen und optionalen Telemetrieattribute zusammen, die beim Starten eines OutputScope aufgezeichnet werden. Verwenden Sie diesen Bereich für asynchrone Szenarien, in denen der übergeordnete Bereich ausgabedaten nicht synchron erfassen kann.

"attributes": {
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

Testen Sie Ihren Agenten mit Observierbarkeit

Nachdem Sie die Observierbarkeit in Ihrem Agent implementiert haben, testen Sie ihn, um sicherzustellen, dass die Telemetrie ordnungsgemäß erfasst wird. Folgen Sie dem Testleitfaden, um Ihre Umgebung einzurichten. Konzentrieren Sie sich dann in erster Linie auf den Abschnitt " Observability-Protokolle anzeigen ", um zu überprüfen, ob die Observability-Implementierung erwartungsgemäß funktioniert.

Überprüfung:

  • Navigieren Sie zu https://admin.cloud.microsoft/#/agents/all
  • Wählen Sie die >-Aktivität Ihres Agents aus
  • Sie sehen Sitzungen und Toolaufrufe.

Problembehandlung

Dieser Abschnitt beschreibt häufige Probleme bei der Implementierung und Anwendung von Observability.

Tipp

Der Agent 365 Troubleshooting Guide enthält übergeordnete Empfehlungen zur Fehlerbehebung, Best Practices und Links zu Inhalten zur Fehlerbehebung für jeden Teil des Entwicklungszyklus von Agent 365.

Observabilitätsdaten erscheinen nicht

Symptome:

  • Agent wird ausgeführt
  • Keine Telemetrie im Verwaltungszentrum
  • Kann keine Agentenaktivität sehen

Grundursache:

  • Observabilität ist nicht aktiviert
  • Konfigurationsfehler
  • Probleme des Token-Resolvers

Lösungen: Probieren Sie die folgenden Schritte aus, um das Problem zu lösen:

  • Überprüfen, ob der Observability-Exporter aktiviert ist

    Sie müssen den Agent 365-Exporter explizit aktivieren. Wenn diese Option deaktiviert ist, greift das SDK auf einen Konsolenexporteur zurück, und es werden keine Telemetriedaten an den Dienst gesendet. Konfigurationsdetails finden Sie unter "Konfiguration".

  • Überprüfen Sie die Token-Resolver-Konfiguration

    Der Exporter erfordert einen gültigen Tokenlöser, der ein Bearertoken für jede Exportanforderung zurückgibt. Wenn der Tokenlöser fehlt oder zurückgibt null, wird der Export im Hintergrund übersprungen. Stelle sicher, dass dein Code den Token-Resolver korrekt implementiert. Ausführliche Informationen finden Sie unter Token resolver.

  • Überprüfen Sie auf Fehler in den Logs

    Aktivieren Sie die ausführliche Protokollierung und verwenden Sie den az webapp log tail-Befehl, um die Protokolle nach Fehlern im Zusammenhang mit dem Einblick zu durchsuchen. Ausführliche Informationen zum Aktivieren der Protokollierung pro Plattform finden Sie unter "Lokal überprüfen".

    # Look for observability-related errors
    az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
    
  • Telemetrie-Export überprüfen

    Bestätigen Sie, dass Telemetrie wie erwartet generiert und exportiert wird.

    • Fügen Sie einen Konsolenexporteur hinzu, und überprüfen Sie, ob Telemetrie lokal generiert wird. Ausführliche Informationen zur Verwendung des Konsolenexporteurs und zur Überprüfung der Ausgabe finden Sie unter "Lokal überprüfen".

Fehlende Mandanten-ID oder Agent-ID – übersprungen

Symptome: Das System löscht die Spans unbemerkt und exportiert sie nie. Einige SDKs protokollieren die Anzahl der übersprungenen Spans oder geben eine Meldung wie „Keine Spans mit Mandanten-/Agenten-Identität gefunden“ aus. Andere verwerfen sie, ohne dies zu protokollieren.

Auflösung:

  • Vor dem Export unterteilt das SDK die Spannen nach Mandanten und Agentenidentität. Das System verwirft Spans, denen entweder die Mandanten-ID oder die Agenten-ID fehlt, und sendet sie niemals an den Dienst.
  • Stellen Sie sicher, dass BaggageBuilder mit der Mandanten-ID und der Agenten-ID konfiguriert ist, bevor Sie Spans erstellen. Diese Werte werden über den OpenTelemetry-Kontext verteilt und an alle Spans angefügt, die innerhalb des Baggage-Bereichs erstellt werden. Informationen zur plattformspezifischen API finden Sie unter Gepäckattribute.
  • Stellen Sie sicher, dass die Aktivität TurnContext einen gültigen Empfänger mit Agenten-ID enthält, wenn Sie die Baggage-Middleware verwenden oder den Kontext-Helper aus dem Hosting-Integrationspaket nutzen, um diese IDs zu füllen.

Fehler bei der Token-Auflösung – Export übersprungen oder nicht autorisiert

Symptome: Der Tokenlöser gibt null zurück oder wirft einen Fehler. Je nach SDK wird der Export entweder vollständig übersprungen, oder die Anforderung wird ohne Autorisierungsheader gesendet und schlägt mit HTTP 401 fehl.

Auflösung:

  • Der Tokenlöser ist bei der Initialisierung erforderlich. Wenn er fehlt, löst der Exporter beim Start einen Fehler aus. Stellen Sie sicher, dass ein Tokenlöser bereitgestellt wird, und gibt ein gültiges Bearertoken zurück.
  • Stellen Sie sicher, dass die richtige Mandanten-ID und Agent-ID für BaggageBuilder verwendet werden, da diese Werte an den Token Resolver übergeben werden.
  • Überprüfen Sie für in Azure gehostete Agents, ob die verwaltete Identität über die erforderliche API-Berechtigung für den Überwachungsbereich verfügt.

HTTP 401 nicht autorisiert

Symptome: Der Export schlägt mit HTTP 401 fehl. Der Exporter wiederholt diesen Fehler nicht.

Auflösung:

  • Stellen Sie sicher, dass die Zielgruppe des Tokens mit dem Umfang des Observability-Endpunkts übereinstimmt.
  • Überprüfen Sie, ob der Tokenlöser kein delegiertes Benutzertoken, kein Token für eine falsche Zielgruppe oder ein abgelaufenes Token zurückgibt.

HTTP 403 – Unzulässig

Symptome: Der Export schlägt mit HTTP 403 fehl. Der Exporter wiederholt diesen Fehler nicht.

Ursache: Ein HTTP 403-Fehler kann unterschiedliche Ursachen haben. Überprüfen Sie die folgenden Auflösungen in der angegebenen Reihenfolge.

Auflösung:

  • Missing license – Vergewissern Sie sich, dass Ihrem Mandanten eine der folgenden Lizenzen in Microsoft 365 Admin Center:

    • Test - Microsoft 365 E7
    • Microsoft 365 E7
    • Microsoft Agent 365 Frontier
  • Fehlende Agent365.Observability.OtelWrite Berechtigung – Wenn Sie kürzlich ein Upgrade ihrer Observability-Pakete durchgeführt haben, müssen Sie diese Berechtigung erteilen. Weitere Informationen finden Sie unten in der wichtigen Notiz.

Von Bedeutung

Für vorhandene Agents, die auf diese Paketversionen aktualisiert werden, ist ein zusätzlicher Schritt erforderlich.

Dieser Schritt gilt nur, wenn Sie einen vorhandenen Agent aktualisieren. Für neue Agentinstallationen ist dieser Schritt nicht erforderlich. Wenn Sie ein Upgrade auf die folgenden Paketversionen oder neueren Versionen durchführen, müssen Sie Ihrer Identität (verwaltete Identität oder App-Registrierung) die neue Agent365.Observability.OtelWrite Berechtigung erteilen. Ohne diese Berechtigung schlägt der Telemetrieexport mit HTTP 403 fehl.

Plattform Mindestversion, die diesen Schritt erfordert
.NET 0.3-beta
Node.js 0.2.0-preview.1
Python 0.3.0

Erteilen Sie die Berechtigung mithilfe einer der folgenden Optionen.

Option A – Agent 365 CLI (erfordert a365.config.json und a365.generated.config.json in Ihrem Konfigurationsverzeichnis, einem globalen Administratorkonto und Agent 365 CLI v1.1.139-preview oder höher)

a365 setup admin --config-dir "<path-to-config-dir>"

Dieser Befehl gewährt alle fehlenden Berechtigungen, einschließlich der neuen Observability-Bereiche.

Option B – Entra-Portal (keine Konfigurationsdateien erforderlich; erfordert globalen Administratorzugriff auf die Blueprint-App-Registrierung)

  1. Wechseln Sie zu Entra-Portal>App-Registrierungen> Wählen Sie Ihre Blueprint-App aus.
  2. Wechseln Sie zu API-Berechtigungen>Eine Berechtigung hinzufügen>APIs, die meine Organisation verwendet> suchen nach 9b975845-388f-4429-889e-eab1ef63949c.
  3. Wählen Sie "Delegierte Berechtigungen> " aus, um Agent365.Observability.OtelWrite>Berechtigungen hinzuzufügen.
  4. Wiederholen Sie Schritt 2 bis 3. Dieses Mal wählen Sie "Anwendungsberechtigungen> " aus, um Agent365.Observability.OtelWrite>Berechtigungen hinzuzufügen.
  5. Klicken Sie auf " Administratorzustimmung erteilen " und bestätigen Sie.

Sowohl Agent365.Observability.OtelWrite (Delegated) als auch Agent365.Observability.OtelWrite (Anwendung) sollten den Granted Status anzeigen.

HTTP 429 / 5xx – Vorübergehende Fehler

Symptome: Der Export schlägt mit einem vorübergehenden HTTP-Statuscode wie 429 oder 5xx fehl.

Auflösung:

  • Diese Fehler sind in der Regel vorübergehend und allein behoben. Die Python- und JavaScript-SDKs führen bei den HTTP-Statuscodes 408, 429 und 5xx automatisch bis zu drei Wiederholungsversuche mit exponentiellem Backoff durch. Das .NET SDK führt keine automatischen Wiederholungen durch.
  • Wenn Fehler weiterhin bestehen, überprüfen Sie das Dienststatusdashboard.
  • Erwägen Sie, die Exporthäufigkeit zu verringern, indem Sie die geplante Verzögerung zwischen Batches erhöhen oder die maximale Exportbatchgröße erhöhen. Informationen zu Konfigurationsoptionen pro Plattform finden Sie in der Tabelle in "Agent365ExporterOptionsKonfiguration".

Export-Zeitüberschreitung

Symptome: Exportversuche laufen ab.

Auflösung:

  • Überprüfen Sie die Netzwerkkonnektivität mit dem Observability-Endpunkt.
  • Timeout-Standardeinstellungen variieren je nach Plattform. Das standardmäßige HTTP-Anforderungstimeout beträgt 30 Sekunden. Einige SDKs verfügen zudem über eine separate allgemeine Export-Zeitüberschreitung, die den gesamten Exportzyklus einschließlich der Wiederholungsversuche abdeckt. Die genauen Eigenschaften und Standardwerte pro Plattform finden Sie in der Tabelle in "Agent365ExporterOptionsKonfiguration".
  • Wenn Timeouts häufig auftreten, erhöhen Sie den relevanten Timeoutwert in den Exporteroptionen.

Der Export ist erfolgreich, die Telemetrie wird jedoch nicht in Defender oder purview angezeigt.

Symptoms: Protokolle zeigen einen erfolgreichen Export an, die Telemetrie ist jedoch in Microsoft Defender oder Microsoft Purview nicht sichtbar.

Auflösung:

  • Stellen Sie sicher, dass Sie die Voraussetzungen zum Anzeigen exportierter Protokolle erfüllen. Für Purview muss die Überwachung aktiviert sein. Für Defender müssen Sie die erweiterte Suche konfigurieren. Weitere Informationen finden Sie unter Anzeigen exportierter Protokolle.
  • Telemetriedaten können nach einem erfolgreichen Export mehrere Minuten benötigen, um angezeigt zu werden. Warten Sie, bis die Daten angezeigt werden, bevor Sie weiter untersuchen.

Weitere Informationen zum Testen der Observierbarkeit finden Sie unter: