Microsoft OpenTelemetry Distro

Microsoft OpenTelemetry Distro on yhtenäinen havaittavuusjakelu, joka mahdollistaa jälkien, mittareiden ja lokien keräämisen agenttisista ja ei-agenttisista sovelluksista yhdellä käyttöönotolla. Se tarjoaa havaittavuuden tuen Microsoft Agent 365:lle, Microsoft Foundrylle, Azure Monitorille ja kaikille OpenTelemetry Protocol (OTLP) -yhteensopiville taustajärjestelmille. Distro tukee .NET-, Node.js- ja Python-sovelluksia ja korvaa hajanaiset havaittavuusratkaisut yhdellä importilla ja konfiguraatiokutsulla.

Avainedut

Microsoft OpenTelemetry Distro tarjoaa seuraavat edut:

  • Yksi paketti, yksi API: Korvaa useat vienti- ja instrumentointipaketit yhdellä riippuvuudella.
  • Monitaustatuki: Lähetä telemetria Azure Monitoriin, mille tahansa OpenTelemetry Protocol (OTLP) -yhteensopivalle päätepisteelle, kuten Datadogiin, Grafanaan tai New Reliciin, sekä Microsoft Agent 365:een samanaikaisesti.
  • Sisäänrakennetut instrumentaatiot: Käytä automaattista instrumentointia HTTP:lle, tietokannoille, Azure SDK:lle, Azure-funktioille ja muille ilman lisäasetuksia.
  • Standardipohjainen: Rakenna OpenTelemetryn pohjalle, joka on alan standardi havaittavuusviitekehys.
  • Vähäinen pohjakoodi: Lisää yksi tuonti ja yksi funktiokutsu sovelluksesi aloituspisteeseen.

Asennus ja määrittäminen

Tämä ohjeistus näyttää, miten voit lisätä havaittavuutta sovellukseesi Microsoft OpenTelemetry Distron avulla. Distro kerää automaattisesti jäljitykset, mittarit ja lokitiedot sisäänrakennetuilla instrumentaatioilla ja vie telemetrian Azure Monitoriin, mihin tahansa OpenTelemetry Protocol (OTLP) -päätepisteeseen tai Microsoft Agent 365:een.

Kirjaston asennus

Aloita Microsoft OpenTelemetry Distron käyttö asentamalla kehitysalustallesi sopiva kirjasto ohjelmointikielesi pakettienhallintaohjelmalla.

Ennakkovaatimukset: Python 3.10 tai uudempi.

pip install microsoft-opentelemetry

Määritys

Agent 365 -viejä ei käytä yhteysmerkkijonoa. Se löytää päätepisteensä automaattisesti vuokraajan perusteella. Jotta vienti Agent 365:een olisi mahdollista, aseta exporter target ja määritä token resolver, joka palauttaa käyttöoikeustunnuksen annetulle agentti-ID:lle ja tenant ID:lle.

Kutsu use_microsoft_opentelemetry() ottaaksesi käyttöön observabilityn.

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

Jos haluat käyttää mukautettua tunnus-ratkaisijaa (oletustunnus-ratkaisijan sijaan), katso Manuaalinen tunnusratkaisija.

Voit mukauttaa viejän toimintaa antamalla a365_*-avainsana-argumentin use_microsoft_opentelemetry():lle.

Parametri Description Oletus
a365_use_s2s_endpoint Kun True on käytössä, käytetään service-to-service-päätepisteen polkua. False
a365_max_queue_size Eräkäsittelijän jonon maksimikoko. 2048
a365_scheduled_delay_ms Viive millisekunneissa vientierien välillä. 5000
a365_exporter_timeout_ms Vientitoiminnon aikakatkaisuaika (ms). 30000
a365_max_export_batch_size Suurin eräkoko vientitoiminnoille. 512

Kontekstin välittäminen

Havaittavuuden ylläpitämiseksi hajautetuissa Agent 365 -operaatioissa, välitä konteksti. Kun välität kontekstia agenttien ja palveluiden kautta, varmistat, että jäljitykset, lokit ja mittarit ovat asianmukaisesti korreloitu koko pyynnön elinkaaren ajan. Tämä korrelaatio on välttämätön täydelliselle ja tehokkaalle Microsoft Agent 365 -monitorointikokemukselle.

Baggage-tietojen määritteet

