SDK för överskådlighet

Viktigt

För att aktivera observabilitet i Agent 365, använd Microsoft OpenTelemetry Distro. Denna distribution erbjuder ett enda observabilitets-SDK över hela Microsoft, som driver Agent 365, Microsoft Foundry, Azure Monitor och med mera. Den befintliga metod som beskrivs i denna artikel fortsätter att fungera utan att introducera brytande ändringar. För migreringsvägledning per språk, se följande guider:

Kommentar

Observabilitet är en av de inkrementella kapabilitetsnivåerna i Kom igång med Agent 365-utvecklingen och gäller för alla agenttyper.

För att delta i Agent 365-ekosystemet, lägg till Agent 365-observabilitetsfunktioner i din agent. Agent 365 Observability bygger på OpenTelemetry (OTel) och erbjuder ett enhetligt ramverk för konsekvent och säker insamling av telemetri över alla agentplattformar. Genom att implementera denna nödvändiga komponent möjliggör du för IT-administratörer att övervaka din agents aktivitet i Microsoft admincenter och låta säkerhetsteam använda Defender och Purview för efterlevnad och hotdetektering.

Viktiga fördelar

  • Helhetsöversikt: Fånga omfattande telemetri för varje agentanrop, inklusive sessioner, verktygsanrop och undantag, vilket ger full spårbarhet över plattformar.
  • Säkerhets- och efterlevnadsmöjliggörande: Mata in enhetliga revisionsloggar i Defender och Purview, vilket möjliggör avancerade säkerhetsscenarier och efterlevnadsrapportering för din agent.
  • Plattformsoberoende flexibilitet: Bygg på OTel-standarder och stöd olika körtider och plattformar som Copilot Studio, Foundry och framtida agentramverk.
  • Operativ effektivitet för administratörer: Tillhandahåll centraliserad observabilitet i Administrationscenter för Microsoft 365, minska felsökningstiden och förbättra styrningen med rollbaserade åtkomstkontroller för IT-team som hanterar din agent.

Agenter som stöds

Följande agenttyper stödjer Agent 365-observabilitet:

Installation

Använd dessa kommandon för att installera observabilitetsmodulerna för de språk som stöds av Agent 365.

Installera kärnobservabilitets- och körningspaket. Alla agenter som använder Agent 365 Observability behöver dessa paket.

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

Om din agent använder Microsoft Agents Hosting-paketet, installera hosting-integrationspaketet. Den tillhandahåller mellanprogram som automatiskt fyller i bagage och omfång från TurnContext, och innehåller cachelagring av token för observerbarhetsexportören.

pip install microsoft-agents-a365-observability-hosting

Om din agent använder ett av de stödda AI-ramverken, installera det tillägg för automatisk instrumentering som hör till för att automatiskt samla in telemetri utan att behöva skriva manuell instrumenteringskod. Se Auto-instrumentation för konfigurationsdetaljer.

# 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

Använd följande inställningar för att aktivera och anpassa Agent 365 Observability för din agent.

Ställ in miljövariabeln ENABLE_A365_OBSERVABILITY_EXPORTER till true för observabilitet. Denna inställning exporterar loggar till tjänsten och kräver att en token_resolver anges. Annars används konsolexportören.

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,
)

Tokenresolvern är utesluten från loggning till konsolen.

Du kan anpassa exportörens beteende genom att skicka en Agent365ExporterOptions-instans till exporter_options. Om exporter_options anges får den företräde över token_resolver och cluster_category parametrarna.

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,
)

Följande tabell beskriver de valfria parametrarna för configure().

Parameter beskrivning Standard
logger_name Namnet på Python-loggern som används för felsökning och loggning till konsol. microsoft_agents_a365.observability.core
exporter_options En Agent365ExporterOptions-instans som konfigurerar både tokenresolvern och klusterkategorin. None
suppress_invoke_agent_input När True, undertrycks inmatningsmeddelanden på InvokeAgent spann. False

Följande tabell beskriver de valfria egenskaperna för Agent365ExporterOptions.

