Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft OpenTelemetri-distributionen är en enhetlig överskådlighetsdistribution som erbjuder en enhetlig onboarding-upplevelse för att samla in spår, mätvärden och loggar från agentiska och icke-agentiska applikationer. Den stöder överskådlighet för Microsoft Agent 365, Microsoft Foundry, Azure Monitor samt alla OpenTelemetry Protocol (OTLP)-kompatibla backends. Distron stöder .NET, Node.js och Python, och ersätter fragmenterad setup över flera överskådlighetsstackar med ett importanrop och ett konfigurationsanrop.
Viktiga fördelar
Microsoft OpenTelemetry-distro erbjuder dessa fördelar:
- Ett paket, ett API: Byt ut flera exportör- och instrumenteringspaket mot endast ett beroende.
- Multi-backend-stöd: Skicka telemetri till Azure Monitor, till valfri OpenTelemetry Protocol (OTLP)-kompatibel endpoint, till exempel Datadog, Grafana eller New Relic, samt till Microsoft Agent 365 samtidigt.
- Inbyggd instrumentering: Använd automatisk instrumentering för HTTP, databaser, Azure SDKs, Azure Functions och mer utan extra konfiguration.
- Standardbaserat: Bygg på OpenTelemetry, branschens standardramverk för överskådlighet.
- Minimal boilerplate: Lägg till en import och ett funktionsanrop i applikationens startpunkt.
Installation och konfiguration
Denna vägledning visar hur du lägger till överskådlighet i din applikation med Microsoft OpenTelemetry Distro. Distro samlar automatiskt in spår, mätvärden och loggar med inbyggda instrumenteringar, och exporterar telemetrin till Azure Monitor, valfri OpenTelemetry Protocol (OTLP)-endpoint eller Microsoft Agent 365.
Installera bibliotek
För att komma igång med Microsoft OpenTelemetry Distro, installera det lämpliga biblioteket för din utvecklingsplattform med hjälp av din språkspecifika pakethanterare.
Konfiguration
Agent 365-exportören behöver ingen anslutningssträng. Endpointen upptäcks automatiskt baserat på tenant. För att möjliggöra export till Agent 365, ange exportmålet och tillhandahåll en tokenlösare som returnerar en åtkomsttoken för ett givet agent-ID och tenant-ID.
Anropa use_microsoft_opentelemetry() för att aktivera observerbarhet.
from microsoft.opentelemetry import use_microsoft_opentelemetry
from microsoft.opentelemetry.a365.hosting.token_cache_helpers import AgenticTokenCache
token_cache = AgenticTokenCache()
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=lambda agent_id, tenant_id: (
(t := asyncio.run(token_cache.get_observability_token(agent_id, tenant_id)))
and t.token or None
),
)
För anpassad tokenupplösning (istället för standardtokenlösare), se Manual token resolver.
Du kan anpassa exporterbeteendet genom att skicka valfria a365_* kwargs till use_microsoft_opentelemetry().
| Parameter | beskrivning | Standard |
|---|---|---|
a365_use_s2s_endpoint |
När True använder sökvägen till tjänst-till-tjänst-ändpunkten. |
False |
a365_max_queue_size |
Maximal köstorlek för batchprocessorn. | 2048 |
a365_scheduled_delay_ms |
Fördröjning i millisekunder mellan exportbatcher. | 5000 |
a365_exporter_timeout_ms |
Timeout i millisekunder för exportåtgärden. | 30000 |
a365_max_export_batch_size |
Maximal batchstorlek för exportåtgärder. | 512 |
Propagera kontext
För att bibehålla överskådlighet i distribuerade Agent 365-åtgärder, propagera kontext. När du propagerar kontext genom dina agenter och tjänster ser du till att spår, loggar och mätvärden är korrekt korrelerade under hela livscykeln för en begäran. Denna korrelation krävs för en komplett och effektiv övervakningsupplevelse med Microsoft Agent 365.
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.opentelemetry.a365.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-opentelemetry. Hjälparen extraherar automatiskt detaljer om uppringare, agent, tenant, kanal och konversation från aktiviteten.
from microsoft.opentelemetry.a365.core import BaggageBuilder
from microsoft.opentelemetry.a365.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.
I Python registrerar du baggage-mellanprogrammet genom ObservabilityHostingManager.configure() istället för direkt på adaptern.
from microsoft.opentelemetry.a365.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.
Validera att data flödar in produkten
För att se agenttelemetri i Microsoft Purview eller Microsoft Defender, se till att följande krav uppfylls:
- Microsoft Purview: Granskning måste vara aktiverad för din organisation. För anvisningar, se Aktivera eller inaktivera granskning.
-
Microsoft Defender: Avancerad jakt måste konfigureras för att komma åt tabellen
CloudAppEvents. För mer information, se CloudAppEvents-tabellen i schemat för avancerad sökning.
Automatisk instrumentering
Microsoft OpenTelemetry Distro kombinerar standardpipelines för OpenTelemetry med Microsoft-kuraterad instrumentering. Distron kan samla in applikationstelemetri, infrastrukturtelemetri och agent- eller generativ AI-telemetri beroende på språk och konfiguration.
| Kategori | Vad det täcker |
|---|---|
| Signalledningar | Spår, mått och loggar. |
| Resursdetektion | Service-, host-, moln- och Azure-körtidskontext där det stöds. |
| Infrastrukturinstrumentering | HTTP, ASP.NET Core, Azure SDKs, databasklienter och loggningsramverk där det stöds. |
| Generativ AI-instrumentering | OpenAI, Azure OpenAI, Semantic Kernel, LangChain, OpenAI Agents SDK och Agent Framework där det stöds. |
| Manuella agentteleskop | Agentanrop, verktygsexekvering, inferens och utdatatelemetri där det stöds. |
| Exportörer och processorer | Azure Monitor, Microsoft Agent 365, OTLP, konsolutmatning, spanprocessorer, loggprocessorer och metrikläsare. |
Instrumenteringstäckning
| Language | Allmän applikationsinstrumentering | Allmän agent- och generativ AI-instrumentering |
|---|---|---|
| Python | OpenTelemetrys resurser, processorer, läsare, loggning, mätvärden och spårning. | Semantic Kernel, OpenAI Agents SDK, Agent Framework, LangChain, Microsoft Agent 365 bagage, och Microsoft Agent 365 omfattningar. |
| Node.js | HTTP, Azure SDKs, Azure Functions, MongoDB, MySQL, PostgreSQL, Redis, Bunyan och Winston. | OpenAI Agents SDK, LangChain, Microsoft Agent 365 bagage, och Microsoft Agent 365 omfattningar. |
| .NET | ASP.NET Core, HttpClient, SQL Client, Azure SDKs, resursdetektering, mätvärden och loggar. | Semantic Kernel, OpenAI och Azure OpenAi, Agent Framework, Microsoft Agent 365 bagage, och Microsoft Agent 365 omfattningar. |
Automatisk instrumentering lyssnar på telemetrisignaler som sänds ut av stödda bibliotek och ramverk. Manuell instrumentering används när en applikation behöver beskriva agentspecifika åtgärder, såsom anrop, verktygskörning, inferens eller asynkron utdata.
Lägg till egna OpenTelemetry-källor, mätare, processorer eller läsare när din applikation sänder telemetri som inte täcks av de inbyggda instrumenteringarna.
Viktigt
Automatisk instrumentering fyller endast i standard OpenTelemetrie-attribut. Den inkluderar inte alla attribut som Agent 365 kräver. Du måste lägga till Microsoft-specifika attribut genom BaggageBuilder. För att se vilka attribut som krävs, se Store validation attributes.
Inbyggda instrumenteringsbibliotek
Autoinstrumentering lyssnar på telemetri från stödda ramverk och vidarebefordrar den genom Distrots OpenTelemetry-pipeline. För agentscenarier, sätt baggage såsom klientorganisations-ID och agent-ID innan det instrumenterade ramverket skapar spans.
| Ramverk | Python | Node.js | .NET |
|---|---|---|---|
| Semantic Kernel | Stöds | Stöds inte | Stöds |
| OpenAI och OpenAI Agents SDK | Stöds | Stöds | Stöds |
| Agent Framework | Stöds | Stöds inte | Stöds |
| LangChain | Stöds | Stöds | Finns inte med i listan |
Semantic Kernel
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "your-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
instrumentation_options={
"semantic_kernel": {"enabled": True},
},
)
OpenAI
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "your-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
instrumentation_options={
"openai_agents": {"enabled": True},
},
)
Agent Framework
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "your-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
instrumentation_options={
"agent_framework": {"enabled": True},
},
)
LangChain
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "your-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
instrumentation_options={
"langchain": {"enabled": True},
},
)
Manuell instrumentering
Använd manuell instrumentering när automatisk instrumentering inte beskriver agentens aktivitet tillräckligt detaljerat. Manuella omfång låter en applikation beskriva gemensamma agentaktiviteter på ett konsekvent sätt över språk.
| Definitionsområde | Använd för |
|---|---|
InvokeAgentScope |
Början och avslutandet av ett agentanrop. |
ExecuteToolScope |
Ett verktygsanrop gjort av en agent. |
InferenceScope |
En AI-modellinferensåtgärd. |
OutputScope |
Utdata som måste registreras efter att det ursprungliga omfattning:t redan har slutförts. |
Återanvänd samma begäran- och agentidentitetsvärden över omfattningar i en förfrågan så att relaterad telemetri kan korreleras.
Agentanrop
from microsoft.opentelemetry.a365.core import (
AgentDetails,
Channel,
InvokeAgentScope,
InvokeAgentScopeDetails,
Request,
ServiceEndpoint,
)
agent_details = AgentDetails(
agent_id="agent-456",
agent_name="Email Assistant",
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",
)
request = Request(
content="Please help me organize my emails",
session_id="session-42",
conversation_id="conv-xyz",
channel=Channel(name="msteams"),
)
scope_details = InvokeAgentScopeDetails(
endpoint=ServiceEndpoint(hostname="myagent.contoso.com", port=443),
)
with InvokeAgentScope.start(
request=request,
scope_details=scope_details,
agent_details=agent_details,
) as scope:
scope.record_input_messages(["Please help me organize my emails"])
# Run the agent invocation.
invoke_scope.record_output_messages(["I found 15 urgent emails."])
Verktygskörning
from microsoft.opentelemetry.a365.core import (
ExecuteToolScope,
ServiceEndpoint,
ToolCallDetails,
ToolType,
)
tool_details = ToolCallDetails(
tool_name="email-search",
arguments={"query": "from:manager@contoso.com"},
tool_call_id="tool-call-456",
description="Search emails by criteria",
tool_type=ToolType.FUNCTION.value,
endpoint=ServiceEndpoint(
hostname="tools.contoso.com",
port=8080,
protocol="https",
),
)
with ExecuteToolScope.start(
request=request,
details=tool_details,
agent_details=agent_details,
) as scope:
result = search_emails(tool_details.arguments)
scope.record_response(result)
Slutsatsdragning
from microsoft.opentelemetry.a365.core import (
InferenceCallDetails,
InferenceOperationType,
InferenceScope,
)
inference_details = InferenceCallDetails(
operationName=InferenceOperationType.CHAT,
model="gpt-4o-mini",
providerName="azure-openai",
)
with InferenceScope.start(
request=request,
details=inference_details,
agent_details=agent_details,
) as scope:
scope.record_input_messages(["Summarize the following emails for me."])
response = call_llm()
scope.record_output_messages([response.text])
scope.record_input_tokens(response.usage.input_tokens)
scope.record_output_tokens(response.usage.output_tokens)
scope.record_finish_reasons(["stop"])
Utmatning
from microsoft.opentelemetry.a365.core import OutputScope, Response, SpanDetails
# Capture this before exiting the originating InvokeAgentScope context.
parent_context = invoke_scope.get_span_context()
response = Response(
messages=["Here is your organized inbox."],
)
with OutputScope.start(
request=request,
response=response,
agent_details=agent_details,
user_details=None,
span_details=SpanDetails(parent_context=parent_context),
) as scope:
pass
Produktdokumentationen bör definiera produktspecifika valideringskrav för dessa omfång.
Lokal validering
Lokal validering bekräftar att applikationen genererar telemetri innan en produktspecifik destination valideras. Använd konsolutdata eller en lokal OTLP-endpoint för att verifiera att spår, mätvärden och loggar genereras.
Validera med en lokal OTLP-endpoint
Konfigurera Distro för att skicka telemetri till en lokal samlare eller en annan OTLP-kompatibel endpoint.
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
from microsoft.opentelemetry import use_microsoft_opentelemetry
use_microsoft_opentelemetry()
Validera med lokal utdata
Använd lokal utdata när du vill bekräfta instrumenteringen innan du skickar telemetri till en fjärrdestination.
export ENABLE_A365_OBSERVABILITY_EXPORTER=false
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "local-validation-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
)
# Run instrumented application code.
Granska den lokala utdata för spann från förväntade källor, såsom HTTP-anrop, OpenAI- eller Azure OpenAI-anrop, omfattningar för agentanrop, omfattningar för verktygsexekvering eller omfattningar för inferens. Destinationsspecifik validering ska finnas i produktdokumentationen för respektive destination.
Konfigurera Microsoft-autentisering manuellt
När du använder Agent 365-exportören måste du tillhandahålla en mekanism för att tillhandahålla en autentiseringstoken. Tokenresolvern arbetar per exportbatch genom att använda agent-ID och tenant-ID från den aktiva bagagekontexten. Distron stöder två tillvägagångssätt.
Dricks
Om du skapar agenter med SDK för Microsoft 365-agenter, se Observability Authentication Setup för Agent SDK för steg-för-steg-instruktioner om hur du konfigurerar OBO- och S2S-tokenhämtning för både agentbaserade och icke-agentbaserade agenter.
Manuell tokenlösare
Använd en manuell tokenlösare när du hämtar tokens utanför Agent Framework-pipelinen, när du bygger applikationer som inte använder Agent Framework, eller vid service-till-service (S2S) autentisering (client credentials flow). Agenter kan generera en token själva, till exempel genom att använda Microsofts autentiseringsbibliotek (MSAL) eller någon annan metod för tokenhämtning, men de måste säkerställa att tokenen har rätt överskådlighetsomfång (api://9b975845-388f-4429-889e-eab1ef63949c/Agent365.Observability.OtelWrite).
Kommentar
För autentisering mellan tjänster (S2S) måste du använda denna manuella metod för tokenhämtning. agentbaserade token-cachen stöder endast OBO (on-behalf-of) autentiseringsflöden.
Följande exempel illustrerar OBO (on-behalf-of) tokenlösarmönstret — agenten hämtar en användartoken via den agentbaserade autentiseringshanteraren och byter ut den mot en token med observerbarhetsomfattning. För exempel på S2S (service-to-service) och en jämförelse av OBO- och S2S-autentisering, se Observability Authentication Setup för Agent SDK.
Resolvern måste vara synkron. Hämta token i din asynkrona aktivitetshanterare (eller via MSAL) och lagra den i cache för resolvern.
from microsoft.opentelemetry import use_microsoft_opentelemetry
from microsoft.opentelemetry.a365.runtime import get_observability_authentication_scope
_cached_token: str | None = None
def my_token_resolver(agent_id: str, tenant_id: str) -> str | None:
return _cached_token
use_microsoft_opentelemetry(enable_a365=True, a365_token_resolver=my_token_resolver)
@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
global _cached_token
_cached_token = await AGENT_APP.auth.exchange_token(
context,
scopes=get_observability_authentication_scope(),
auth_handler_id="AGENTIC",
)
Agentic token cache med Agent Framework-appar
För Agent Framework-appar som använder on-behalf-of (OBO)-autentisering registrerar distributionen automatiskt IExporterTokenCache<AgenticTokenStruct> via DI när du inte ställer in en anpassad TokenResolver. Din agent anropar RegisterObservability() under körning för att tillhandahålla autentiseringsuppgifter, och cachen hanterar tokenhämtning och uppdatering.
Kommentar
Denna metod stöder endast on-behalf-of (OBO) autentiseringsflöden. För autentisering mellan tjänster (S2S), använd den manuella tokenresolvern istället.
from microsoft.opentelemetry import use_microsoft_opentelemetry
from microsoft.opentelemetry.a365.hosting.token_cache_helpers import AgenticTokenCache, AgenticTokenStruct
from microsoft.opentelemetry.a365.runtime import get_observability_authentication_scope
token_cache = AgenticTokenCache()
_cached_tokens: dict[tuple[str, str], str | None] = {}
# Keep the sync resolver side-effect free; refresh the cache in the async request handler.
def sync_token_resolver(agent_id: str, tenant_id: str) -> str | None:
return _cached_tokens.get((agent_id, tenant_id))
use_microsoft_opentelemetry(enable_a365=True, a365_token_resolver=sync_token_resolver)
@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
agent_id = context.activity.recipient.id
tenant_id = context.activity.recipient.tenant_id
token_cache.register_observability(
agent_id=agent_id,
tenant_id=tenant_id,
token_generator=AgenticTokenStruct(
authorization=AGENT_APP.auth,
turn_context=context,
),
observability_scopes=get_observability_authentication_scope(),
)
_cached_tokens[(agent_id, tenant_id)] = await token_cache.get_observability_token(
agent_id, tenant_id,
)
Lagra valideringsattribut
För att validering av lagring ska lyckas måste din agent implementera InvokeAgentScope, InferenceScope och ExecuteToolScope. Varje omfång motsvarar en span-åtgärd i det kanoniska schemat:
| Omfattning för SDK | Spanåtgärd | Universell referenskod |
|---|---|---|
InvokeAgentScope |
invoke_agent |
IA |
ExecuteToolScope |
execute_tool |
ET |
InferenceScope |
chat |
CH |
OutputScope |
output_messages |
OM |
För fullständiga listor över obligatoriska och valfria attribut per omfång – inklusive attributsemantik, vägledning om värdeval och vilka attribut som kan sökas via Microsoft Defender advanced hunting – se Agent 365-överskådlighetsattributreferens. Kolumnen Gäller för identifierar vilket område varje attribut tillhör, och kolumnen Required skiljer obligatoriska (M) från valfria (O) attribut.
Testa din agent med överskådlighet
När du har implementerat överskådlighet, kontrollera att telemetri samlas in:
- Gå till
https://admin.cloud.microsoft/#/agents/all. - Välj din agent och välj sedan Aktivitet.
- Kontrollera att sessioner och verktygsanrop visas.
Exempelprogram och avancerad konfiguration
För kodexempel och avancerade konfigurationsalternativ, se GitHub-repositorierna för respektive språk:
Felsökning
Detta avsnitt beskriver vanliga problem vid implementering och användning av Microsoft OpenTelemetry-distro med Agent 365.
| Problem | beskrivning |
|---|---|
| Observerbarhetsdata visas inte | Ingen telemetri syns eftersom Agent 365-exporten inte är aktiverad, installationen är ofullständig eller token-upplösningen misslyckas. |
| Saknad tenant-ID eller agent-ID - spans filtreras bort | Spann filtreras bort innan export när nödvändiga tenant- eller agentidentitetsattribut saknas. |
| Tokenupplösningsfel – export hoppades över eller nekades behörighet | Export hoppas över eller avvisas om tokenresolvern inte returnerar någon token eller om det uppstår fel vid tokeninhämtning. |
| HTTP 401 icke auktoriserad | Förfrågningar når tjänsten men autentiseringen misslyckas eftersom token är ogiltig, har gått ut eller är avsedd för fel mottagare. |
| HTTP 403 förbjuden | Auktorisering misslyckas på grund av att tenant-licensiering eller skrivbehörighet för observability saknas. |
| HTTP 403 Förbjudet – Agent-ID-missmatch | Tjänsten avvisar export när agent-ID:t i förfrågan inte matchar den agentidentitet som auktoriserats av token. |
| HTTP 429 eller 5xx-fel – tillfälliga fel | Tillfällig begränsning eller instabilitet i backend avbryter exporten och kan kräva omförsök eller batchjustering. |
| Exporttidsgräns | Exportåtgärder överskrider timeoutgränser på grund av nätverksfördröjningar eller slutpunktens svarstid. |
| Export lyckas men telemetrin visas inte i Defender eller Purview | Datainläsning lyckas, men synligheten fördröjs eller blockeras av nedströmskrav och schemakrav. |
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:
- Agent 365-exporten är inte aktiverad
- Konfigurationsfel
- Tokenresolver-problem
Lösningar: Följ dessa steg för att lösa problemet:
Kontrollera att Agent 365-exportören är aktiverad
Du måste uttryckligen aktivera Agent 365-exportören. Om du inte ställer in det kan distro falla tillbaka på en konsolexportör eller exportera ingenting. Aktivera det i koden:
from microsoft.opentelemetry import use_microsoft_opentelemetry use_microsoft_opentelemetry( enable_a365=True, a365_enable_observability_exporter=True, a365_token_resolver=my_token_resolver, )Eller ange miljövariabeln:
export ENABLE_A365_OBSERVABILITY_EXPORTER=trueKommentar
ENABLE_A365_OBSERVABILITY_EXPORTERär en sekundär inställning som bara träder i kraft närenable_a365=Trueär inställd i koden. Du kan också styra den viaa365_enable_observability_exporterkwarg.
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.Aktivera konsolexport och kontrollera telemetri lokalt
Lägg till en konsolexportör för att verifiera att telemetri genereras innan den når Agent 365-endpointen:
Aktivera utförlig loggning
Kontrollera loggar för exportfel
Använd
az webapp log tail-kommandot för att söka i loggar efter överskådlighetsrelaterade fel:az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
Saknat tenant-ID eller agent-ID — spans utelämnats
Symptom: Systemet släpper tyst spans och exporterar dem aldrig. Vissa plattformar loggar ett antal utlämnade spans eller ett meddelande som No spans with tenant/agent identity found. Andra släpper dem utan att logga det.
Lösning:
- Innan export partitionerar distro spans efter tenant- och agentidentitet. Spann som saknar antingen klientorganisations-ID eller agent-ID tas bort och skickas 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. - Om du använder bagage-middleware eller turn context helper från hosting-integreringspaketet, bekräfta att
TurnContextaktiviteten har en giltig mottagare med agentidentitet.
Fel vid tokenlösning – exporten uteblir eller är obehörig
Symtom: Tokenresolvern returnerar null eller kastar ett fel. Beroende på plattform uteblir exporten helt eller misslyckas med HTTP 401.
Lösning:
- Tokenresolvern krävs. 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 skickas till
BaggageBuilder, eftersom dessa värden vidarebefordras 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.
- För .NET-appar som använder Agent Framework-värdpaketet hanteras tokenutbyte automatiskt via DI. Om tokens saknas, bekräfta
Microsoft.Agents.A365.Observability.Hostingatt den är installerad och registrerad.
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 — Ge behörigheten till din identitet (Managed Identity eller app-registrering) Utan behörigheten returnerar telemetriexporten HTTP 403.
Bevilja behörigheten
Använd något av dessa alternativ:
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 botEller utan konfigurationsfil:
a365 setup permissions bot --agent-name "<agent-name>"Entra Portal
Inga konfigurationsfiler krävs; kräver global administratörsbehörighet till Blueprint-appregistreringen.
- Gå till Entra portal>Appregistreringar> och välj din Blueprint-app.
- 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. - Välj Delegarede behörigheter> markera
Agent365.Observability.OtelWrite>Lägg till behörigheter. - Upprepa steg 2–3, men välj denna gång Applikationsbehörigheter>, markera
Agent365.Observability.OtelWrite>Lägg till behörigheter. - Klicka på Bevilja administratörssamtycke och bekräfta.
Både
Agent365.Observability.OtelWrite(Delegerad) ochAgent365.Observability.OtelWrite(Applikation) visarGrantedstatus.
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 Lokal validering.
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-distributionerna försöker automatiskt igen vid HTTP-statuskoderna 408, 429 och 5xx. .NET-distron å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 den maximala exportbatchstorleken. För Python och JavaScript, använd de relevanta
exporterOptionsellera365_*-parametrarna som dokumenteras i GitHub-repositorierna. För .NET ska du användao.Agent365.Exporter.ScheduledDelayMillisecondsocho.Agent365.Exporter.MaxExportBatchSize.
Exporttidsgräns
Symtom: Exportförsök avbryts på grund av timeout.
Lösning:
Kontrollera nätverksanslutningen till överskådlighetsändpunkten.
Standard timeout för HTTP-förfrågningar är 30 sekunder på alla plattformar. Om timeoutar inträffar ofta, öka timeout-värdet i dina exportörinställningar:
Export lyckas men telemetrin visas inte i Defender eller Purview
Symtom: Loggar visar en lyckad export (HTTP 200) men telemetri syns inte i Microsoft Defender eller Microsoft Purview.
Lösning:
- Kontrollera att du uppfyller förutsättningarna för att kunna läsa exporterade loggar:
- Microsoft Purview: Granskning måste vara aktiverad för din organisation. Se Aktivera eller inaktivera auditering.
-
Microsoft Defender: Avancerad jakt måste konfigureras för att komma åt tabellen
CloudAppEvents. Se CloudAppEvents-tabellen i schemat för avancerad sökning.
- Telemetri kan ta flera minuter att bli tillgänglig efter en lyckad export. Vänta innan du undersöker vidare.
- Verifiera att spann innehåller giltiga
microsoft.tenant.idochgen_ai.agent.idattribut. Saknade identitetsattribut gör att spans tas bort på serversidan även om HTTP-exporten returnerar 200.
Relaterat innehåll
- Agent 365-överskådlighetskoncept – Dataflöde, identitetsmodeller, autentisering, omfattningar och gränser som gäller för varje integreringsväg.
- Agent 365 överskådlighetsattributreferens – Kanoniskt spanattributschema som varje spann som tas in av Agent 365 måste följa.