Käytä BaggageBuilder asettaaksesi kontekstuaalista tietoa, joka välittyy kaikkiin pyynnön spanien läpi. SDK toteuttaa SpanProcessor -toiminnon, joka kopioi kaikki ei-tyhjät baggage-merkinnät uusiin spaneihin ilman olemassa olevien attribuuttien ylikirjoittamista.

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

Täyttääksesi BaggageBuilder automaattisesti TurnContext perusteella, käytä populate-aputoimintoa microsoft-opentelemetry-paketissa. Tämä apufunktio poimii automaattisesti kutsujan, agentin, vuokraajan, kanavan ja keskustelun tiedot aktiviteetista.

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-väliohjelmisto

Jos agenttisi käyttää hosting-integraatiopakettia, rekisteröi baggage-väliohjelmisto, jotta baggage täytetään automaattisesti jokaiselle saapuvalle pyynnölle. Tämä vaihe poistaa tarpeen kutsua BaggageBuilder manuaalisesti jokaisessa aktiviteetin käsittelijässä.

Pythonissa rekisteröi baggage-väliohjelmisto ObservabilityHostingManager.configure():n kautta, ei suoraan adapterille.

from microsoft.opentelemetry.a365.hosting import ObservabilityHostingManager, ObservabilityHostingOptions

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

Middleware ohittaa baggage-määrityksen asynkronisille vastauksille (ContinueConversation tapahtumille) välttääkseen baggage-tietojen ylikirjoittamisen, jotka alkuperäinen pyyntö on jo asettanut.

Varmista, että data välittyy tuotteessa

Jotta voit tarkastella agentin telemetriaa Microsoft Purviewissa tai Microsoft Defenderissä, varmista että seuraavat vaatimukset täyttyvät:

Automaattinen instrumentointi

Microsoft OpenTelemetry -jakelu yhdistää standardi OpenTelemetry-putket Microsoftin kuratoidun instrumentoinnin kanssa. Jakelu voi kerätä sovellustelemetriaa, infrastruktuuritelemetriaa sekä agentti- tai generatiivinen tekoälytelemetriaa kielestä ja kokoonpanosta riippuen.

Luokka Mitä se kattaa
Signaaliputkistot Jäljet, mittarit ja lokit.
Resurssien tunnistus Palvelu-, isäntä-, pilvi- ja Azure-suorituksenaikainen konteksti (mikäli tuettu).
Infrastruktuurin instrumentointi HTTP, ASP.NET Core, Azure SDK, tietokanta-asiakkaat ja lokikehykset olivat tuettuja.
Generatiivisen tekoälyn instrumentointi OpenAI, Azure OpenAI, Semantic Kernel, LangChain, OpenAI Agents SDK ja Agent Framework olivat tuettuja.
Manuaaliset agentin toiminta-alueet Agentin kutsu, työkalujen suoritus, inferenssi ja tulostelemetria, missä tuettu.
Viejät ja prosessorit Azure Monitor, Microsoft Agent 365, OTLP, konsoliulostulo, span-prosessorit, lokiprosessorit ja metriikkalukijat.

Instrumentointikattavuus

Language Yleinen sovelluksen instrumentointi Yhteinen agentti ja generatiivinen tekoälyinstrumentointi
Python OpenTelemetryn resurssit, prosessorit, lukijat, lokitus, mittarit ja jäljitykset. Semantic Kernel, OpenAI Agents SDK, Agent Framework, LangChain, Microsoft Agent 365 baggage ja Microsoft Agent 365 -vaikutusalueet.
Node.js HTTP, Azure SDK, Azure-funktiot, MongoDB, MySQL, PostgreSQL, Redis, Bunyan ja Winston. OpenAI Agents SDK, LangChain, Microsoft Agent 365 baggage ja Microsoft Agent 365 -vaikutusalueet.
.NET ASP.NET Core, HttpClient, SQL Client, Azure SDK, resurssien tunnistus, mittarit ja lokit. Semantic Kernel, OpenAI ja Azure OpenAI, Agent Framework, Microsoft Agent 365 baggage ja Microsoft Agent 365 -vaikutusalueet.

Automaattinen instrumentointi kuuntelee telemetriasignaaleja, joita tuetut kirjastot ja kehykset lähettävät. Manuaalista instrumentointia käytetään, kun sovelluksen täytyy kuvata agenttikohtaisia toimintoja, kuten kutsun tekemistä, työkalun suorittamista, inferenssiä tai asynkronista tulosta.