Egenskap beskrivning Standard
use_s2s_endpoint När True använder sökvägen till tjänst-till-tjänst-ändpunkten. False
max_queue_size Maximal köstorlek för batchprocessorn. 2048
scheduled_delay_ms Fördröjning i millisekunder mellan exportbatcher. 5000
exporter_timeout_ms Timeout i millisekunder för exportåtgärden. 30000
max_export_batch_size Maximal batchstorlek för exportåtgärder. 512

Bagageattribut

Använd BaggageBuilder för att ange kontextuell information som följer med genom alla spann i en begäran. SDK:n implementerar en SpanProcessormekanism som kopierar alla bagageposter som inte är tomma till nystartade spann utan att skriva över befintliga attribut.

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

För att automatiskt fylla i BaggageBuilder från TurnContext, använd hjälpredan populate i paketet microsoft-agents-a365-observability-hosting. Hjälparen extraherar automatiskt detaljer om uppringare, agent, tenant, kanal och konversation från aktiviteten.

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

Baggage-mellanprogramvara

Om din agent använder hosting-integreringspaketet, registrera baggage middleware för att automatiskt populera bagage för varje inkommande begäran. Detta steg eliminerar behovet av att kalla på BaggageBuilder manuellt i varje aktivitetsbehandlare.

Registrera BaggageMiddleware på adaptermellanprogram-uppsättningen. Den extraherar automatiskt information om uppringare, agent, tenant, kanal och konversation från varje inkommande TurnContext och omsluter begäran i en baggage-omfattning.

from microsoft_agents_a365.observability.hosting import BaggageMiddleware

adapter.use(BaggageMiddleware())

Alternativt, använd ObservabilityHostingManager för att konfigurera baggage-middleware tillsammans med andra hostingfunktioner:

from microsoft_agents_a365.observability.hosting import ObservabilityHostingManager, ObservabilityHostingOptions

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

Mellanvaran hoppar över att sätta baggage för asynkrona svar (händelser av typ ContinueConversation) för att undvika att skriva över baggage som den ursprungliga förfrågan redan satt.

Tokenlösare

När du använder Agent 365-exportören måste du tillhandahålla en tokenlösare som returnerar en autentiseringstoken. När du använder Agent 365 Observability SDK med Agent Hosting-ramverket kan du generera tokens genom att använda TurnContext från agentaktiviteter.

Följande kodfragment visar hur man genererar en token genom att använda microsoft_agents.hosting.core-SDK:n. Den genererade autentiseringstoken används för att exportera spannen till A365:s insamlingstjänst. Agenter kan själva generera en token, till exempel genom att använda Microsofts autentiseringsbibliotek (MSAL), men de måste säkerställa att tokenen har scope för observabilitet.

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

För en agent som är byggd med A365 CLI och använder en AI-assistent samt Microsoft Agent 365 Observability Hosting Library-paketet, ska AgenticTokenCache användas för att hantera tokencaching automatiskt. Registrera token en gång per agent och hyresgäst under en aktivitetshanterare, och cache.get_observability_token ska anges som token_resolver i din observabilitetskonfiguration.

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(),
    )

Autoinstrumentation

Autoinstrumentering lyssnar automatiskt på agentramverks (SDK:ers) existerande telemetrisignaler för spårning och vidarebefordrar dem till Agent 365 observerbarhetstjänsten. Denna funktion eliminerar behovet för utvecklare att skriva övervakningskod manuellt, förenklar installationen och säkerställer konsekvent prestandauppföljning.

Viktigt

Autoinstrumentering fyller endast i standard OTel-attribut. Du måste lägga till Microsoft-specifika attribut genom BaggageBuilder. För att se vilka attribut som saknas, validera din spanutdata från konsolen mot Store-loggarna för diff-uppsättningen.

Flera SDK:er och plattformar stödjer autoinstrumentering:

Plattform SDK:er/ramverk som stöds
.NET Semantic Kernel, OpenAI, Agent Framework
Python Semantic Kernel, OpenAI, Agent Framework, LangChain
Node.js OpenAI, LangChain