Lisää mukautettuja OpenTelemetry-lähteitä, mittareita, prosessoreita tai lukijoita, kun sovelluksesi tuottaa telemetriaa, jota sisäänrakennetut instrumentoinnit eivät kata.

Tärkeää

Automaattinen instrumentointi täyttää vain tavalliset OpenTelemetry-attribuutit. Se ei sisällä kaikkia attribuutteja, joita Agent 365 vaatii. Sinun täytyy lisätä Microsoft-kohtaiset attribuutit BaggageBuilder kautta. Katso, mitkä attribuutit vaaditaan, kohdasta Tallenna vahvistusattribuutit.

Sisäänrakennetut instrumentointikirjastot

Automaattinen instrumentointi kuuntelee tuettujen kehysten lähettämää telemetriaa ja välittää sen Distron OpenTelemetry-putken kautta. Agenttiskenaarioissa määritä baggage-attribuutit, kuten vuokraaja-ID ja agentti-ID, ennen kuin instrumentoitu kehys luo spanit.

Sovelluskehys Python Node.js .NET
Semantic Kernel Tuettu Ei tueta Tuettu
OpenAI ja OpenAI Agents SDK Tuettu Tuettu Tuettu
Agent Framework Tuettu Ei tueta Tuettu
LangChain Tuettu Tuettu Ei luettelossa

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

Manuaalinen instrumentointi

Käytä manuaalista instrumentointia, kun automaattinen instrumentointi ei kuvaa agentin toimintaa riittävän yksityiskohtaisesti. Manuaalisten scopejen avulla sovellus voi kuvata yleisiä agenttitoimintoja yhdenmukaisesti eri ohjelmointikielissä.

Käyttöalue Käyttökohde
InvokeAgentScope Agenttikutsun aloittaminen ja päättyminen.
ExecuteToolScope Agentin tekemä työkalukutsu.
InferenceScope Tekoälymallin päättelyoperaatio.
OutputScope Tuotos, joka täytyy tallentaa sen jälkeen, kun alkuperäinen scope on jo päättynyt.

Käytä samoja pyynnön ja agentin identiteettiarvoja eri konteksteissa pyynnön aikana, jotta liittyvä telemetria voidaan korreloida.

Agentin kutsuminen

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."])

Työkalun suoritus

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)

Päättely

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"])

Tulos

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

Tuotedokumentaatiossa tulisi määritellä tuotekohtaiset validointivaatimukset näille laajuuksille.

Paikallisvalidaatio

Paikallinen validointi varmistaa, että sovellus tuottaa telemetriaa ennen kuin tuotekohtainen kohde validoidaan. Käytä konsolitulostusta tai paikallista OTLP-päätepistettä varmistaaksesi, että tracet, mittarit ja lokit luodaan.

Validoi paikallisella OTLP-päätepisteellä

Määritä Distro lähettämään telemetriaa paikalliseen kerääjään tai OTLP-yhteensopivaan päätepisteeseen.

export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
from microsoft.opentelemetry import use_microsoft_opentelemetry

use_microsoft_opentelemetry()

Validointi paikallisella tuloksella

Käytä paikallista tulosta, kun haluat varmistaa instrumentaation ennen telemetrian lähettämistä etäkohteeseen.

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.

Tarkastele paikallista tulosta spanien osalta odotetuista lähteistä, kuten HTTP-pyynnöistä, OpenAI- tai Azure OpenAI -kutsuista, agentin kutsulaajuuksista, työkalun suorituslaajuuksista tai päättelyalueista. Kohdekohtainen validointi kuuluu kyseisen kohteen tuotedokumentaatioon.

Todennuksen määrittäminen manuaalisesti

Kun käytät Agent 365 -vientikomponenttia, sinun on tarjottava mekanismi autentikointitunnisteen tarjoamiseen. Token-resolver toimii vientieräkohtaisesti käyttämällä agentti ID:tä ja tenant ID:tä aktiivisesta baggage-kontekstista. Distro tukee kahta lähestymistapaa.

Vinkki

Jos rakennat agentteja Microsoft 365 -agenttien SDK:n avulla, tutustu Agentin SDK:n havainnointiautentikoinnin asennusohjeisiin saadaksesi vaiheittaiset ohjeet OBO- ja S2S-tunnisteiden hankinnan konfigurointiin sekä agenttisille että ei-agenttisille agenteille.

Manuaalinen token-resolver

Käytä manuaalista token-resolveria, kun hankit tunnisteita Agent Framework -putken ulkopuolella, kun rakennat muita kuin Agent Framework -sovelluksia tai kun käytät service-to-service (S2S) -autentikointia (client credentials flow). Agentit voivat luoda tunnuksen itse, esimerkiksi käyttämällä Microsoft Authentication Librarya (MSAL) tai muuta tunnuksen hankintatapaa, mutta niiden on varmistettava, että tunnuksella on oikea observability-scope (api://9b975845-388f-4429-889e-eab1ef63949c/Agent365.Observability.OtelWrite).

Muistiinpano

Palvelusta palveluun (S2S) -autentikoinnissa on käytettävä manuaalista token-ratkaisinta. Agenttinen token cache tukee vain OBO-autentikointivirtoja.

Seuraavat esimerkit havainnollistavat OBO (on-behalf-of) token-ratkaisijan mallia — agentti hankkii käyttäjätunnuksen agentin tunnistautumiskäsittelijän kautta ja vaihtaa sen havaittavuuteen perustuvaan tokeniin. Palvelusta palveluun (S2S) -esimerkit sekä OBO:n ja S2S:n todennuksen vertailu löytyy osiosta Agentin SDK:n havainnointiautentikoinnin asennusohjeet.

Resolverin täytyy olla synkroninen. Nouda token async-aktiviteettikäsittelijästäsi (tai MSAL:n kautta) ja tallenna se ratkaisijan välimuistiin.

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

Agent Framework -sovellusten agentic-token-välimuisti

Agent Framework -sovelluksissa, jotka käyttävät OBO-todennusta, jakelu rekisteröi IExporterTokenCache<AgenticTokenStruct> automaattisesti DI:n kautta, jos et määritä omaa TokenResolveria. Agenttisi kutsuu RegisterObservability() suorituksenaikaisesti toimittaakseen tunnistetiedot, ja välimuisti hoitaa tunnusten hankinnan ja päivityksen.

Muistiinpano

Tämä lähestymistapa tukee vain OBO-tunnistautumistyönkulkuja. S2S-tunnistautumisessa käytä manuaalista token-resolveria sen sijaan.

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

Tallenna validointiattribuutit

Jotta tallennuksen validointi onnistuisi, agenttisi on toteutettava InvokeAgentScope, InferenceScope ja ExecuteToolScope. Jokainen vaikutusalue vastaa span-operaatiota kanonisessa rakenteessa:

SDK-laajuus Spanin operaatio Yleinen viitekoodi
InvokeAgentScope invoke_agent IA
ExecuteToolScope execute_tool ET
InferenceScope chat CH
OutputScope output_messages OM

Kaikki vaikutusaluekohtaiset vaadittujen ja valinnaisten attribuuttien listat – mukaan lukien attribuuttikohtaiset semantiikat, arvonvalintasuositukset ja tiedot siitä, mitkä attribuutit ovat haettavissa Microsoft Defenderin advanced hunting -toiminnolla – löytyvät kohdasta Agent 365:n havainnointiattribuutin viite. Koskee -sarake tunnistaa, mihin alueeseen kukin attribuutti kuuluu, ja Pakollinen-sarake erottaa pakolliset (M) valinnaisista (O) attribuuteista.

Havainnointeja sisältävien agenttien testaus

Kun havaittavuus on otettu käyttöön, varmista että telemetriaa kerätään:

  1. Siirry kohteeseen https://admin.cloud.microsoft/#/agents/all.
  2. Valitse agenttisi ja valitse sitten Toiminta.
  3. Varmista, että istunnot ja työkalukutsut näkyvät.

Esimerkkisovellukset ja edistyneet asetukset

Löydät toimivia esimerkkejä ja edistyneitä asetuksia kunkin kielen GitHub-repositorioista:

Vianmääritys

Tässä osiossa kuvataan yleisiä ongelmia Microsoft OpenTelemetry Distron toteutuksessa ja käytössä Agent 365:n kanssa.

Ongelma Description
Havainnointidata ei näy Telemetria ei ole näkyvissä, koska Agent 365 -vientitoiminto ei ole käytössä, määritys on puutteellinen tai tokenin resoluutio epäonnistuu.
Puuttuva vuokraaja-ID tai agentti-ID – spanit ohitetaan Spanit suodatetaan pois ennen vientiä, kun vaadittavat vuokraaja- tai agentti-identiteetti-attribuutit puuttuvat.
Token-resoluutiovirhe – vienti jätetty väliin tai ei valtuutusta Vienti jätetään väliin tai hylätään, kun token resolver ei palauta tokenia tai tapahtuu virheitä tokenin hankinnan aikana.
HTTP 401 Ei sallittu Pyynnöt saapuvat palveluun, mutta todennus epäonnistuu, koska token on virheellinen, vanhentunut tai väärälle yleisölle.
HTTP 403 Käyttö estetty Valtuutus epäonnistuu, koska vuokraajalla ei ole lisenssiä tai havainnointioikeudet puuttuvat.
HTTP 403 Estetty – agentti-ID ei vastaa Palvelu hylkää viennin, jos pyynnön agentti-ID ei täsmää token-valtuutetun agentin identiteetin kanssa.
HTTP 429- tai 5xx-virheet – tilapäiset virheet Tilapäinen rajoitus tai taustajärjestelmän epävakaus keskeyttää viennin ja saattaa edellyttää uudelleenyrityksiä tai eräasetusten säätämistä.
Viennin aikakatkaisu Vientitoiminnot ylittävät aikakatkaisurajat verkon viiveiden tai päätepisteen hitauden vuoksi.
Vienti onnistuu, mutta telemetriaa ei näy Defenderissä tai Purviewissa Datan vastaanotto onnistuu, mutta näkyvyys viivästyy tai estyy alavirran edellytysten ja skeemavaatimusten vuoksi.

Vinkki

Agent 365:n vianmääritysopas sisältää yleisluontoisia vianmääritykseen liittyviä suosituksia, parhaita käytäntöjä sekä linkkejä vianmääritykseen liittyvään sisältöön Agent 365:n kehityksen elinkaaren kaikissa vaiheissa.

Havainnointidata ei näy

Oireet:

  • Agentti on käynnissä
  • Telemetria puuttuu hallintokeskuksesta
  • Agentin toimintaa ei näy

Juurisyy:

  • Agent 365:n vienti ei ole otettu käyttöön
  • Määritysvirheet
  • Token resolverin ongelmat

Ratkaisut: Kokeile seuraavia vaiheita ongelman ratkaisemiseksi:

  • Tarkista, että Agent 365 -vienti on käytössä

    Agent 365 exportteri täytyy ottaa käyttöön erikseen. Jos et määritä sitä, distro saattaa siirtyä käyttämään konsoliexporteria tai olla viemättä mitään. Ota se käyttöön koodissa:

    from microsoft.opentelemetry import use_microsoft_opentelemetry
    
    use_microsoft_opentelemetry(
        enable_a365=True,
        a365_enable_observability_exporter=True,
        a365_token_resolver=my_token_resolver,
    )
    

    Tai aseta ympäristömuuttuja:

    export ENABLE_A365_OBSERVABILITY_EXPORTER=true
    

    Muistiinpano

    ENABLE_A365_OBSERVABILITY_EXPORTER on toissijainen kytkin, joka aktivoituu vain, kun enable_a365=True on asetettu koodissa. Voit myös ohjata sitä a365_enable_observability_exporter-avainsana-argumentilla.


  • Tarkista token-ratkaisijan konfiguraatio

    Exportteri vaatii kelvollisen token-ratkaisijan, joka palauttaa Bearer-tokenin jokaista vientipyyntöä kohden. Jos token-ratkaisijaa ei ole tai se palauttaa null, vienti jätetään huomiotta ilman ilmoitusta.

  • Ota konsolivienti käyttöön ja tarkista telemetria paikallisesti

    Lisää konsoli-exportteri varmistaaksesi, että telemetriaa generoidaan ennen kuin se saavuttaa Agent 365:n päätepisteen.

    use_microsoft_opentelemetry(enable_a365=True, enable_console=True)
    

  • Ota käyttöön yksityiskohtainen lokiin kirjaaminen

    import logging
    
    logging.basicConfig(level=logging.DEBUG)
    

  • Tarkista lokit vientivirheiden varalta

    Käytä az webapp log tail-komentoa hakeaksesi lokeista havaittavuuteen liittyviä virheitä:

    az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
    

Puuttuva vuokraaja-ID tai agentti-ID — spanit sivuutetaan

Oireet: Järjestelmä pudottaa huomaamattomasti spanit eikä koskaan vie niitä. Joillakin alustoilla kirjataan ohitettujen spanien määrä tai viesti, kuten No spans with tenant/agent identity found. Toiset pudottavat ne ilman kirjaamista.

Ratkaisu:

  • Ennen vientiä distro jakaa spanit vuokralaisen ja agentin identiteetin mukaan. Spanit, joilla ei ole vuokralaisen tunnusta tai agentin tunnusta, pudotetaan eikä niitä koskaan lähetetä palveluun.
  • Varmista, että BaggageBuilder on asetettu vuokralaisen ja agentin tunnuksella ennen spanien luomista. Nämä arvot siirtyvät OpenTelemetry-kontekstin mukana ja liitetään kaikkiin baggage-kontekstin sisällä luotuihin span-objekteihin. Katso alustakohtaista API:a kohdasta Baggage attributes.
  • Jos käytät Baggage Middlewarea tai Turn-kontekstiapua hosting-integraatiopaketista, varmista, että aktiviteetilla TurnContext on kelvollinen vastaanottaja agentin tunnisteella.

Token-resoluutiovirhe — vienti ohitettu tai valtuuttamaton

Oireet: Token resolver palauttaa null tai heittää virheen. Alustasta riippuen vienti joko ohitetaan kokonaan tai epäonnistuu HTTP 401 -virheellä.

Ratkaisu:

  • Token resolver vaaditaan. Jos se puuttuu, exportteri antaa virheilmoituksen käynnistyksessä. Varmista, että token-ratkaisija on käytössä ja palauttaa kelvollisen Bearer-tokenin.
  • Varmista, että oikea tenant ID ja agentti-ID välitetään BaggageBuilder:lle, koska nämä arvot välitetään token resolverille.
  • Azure-isännöidyille agenteille varmista, että Managed Identityllä on tarvittavat API-oikeudet havaittavuuden vastuualuetta varten.
  • Agent Framework -hosting-pakettia käyttävissä .NET-sovelluksissa tokenien vaihto hoidetaan automaattisesti DI:n kautta. Mikäli tokeneita puuttuu, varmista että Microsoft.Agents.A365.Observability.Hosting on asennettu ja rekisteröity.

HTTP 401 Ei sallittu

Oireet: Vienti epäonnistuu HTTP 401 -virheen vuoksi. Vientiohjelma ei tee uudelleenyritystä tämän virheen sattuessa.

Ratkaisu:

  • Varmista, että tokenin audience vastaa observability endpointin scopea.
  • Tarkista, ettei token resolver palauta edustajakäyttäjä-tokenia, väärälle audience-arvolle tarkoitettua tokenia tai vanhentunutta tokenia.

HTTP 403 Käyttö estetty

Oireet: Vienti epäonnistuu HTTP 403 -virheen vuoksi. Vientiohjelma ei tee uudelleenyritystä tämän virheen sattuessa.

Juurisyy: HTTP 403 -virhe voi johtua useista eri syistä. Tarkista seuraavat ratkaisut järjestyksessä.

Ratkaisu:

  • Puuttuva lisenssi — Varmista, että vuokraajallasi on jokin seuraavista lisensseistä määritettynä Microsoft 365 -hallintakeskuksessa:

    • Test - Microsoft 365 E7
    • Microsoft 365 E7
    • Microsoft Agent 365 Frontier
  • Puuttuva Agent365.Observability.OtelWrite-lupa: Myönnä lupa identiteetillesi (Managed Identity tai sovelluksen rekisteröinti). Ilman sitä telemetrian vienti epäonnistuu HTTP 403 -virheellä.

Myönnä oikeus

Käytä jompaakumpaa näistä vaihtoehdoista:

  • Agent 365 CLI

    Vaatii Global Administrator -käyttäjätilin. Suorita agenttiprojektihakemistosta, joka sisältää a365.config.json, tai käytä --agent-name.

    a365 setup permissions bot
    

    Tai ilman konfiguraatiotiedostoa:

    a365 setup permissions bot --agent-name "<agent-name>"
    
  • Entra-portaali

    Konfiguraatiotiedostoja ei tarvita; vaatii Global Administratorin pääsyn blueprint-sovelluksen rekisteröintiin.

    1. Siirry Entra-portaali>Sovellusten rekisteröinnit> -osioon ja valitse Blueprint-sovelluksesi.
    2. Siirry API-oikeudet>Lisää käyttöoikeus>Organisaation käytössä olevat API:t> etsi 9b975845-388f-4429-889e-eab1ef63949c.
    3. Valitse Delegoidut oikeudet>, tarkista Agent365.Observability.OtelWrite>Lisää käyttöoikeudet.
    4. Toista vaiheet 2–3, tällä kertaa valitse Sovelluksen käyttöoikeudet>, valitse Agent365.Observability.OtelWrite>Lisää käyttöoikeudet.
    5. Klikkaa Myönnä ylläpitäjän suostumus ja vahvista.

    Sekä Agent365.Observability.OtelWrite (Delegoitu) että Agent365.Observability.OtelWrite (Sovellus) näyttävät Granted tilan.

HTTP 403 Kielletty — agentin ID ei täsmää

Oireet: Vienti epäonnistuu HTTP 403 -virheellä ja palvelinviestillä, joka muistuttaa 403 Forbidden ja sisältää agent-ID-mismatch epäonnistumisia Agent 365:n jälkien päätepisteiden kutsumisessa.

Syy: Tämä virhe tapahtuu, kun käytät blueprintin asiakas-ID:täagentin instanssin asiakas-ID:n sijasta, kun asetat agentin tiedot. Agentin ID eksportin URL:ssa ei täsmää tokenin hyväksymän identiteetin kanssa, joten traces-päätepiste hylkää pyynnön.

Ratkaisu:

  • Varmista, että tenant ID on lisätty Agent 365:n sallittujen vuokraajien listalle.
  • Aseta agentin tiedot agentin instanssin asiakas-ID :llä (ei blueprint-asiakas-ID:llä).
  • Tarkista generoitu vienti-URL – se kirjataan, jos otat loggerin käyttöön. Vahvista, että agentti-ID URL-osoitteessa vastaa agentin instanssin client ID:tä.
  • Ota diagnostiikkalokit käyttöön SDK-kohtaisesti, katso Paikallinen validointi.

HTTP 429- tai 5xx-virheet – tilapäiset virheet

Oireet: Vienti epäonnistuu ohimenevällä HTTP-tilakoodilla, kuten 429 tai 5xx.

Ratkaisu:

  • Nämä virheet ovat yleensä ohimeneviä ja ratkeavat itsestään. Python- ja JavaScript-distrot yrittävät automaattisesti uudelleen HTTP 408-, 429- ja 5xx-tilakoodeilla. .NET-distro ei yritä uudelleen automaattisesti.
  • Jos virheet jatkuvat, tarkista palvelun tilannepaneeli.
  • Harkitse vientitiheyden vähentämistä lisäämällä aikataulutettua viivettä erien välillä tai kasvattamalla maksimivientierän kokoa. Pythonille ja JavaScriptille käytä exporterOptionsissa tai a365_*:ssa dokumentoituja parametreja GitHub-repositorioissa. .NET-sovelluksissa käytä o.Agent365.Exporter.ScheduledDelayMilliseconds ja o.Agent365.Exporter.MaxExportBatchSize.

Viennin aikakatkaisu

Oireet: Vientiyritykset menevät aikakatkaisuun.

Ratkaisu:

  • Tarkista verkkoyhteys observability-endpointiin.

  • HTTP-pyyntöjen oletusaikakatkaisu on 30 sekuntia kaikilla alustoilla. Jos aikakatkaisuja esiintyy toistuvasti, lisää timeout-arvoa exporter-asetuksissa:

    use_microsoft_opentelemetry(
        enable_a365=True,
        a365_token_resolver=my_token_resolver,
        # No direct timeout kwarg — set via environment variable or exporterOptions if supported
    )
    

    Katso Python-säilöstä kaikki a365_*-vaihtoehdot.


Vienti onnistuu, mutta telemetriaa ei näy Defenderissä tai Purviewissa

Oireet: Lokitiedostot osoittavat onnistuneen viennin (HTTP 200), mutta telemetria ei ole näkyvissä Microsoft Defenderissä tai Microsoft Purview'ssa.

Ratkaisu:

  • Varmista, että täytät vientilokien tarkastelun edellytykset:
  • Telemetrian päivittyminen voi kestää useita minuutteja onnistuneen viennin jälkeen. Odota ennen kuin tutkit asiaa tarkemmin.
  • Varmista, että spanit sisältävät päteviä microsoft.tenant.id ja gen_ai.agent.id attribuutteja. Puuttuvat identiteettiattribuutit aiheuttavat spanien poistamisen palvelinpuolelta, vaikka HTTP-vienti palauttaisi 200.