Kommentar

Stöd för autoinstrumentering varierar mellan olika plattformar och SDK-implementationer.

Semantic Kernel

Automatisk instrumentering kräver användning av "baggage builder". Ställ in agent-ID och tenant-ID genom att använda BaggageBuilder.

Installera paketet.

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

Konfigurera observabilitet.

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

Automatisk instrumentering kräver användning av "baggage builder". Ställ in agent-ID och tenant-ID genom att använda BaggageBuilder.

Installera paketet.

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

Konfigurera observabilitet.

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

Agent Framework

Automatisk instrumentering kräver användning av "baggage builder". Ställ in agent-ID och tenant-ID genom att använda BaggageBuilder.

Installera paketet.

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

Konfigurera observabilitet.

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-ramverket

Autoinstrumentering kräver användning av baggage builder. Ställ in agent-ID och tenant-ID genom att använda BaggageBuilder.

Installera paketet.

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

Konfigurera observabilitet.

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

Manuell instrumentering

Använd Agent 365 observability SDK för att förstå agentens interna arbetssätt. SDK:n tillhandahåller scopes som du kan starta: InvokeAgentScope, ExecuteToolScope, InferenceScope och OutputScope.

Agentanrop

Använd detta scope i början av din agentprocess. Genom att använda agentanropsomfånget kan du registrera egenskaper som den aktuella agenten som anropas, agentanvändardata och mycket mer.

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(...)

Verktygskörning

Följande exempel visar hur du lägger till observabilitetsspårning i din agents verktygskörning. Denna spårning insamlar telemetri för övervaknings- och granskningsändamål.

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)

Slutsatsdragning

Följande exempel visar hur du kan instrumentera anrop för AI-modellinferens med observabilitetsspårning för att fånga tokenanvändning, modelldetaljer och responsmetadata.

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)

Utmatning

Använd denna scope för asynkrona scenarier där InvokeAgentScope, ExecuteToolScope eller InferenceScope inte kan registrera utdata synkront. Börja OutputScope som ett underordnat spann för att registrera de slutliga utdatameddelandena efter att det överordnade omfånget är klart.

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

Validera lokalt

För att kontrollera att du har lyckats integrera med observability SDK, granska konsolloggar som genereras av din agent och loggar från observability SDK.

Ange miljövariabeln ENABLE_A365_OBSERVABILITY_EXPORTER till false. Den här inställningen exporterar spann (traces) till konsolen.

För att felsöka exportfel, aktivera utförlig loggning genom att sätta ENABLE_A365_OBSERVABILITY_EXPORTER till true och konfigurera felsökningsloggning vid applikationsstart:

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)

Viktiga loggmeddelanden:

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.

Visning av exporterade loggar

För att se agenttelemetri i Microsoft Purview eller Microsoft Defender, se till att följande krav uppfylls:

Validera för butikspublicering

Viktigt

För att validering av lagring ska lyckas måste din agent implementera omfången InvokeAgentScope, InferenceScope och ExecuteToolScope. Dessa tre scopes krävs för publicering.

Innan du publicerar, använd konsolloggar för att validera agentens observabilitetsintegration genom att implementera de nödvändiga invoke agent, execute tool, inference och output scopes. Jämför sedan agentens loggar med följande listor över attribut för att verifiera att alla obligatoriska attribut är närvarande. Registrera attribut på varje scope eller via baggage builder, och inkludera valfria attribut efter eget gottfinnande.

För mer information om krav på Store-publicering, se riktlinjer för Store-validering.

InvokeAgentScope-attribut

Följande lista sammanfattar de obligatoriska och valfria telemetriattribut som registreras när du startar en InvokeAgentScope.

"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-attribut

Följande lista sammanfattar de obligatoriska och valfria telemetriattribut som registreras när du startar en ExecuteToolScope.

"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-attribut

Följande lista sammanfattar de obligatoriska och valfria telemetriattribut som registreras när du startar en InferenceScope.

"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-attribut

Följande lista sammanfattar de obligatoriska och valfria telemetriattribut som registreras när du startar en OutputScope. Använd denna scope för asynkrona scenarier där det överordnade scopet inte kan registrera utdata synkront.

"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"
    }

Testa din agent med överskådlighet

När du har implementerat observabilitet i din agent, testa den för att säkerställa att den fångar telemetri korrekt. Följ testguiden för att konfigurera din miljö. Sedan, fokusera främst på avsnittet Se observabilitetsloggar för att verifiera att din observabilitetsimplementation fungerar som förväntat.

Verifiering:

  • Gå till https://admin.cloud.microsoft/#/agents/all
  • Välj din agent > Aktivitet
  • Du ser sessioner och verktygsanrop

Felsökning

Detta avsnitt beskriver vanliga problem vid implementering och användning av observabilitet.

Problem beskrivning
Observerbarhetsdata visas inte Ingen telemetri visas eftersom exporten inte är aktiverad, konfigurationen är felaktig eller token-upplösningen misslyckas.
Saknad tenant-ID eller agent-ID - spans filtreras bort Spannar tas bort före export när identitetsattribut som krävs för partitionering saknas.
Tokenupplösningsfel – export hoppades över eller nekades behörighet Exportförfrågningar misslyckas eller utelämnas när resolvern inte returnerar någon token eller stöter på ett undantag.
HTTP 401 icke auktoriserad Autentiseringen lyckas rent tekniskt, men tokenen är ogiltig för inmatning på grund av omfattning, typ eller utgångsdatum.
HTTP 403 förbjuden Åtkomst nekas på grund av licensbrister hos tenant eller saknade observabilitetsbehörigheter.
HTTP 403 Förbjudet – Agent-ID-missmatch Förfrågan avslås när agentidentiteten i URL:en inte matchar identiteten som tokenen representerar.
HTTP 429 eller 5xx-fel – tillfälliga fel Tillfällig strypning eller fel på tjänstesidan avbryter exporten och kan kräva justering av omförsöksinställningar.
Exporttidsgräns Telemetrisatser överskrider konfigurerade timeoutperioder på grund av nätverksfördröjning eller endpointens responsförmåga.
Export lyckas men telemetrin visas inte i Defender eller Purview Intagningen slutförs, men nedströms synligheten fördröjs eller blockeras av produktkrav.

Dricks

Agent 365-felsökningsguide innehåller övergripande felsökningsrekommendationer, bästa praxis och länkar till felsökningsinnehåll för varje enskild del av Agent 365:s utvecklingslivscykel.

Observerbarhetsdata visas inte

Symtom:

  • Agenten körs
  • Ingen telemetri i administrationscentret
  • Kan inte se agentaktivitet

Grundorsak:

  • Överskådlighet har inte aktiverats
  • Konfigurationsfel
  • Tokenresolver-problem

Lösningar: Följ dessa steg för att lösa problemet:

  • Verifiera att observabilitetsexportören är aktiverad

    Du måste uttryckligen aktivera Agent 365-exportören. När exportören är inaktiverad faller SDK:n tillbaka på en konsolexportör och telemetri skickas inte till tjänsten. För konfigurationsdetaljer, se Konfiguration.

  • Kontrollera tokenresolverns konfiguration

    Exportören kräver en giltig tokenlösare som returnerar en Bearer-token för varje exportförfrågan. Om token resolver saknas eller returnerar null, utförs ingen export och det sker utan att något meddelas. Se till att din kod implementerar tokenresolvern korrekt. För mer information, se Tokenresolver.

  • Granska loggarna för fel

    Aktivera detaljerad loggning och använd kommandot az webapp log tail för att söka i loggar efter fel relaterade till observability. För detaljer om hur du aktiverar loggning per plattform, se Validera lokalt.

    # Look for observability-related errors
    az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
    
  • Verifiera telemetriexport

    Bekräfta att telemetri genereras och exporteras som förväntat.

    • Lägg till en konsolexportör och kontrollera att telemetri genereras lokalt. För detaljer om hur man använder konsolexportören och validerar utdata, se Validera lokalt.

Saknat tenant-ID eller agent-ID — spans utelämnats

Symptom: Systemet släpper tyst spans och exporterar dem aldrig. Vissa SDK:er loggar antalet överhoppade spans eller ett meddelande som "Inga spans med tenant/agent-identitet hittade." Andra ignorerar dem utan att logga.

Lösning:

  • Innan export partitionerar SDK spann efter tenant- och agentidentitet. Systemet släpper spans som saknar antingen tenant-ID eller agent-ID och skickar dem aldrig till tjänsten.
  • Säkerställ att BaggageBuilder är konfigurerad med tenant-ID och agent-ID innan du skapar span. Dessa värden propagerar genom OpenTelemetry-kontexten och kopplas till alla span som skapas inom bagage-omfattning. För det plattformsspecifika API:et, se Bagageattribut.
  • Bekräfta att aktiviteten TurnContext har en giltig mottagare med agentidentitet om du använder bagage-middleware eller kontexthjälparen från värdintegrationspaketet för att fylla i dessa ID:n.

Fel vid tokenlösning – exporten uteblir eller är obehörig

Symtom: Tokenresolvern returnerar null eller kastar ett fel. Beroende på SDK hoppas exporten antingen över helt eller så skickas förfrågan utan auktorisationshuvud och misslyckas med HTTP 401.

Lösning:

  • Tokenresolvern krävs vid initiering. Om den saknas kastar exportören ett fel vid uppstart. Verifiera att en token-resolver tillhandahålls och returnerar en giltig Bearer-token.
  • Se till att rätt tenant-ID och agent-ID används för BaggageBuilder, eftersom dessa värden skickas till tokenlösaren.
  • För Azure-hostade agenter, se till att Managed Identity har den nödvändiga API-behörigheten för överskådlighetsområdet.

HTTP 401 icke auktoriserad

Symtom: Exporten misslyckas med HTTP 401. Exportören försöker inte igen vid detta fel.

Lösning:

  • Verifiera att tokenaudience matchar observability-endpointens omfattning.
  • Kontrollera att token resolver inte returnerar en delegerad användartoken, en token med felaktig audience eller en utgången token.

HTTP 403 Förbjuden

Symtom: Exporten misslyckas med HTTP 403. Exportören försöker inte igen vid detta fel.

Grundorsak: Ett HTTP 403-fel kan ha olika orsaker. Kontrollera följande lösningar i ordning.

Lösning:

  • Saknad licens — Kontrollera att din Microsoft 365-miljö har tilldelats någon av följande licenser i Administrationscenter för Microsoft 365:

    • Test - Microsoft 365 E7
    • Microsoft 365 E7
    • Microsoft Agent 365 Frontier
  • Saknad Agent365.Observability.OtelWritebehörighet — Om du nyligen uppgraderat dina observabilitetspaket måste du tilldela denna behörighet. Se den viktiga anmärkningen i nästa avsnitt.

Viktigt

För befintliga agenter som uppgraderar till dessa paketversioner krävs ett extra steg

Detta steg gäller endast om du uppgraderar en befintlig agent. Nya agentinstallationer kräver inte detta steg. Om du uppgraderar till följande paketversioner eller nyare måste du bevilja den nya Agent365.Observability.OtelWrite-behörigheten till din identitet (Managed Identity eller appregistrering). Om behörigheten saknas, misslyckas telemetriexport med HTTP 403.

Plattform Minsta version som kräver detta steg
.NET 0.3-beta
Node.js 0.2.0-preview.1
Python 0.3.0

Välj något av följande alternativ för att bevilja behörigheter.

Alternativ A — Agent 365 CLI (kräver ett Global Administrator-konto; kör från agentprojektkatalogen som innehåller a365.config.json, eller använd --agent-name)

a365 setup permissions bot

Eller utan konfigurationsfil:

a365 setup permissions bot --agent-name "<agent-name>"

Detta kommando beviljar alla saknade behörigheter i blueprinten, inklusive Observability scopes.

Alternativ B — Entra Portal (inga konfigurationsfiler krävs; kräver åtkomst som global administratör till blueprint-applikationens registrering)

  1. Gå till Entra portal>Appregistreringar> och välj din Blueprint-app.
  2. Gå till API-behörigheter>Lägg till en behörighets-API> som min organisation använder> sök efter 9b975845-388f-4429-889e-eab1ef63949c.
  3. Välj Delegarede behörigheter> markera Agent365.Observability.OtelWrite>Lägg till behörigheter.
  4. Upprepa steg 2–3, men välj denna gång Applikationsbehörigheter>, markera Agent365.Observability.OtelWrite>Lägg till behörigheter.
  5. Klicka på Bevilja administratörssamtycke och bekräfta.

Både Agent365.Observability.OtelWrite (delegerad) och Agent365.Observability.OtelWrite (applikation) bör visa Granted status.

HTTP 403 Forbidden — Agent-ID-matchning saknas

Symtom: Exporten misslyckas med HTTP 403 och ett servermeddelande liknande 403 Forbidden med agent-ID-mismatch fel vid anrop till Agent 365 traces endpoints.

Rotorsak: Det här felet uppstår när du använder blueprint-klient-ID istället för agentinstansens klient-ID när du konfigurerar agentens uppgifter. Agent-ID:t i export-URL:en motsvarar inte identiteten som tokenen auktoriserar, så spårnings-ändpunkten avvisar begäran.

Lösning:

  • Verifiera om klientorganisations-ID har lagts till i listan över godkända klientorganisationer för Agent 365.
  • Konfigurera agentens uppgifter med agentinstansens klient-ID (inte Blueprint-klient-ID:t).
  • Verifiera den genererade export-URL:en – den loggas om du aktiverar loggaren. Bekräfta att agent-ID:t i URL:en matchar agentinstansens klient-ID.
  • För att aktivera diagnostisk loggning per SDK, se Validera lokalt.

HTTP 429 eller 5xx-fel – tillfälliga fel

Symtom: Exporten misslyckas på grund av en övergående HTTP-statuskod, såsom 429 eller 5xx.

Lösning:

  • Dessa fel är vanligtvis övergående och löses av sig själva. Python- och JavaScript-SDK:erna försöker automatiskt igen vid HTTP 408, 429 och 5xx-statuskoder upp till tre gånger med exponentiell backoff. .NET SDK:n återförsöker inte automatiskt.
  • Om felen kvarstår, kontrollera tjänstens hälsostatuspanel.
  • Överväg att minska exportfrekvensen genom att öka den schemalagda fördröjningen mellan batcher eller öka den maximala exportbatchstorleken. För konfigurationsalternativ per plattform, se Agent365ExporterOptions tabellen i Konfiguration.

Exporttidsgräns

Symtom: Exportförsök avbryts på grund av timeout.

Lösning:

  • Kontrollera nätverksanslutningen till överskådlighetsändpunkten.
  • Timeout-standardinställningar varierar beroende på plattform. Standardtidsgränsen för HTTP-begäran är 30 sekunder. Vissa SDK:er har också en separat, övergripande exporter-timeout som täcker hela exportcykeln inklusive återförsök. För exakta egenskaper och standardinställningar per plattform, se Agent365ExporterOptions-tabellen i Konfiguration.
  • Om timeouts förekommer ofta, öka det relevanta timeout-värdet i dina exportinställningar.

Export lyckas men telemetrin visas inte i Defender eller Purview

Symtom: Loggar visar en lyckad export men telemetri är inte synlig i Microsoft Defender eller Microsoft Purview.

Lösning:

  • Kontrollera att du uppfyller förutsättningarna för att kunna se exporterade loggar. För Purview måste granskning vara aktiverad. För Defender måste du konfigurera avancerad jakt. Mer information finns i Visa exporterade loggar.
  • Telemetri kan ta flera minuter att bli tillgänglig efter en lyckad export. Vänta på att data ska dyka upp innan du undersöker vidare.

För att lära dig mer om testning av observabilitet, se: