SDK Observabilitas

Penting

Untuk mengaktifkan observabilitas di Agent 365, gunakan Microsoft OpenTelemetry Distro. Distribusi ini menyediakan SDK observabilitas tunggal di seluruh Microsoft, mendukung Agent 365, Microsoft Foundry, Azure Monitor, dan banyak lagi. Pendekatan yang ada seperti dijelaskan dalam artikel ini tetap berfungsi tanpa perubahan yang memutus kompatibilitas. Untuk panduan migrasi berdasarkan bahasa, lihat panduan berikut.

Catatan

Observabilitas adalah salah satu tingkat kemampuan bertahap dalam Memulai pengembangan Agent 365 dan berlaku untuk semua jenis agen.

Untuk berpartisipasi dalam ekosistem Agent 365, integrasikan kemampuan Observabilitas Agent 365 ke dalam agen Anda. Observabilitas Agent 365 didasarkan pada OpenTelemetry (OTel) dan menyediakan kerangka kerja terpadu untuk mengambil telemetri secara konsisten dan aman di semua platform agen. Dengan mengimplementasikan komponen yang diperlukan ini, Anda memungkinkan admin TI memantau aktivitas agen Anda di Microsoft admin center dan memungkinkan tim keamanan menggunakan Defender dan Purview untuk kepatuhan dan deteksi ancaman.

Manfaat utama

  • Visibilitas menyeluruh dari awal hingga akhir: Tangkap telemetri komprehensif untuk setiap eksekusi agen, termasuk sesi, pemanggilan alat, dan pengecualian, sehingga memberikan ketertelusuran penuh di seluruh platform.
  • Kemampuan keamanan dan kepatuhan: Mengumpankan log audit terpadu ke Defender dan Purview, memungkinkan skenario keamanan tingkat lanjut dan pelaporan kepatuhan untuk agen Anda.
  • Fleksibilitas lintas platform: Manfaatkan standar OTel dan dukung berbagai runtime serta platform seperti Copilot Studio, Foundry, dan kerangka kerja agen masa depan.
  • Efisiensi operasional untuk admin: Sediakan observabilitas terpusat di pusat admin Microsoft 365, sehingga waktu pemecahan masalah berkurang dan tata kelola meningkat dengan kontrol akses berbasis peran untuk tim TI yang mengelola agen Anda.

Agen yang didukung

Jenis agen berikut ini mendukung observabilitas Agent 365:

Penginstalan

Gunakan perintah-perintah ini untuk menginstal modul observabilitas untuk bahasa yang didukung oleh Agent 365.

Instal paket observabilitas inti dan runtime. Semua agen yang menggunakan Observabilitas Agent 365 memerlukan paket-paket ini.

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

Jika agen Anda menggunakan paket Microsoft/agents-hosting, instal paket integrasi hosting. Paket ini menyediakan middleware yang secara otomatis mengisi atribut baggage dan ruang lingkup dari TurnContext, serta mencakup caching token untuk eksportir observabilitas.

pip install microsoft-agents-a365-observability-hosting

Jika agen Anda menggunakan salah satu framework AI yang didukung, pasang ekstensi auto-instrumentasi yang sesuai untuk secara otomatis menangkap telemetri tanpa kode instrumentasi manual. Untuk detail konfigurasi, lihat Auto-instrumentation.

# 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

Konfigurasi

Gunakan pengaturan berikut untuk mengaktifkan dan menyesuaikan Observabilitas Agent 365 untuk agen Anda.

Atur ENABLE_A365_OBSERVABILITY_EXPORTER variabel lingkungan ke true untuk observabilitas. Pengaturan ini mengekspor log ke layanan dan mengharuskan token_resolver disediakan. Jika tidak, eksportir konsol digunakan.

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

Token resolver dikecualikan dari logging ke konsol.

Anda dapat menyesuaikan perilaku eksportir dengan meneruskan sebuah instans Agent365ExporterOptions ke exporter_options. Ketika exporter_options disediakan, itu lebih diutamakan daripada parameter token_resolver dan cluster_category.

from microsoft_agents_a365.observability.core import configure, Agent365ExporterOptions

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

Tabel berikut menjelaskan parameter opsional untuk configure().

Parameter Deskripsi Default
logger_name Nama logger Python yang digunakan untuk debugging dan output log konsol. microsoft_agents_a365.observability.core
exporter_options Sebuah instans Agent365ExporterOptions yang mengonfigurasi pemecah token dan kategori kluster bersama-sama. None
suppress_invoke_agent_input Saat True, menekan pesan input pada InvokeAgent rentang. False

Tabel berikut menjelaskan properti opsional untuk Agent365ExporterOptions.

Properti Deskripsi Default
use_s2s_endpoint Ketika True, menggunakan jalur titik akhir layanan ke layanan. False
max_queue_size Ukuran maksimum antrean untuk prosesor batch. 2048
scheduled_delay_ms Penundaan dalam milidetik antara batch ekspor. 5000
exporter_timeout_ms Batas waktu dalam milidetik untuk operasi ekspor. 30000
max_export_batch_size Ukuran batch maksimum untuk operasi ekspor. 512

Atribut bagasi

Gunakan BaggageBuilder untuk menetapkan informasi kontekstual yang mengalir melalui semua rentang dalam permintaan. SDK menerapkan SpanProcessor yang menyalin semua entri bagasi yang tidak kosong ke setiap rentang yang baru dimulai tanpa menimpa atribut yang sudah ada.

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

Untuk mengisi BaggageBuilder secara otomatis dari TurnContext, gunakan helper populate dalam paket microsoft-agents-a365-observability-hosting. Fungsi helper ini secara otomatis mengekstrak detail pemanggil, agen, penyewa, saluran, dan percakapan dari aktivitas.

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

Middleware bagasi

Jika agen Anda menggunakan paket integrasi hosting, daftarkan middleware bagasi untuk secara otomatis mengisi bagasi pada setiap permintaan yang masuk. Langkah ini menghilangkan kebutuhan untuk memanggil BaggageBuilder secara manual di setiap handler aktivitas.

Daftarkan BaggageMiddleware pada set middleware adaptor. Ini secara otomatis mengekstrak detail pemanggil, agen, penyewa, saluran, dan percakapan dari setiap TurnContext yang masuk, serta mengemas permintaan dalam lingkup baggage.

from microsoft_agents_a365.observability.hosting import BaggageMiddleware

adapter.use(BaggageMiddleware())

Sebagai alternatif, gunakan ObservabilityHostingManager untuk mengonfigurasi middleware Baggage bersama dengan fitur hosting lainnya:

from microsoft_agents_a365.observability.hosting import ObservabilityHostingManager, ObservabilityHostingOptions

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

Middleware melewatkan pengaturan bagasi untuk balasan asinkron (peristiwa ContinueConversation) untuk menghindari penimpaan bagasi yang sudah ditetapkan oleh permintaan asal.

Penyelesai token

Saat Anda menggunakan pengekspor Agent 365, Anda harus menyediakan fungsi penyelesai token yang mengembalikan token autentikasi. Saat Anda menggunakan Agent 365 Observability SDK dengan kerangka kerja Agent Hosting, Anda dapat menghasilkan token dengan memanfaatkan TurnContext yang berasal dari aktivitas agen.

Cuplikan berikut menunjukkan cara menghasilkan token dengan memanfaatkan microsoft_agents.hosting.core SDK. Token autentikasi yang dihasilkan di sini digunakan untuk mengekspor span ke layanan penyerapan A365. Agen dapat menghasilkan token sendiri, misalnya dengan menggunakan Pustaka Autentikasi Microsoft (MSAL), tetapi agen ini perlu memastikan token memiliki cakupan observabilitas.

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

Untuk agen yang dibuat dengan A365 CLI yang menggunakan rekan tim AI dan paket Microsoft Agent 365 Observability Hosting Library, gunakan AgenticTokenCache untuk menangani penyimpanan cache token secara otomatis. Daftarkan token sekali untuk setiap agen dan penyewa melalui penangan aktivitas, dan teruskan cache.get_observability_token sebagai token_resolver dalam konfigurasi observabilitas Anda.

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

Instrumentasi otomatis

Instrumentasi otomatis secara otomatis mendengarkan sinyal telemetri dari kerangka kerja agentik (SDK) yang ada untuk pelacakan dan meneruskannya ke layanan observabilitas Agent 365. Fitur ini menghilangkan kebutuhan bagi pengembang untuk menulis kode pemantauan secara manual, menyederhanakan penyiapan, dan memastikan pelacakan performa yang konsisten.

Penting

Instrumentasi otomatis hanya mengisi atribut OTel standar. Anda harus menambahkan atribut khusus Microsoft melalui BaggageBuilder. Untuk melihat atribut mana yang hilang, validasi output span konsol Anda terhadap log penyimpanan untuk set diff.

Beberapa SDK dan platform mendukung instrumentasi otomatis:

Platform SDK/Kerangka Kerja yang Didukung
.NET Kernel Semantik, OpenAI, Agent Framework
Python Kernel Semantik, OpenAI, Agent Framework, LangChain
Node.js OpenAI, LangChain

Catatan

Dukungan untuk instrumentasi otomatis bervariasi menurut platform dan implementasi SDK.

Kernel Semantik

Instrumentasi otomatis memerlukan penggunaan baggage builder. Atur ID agen dan ID penyewa dengan menggunakan BaggageBuilder.

Instal paket.

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

Konfigurasikan observabilitas.

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

Instrumentasi otomatis memerlukan penggunaan baggage builder. Atur ID agen dan ID penyewa dengan menggunakan BaggageBuilder.

Instal paket.

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

Konfigurasikan observabilitas.

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

Instrumentasi otomatis memerlukan penggunaan baggage builder. Atur ID agen dan ID penyewa dengan menggunakan BaggageBuilder.

Instal paket.

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

Konfigurasikan observabilitas.

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

Kerangka Kerja LangChain

Instrumentasi otomatis membutuhkan penggunaan baggage builder. Atur ID agen dan ID penyewa dengan menggunakan BaggageBuilder.

Instal paket.

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

Konfigurasikan observabilitas.

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

Instrumentasi Manual

Gunakan Agent 365 Observability SDK untuk memahami cara kerja internal agen. SDK ini menyediakan cakupan yang dapat Anda mulai: InvokeAgentScope, ExecuteToolScope, InferenceScope, dan OutputScope.

Pemanggilan agen

Gunakan cakupan ini di awal proses agen Anda. Dengan menggunakan cakupan pemanggilan agen, Anda dapat mengambil properti seperti agen saat ini yang dipanggil, data pengguna agen, dan lainnya.

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

Eksekusi alat

Contoh berikut menunjukkan cara menambahkan pelacakan observabilitas ke eksekusi alat agen Anda. Pelacakan ini mengambil telemetri untuk tujuan pemantauan dan audit.

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)

Inferensi

Contoh berikut menunjukkan cara menginstrumentasikan panggilan inferensi model AI dengan pelacakan observabilitas untuk mengambil penggunaan token, detail model, dan metadata respons.

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)

Output

Gunakan cakupan ini untuk skenario asinkron di mana InvokeAgentScope, ExecuteToolScope, atau InferenceScope tidak dapat mengambil data output secara sinkron. Mulai OutputScope sebagai rentang turunan untuk merekam pesan ouput akhir setelah cakupan induk selesai.

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

Validasi secara lokal

Untuk memverifikasi bahwa Anda berhasil terintegrasi dengan SDK observabilitas, periksa log konsol yang dihasilkan oleh agen Anda dan log dari SDK observabilitas.

Atur variabel lingkungan ENABLE_A365_OBSERVABILITY_EXPORTER ke false. Pengaturan ini mengekspor span (jejak) ke konsol.

Untuk menyelidiki kegagalan ekspor, aktifkan pengelogan verbose dengan mengatur ENABLE_A365_OBSERVABILITY_EXPORTER ke true dan mengonfigurasi pengelogan debug di awal aplikasi Anda:

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)

Pesan log kunci:

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.

Melihat log yang diekspor

Untuk melihat telemetri agen di Microsoft Purview atau Microsoft Defender, pastikan persyaratan berikut terpenuhi:

Validasi untuk publikasi di toko

Penting

Untuk validasi toko yang sukses, agen Anda harus mengimplementasikan cakupan InvokeAgentScope, InferenceScope, dan ExecuteToolScope. Ketiga cakupan ini diperlukan untuk publikasi di toko.

Sebelum menerbitkan, gunakan log konsol untuk memvalidasi integrasi observabilitas Anda untuk agen dengan mengimplementasikan cakupan invoke agent, execute tool, inference, dan output yang diperlukan. Kemudian bandingkan log agen Anda dengan daftar atribut berikut untuk memastikan semua atribut yang diperlukan tersedia. Catat atribut pada setiap cakupan atau melalui baggage builder, dan sertakan atribut opsional sesuai pertimbangan Anda.

Untuk informasi selengkapnya tentang persyaratan penerbitan toko, lihat pedoman validasi toko.

InvokeAgentScope atribut

Daftar berikut ini merangkum atribut telemetri wajib dan opsional yang direkam saat Anda memulai 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 atribut

Daftar berikut ini merangkum atribut telemetri wajib dan opsional yang direkam saat Anda memulai 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 atribut

Daftar berikut ini merangkum atribut telemetri wajib dan opsional yang direkam saat Anda memulai 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 atribut

Daftar berikut ini merangkum atribut telemetri wajib dan opsional yang direkam saat Anda memulai OutputScope. Gunakan cakupan ini untuk skenario asinkron di mana cakupan induk tidak dapat mengambil data output secara sinkron.

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

Menguji agen dengan observabilitas

Setelah Anda menerapkan observabilitas di agen Anda, uji untuk memastikan bahwa agen tersebut mengambil telemetri dengan benar. Ikuti panduan pengujian untuk menyiapkan lingkungan Anda. Kemudian, fokuskan terutama pada bagian Lihat log observabilitas untuk memvalidasi bahwa implementasi observabilitas Anda berfungsi seperti yang diharapkan.

Verifikasi:

  • Buka: https://admin.cloud.microsoft/#/agents/all
  • Pilih agen Anda > Aktivitas
  • Anda melihat sesi dan panggilan alat

Pemecahan masalah

Bagian ini menjelaskan masalah umum saat menerapkan dan menggunakan observabilitas.

Masalah Deskripsi
Data observabilitas tidak muncul Tidak ada telemetri yang terlihat karena ekspor tidak diaktifkan, konfigurasi salah, atau resolusi token gagal.
ID penyewa atau ID agen tidak ada - rentang dilewati Span dibuang sebelum diekspor ketika atribut identitas yang diperlukan untuk partisi hilang.
Kegagalan resolusi token - ekspor dilewati atau tidak diizinkan Permintaan ekspor gagal atau dilewatkan saat resolver tidak mengembalikan token atau mengalami pengecualian.
HTTP 401 Tidak Sah Autentikasi berhasil secara sintaksis tetapi token tidak valid untuk penyerapan karena cakupan, jenis, atau kedaluwarsa.
HTTP 403 Forbidden Akses ditolak karena kesenjangan lisensi penyewa atau izin observabilitas yang hilang.
HTTP 403 Forbidden - Ketidakcocokan ID Agen Permintaan ditolak ketika identitas agen di URL tidak cocok dengan identitas yang diwakili oleh token.
Kesalahan HTTP 429 atau 5xx - Kesalahan sementara Pembatasan sementara atau kegagalan sisi layanan dapat menyebabkan ekspor terhenti dan mungkin memerlukan penyesuaian percobaan ulang.
Batas waktu ekspor Batch telemetri melebihi jendela batas waktu yang dikonfigurasi karena latensi jaringan atau responsivitas titik akhir.
Ekspor berhasil tetapi telemetri tidak muncul di Defender atau Purview Penyerapan selesai, tetapi visibilitas hilir tertunda atau diblokir oleh prasyarat produk.

Kiat

Panduan Pemecahan Masalah Agent 365 berisi rekomendasi pemecahan masalah tingkat tinggi, praktik terbaik, dan tautan ke konten pemecahan masalah untuk setiap bagian dari siklus hidup pengembangan Agent 365.

Data observabilitas tidak muncul

Gejala:

  • Agen sedang berjalan
  • Tidak ada telemetri di pusat admin
  • Tidak dapat melihat aktivitas agen

Akar penyebab:

  • Observabilitas tidak diaktifkan
  • Kesalahan konfigurasi
  • Masalah pada token resolver

Solusi: Coba langkah-langkah berikut untuk menyelesaikan masalah:

  • Verifikasi bahwa exporter observabilitas diaktifkan

    Anda harus mengaktifkan eksportir Agent 365 secara eksplisit. Jika dinonaktifkan, SDK akan kembali menggunakan pengekspor konsol dan telemetri tidak dikirim ke layanan. Untuk detail konigurasi, lihat Konfigurasi.

  • Periksa konfigurasi token resolver

    Eksportir memerlukan token resolver yang valid yang mengembalikan token pembawa untuk setiap permintaan ekspor. Jika token resolver tidak ada atau mengembalikan null, ekspor akan dilewati secara diam-diam. Pastikan kode Anda mengimplementasikan penyelesai token dengan benar. Untuk informasi lebih lanjut, lihat Penyelesai token.

  • Periksa log untuk kesalahan

    Aktifkan pengelogan verbose dan gunakan perintah az webapp log tail untuk mencari kesalahan terkait observabilitas di log. Untuk detail tentang cara mengaktifkan pengelogan di setiap platform, lihat Validasi secara lokal.

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

    Pastikan telemetri dihasilkan dan diekspor sesuai harapan.

    • Tambahkan pengekspor konsol dan periksa apakah telemetri dihasilkan secara lokal. Untuk detail tentang cara menggunakan pengekspor konsol dan memvalidasi output, lihat Validasi secara lokal.

ID penyewa atau ID agen hilang — rentang diabaikan

Gejala: Sistem secara diam-diam mengabaikan rentang dan tidak pernah mengekspornya. Beberapa SDK mencatat jumlah span yang dilewati atau menampilkan pesan seperti "Tidak ada span dengan identitas penyewa/agen." SDK lain membuangnya tanpa mencatat di log.

Resolution:

  • Sebelum diekspor, SDK membagi span berdasarkan identitas penyewa dan agen. Sistem menghilangkan span yang tidak memiliki ID penyewa atau ID agen dan tidak pernah mengirimkannya ke layanan.
  • Pastikan BaggageBuilder telah disiapkan dengan ID penyewa dan ID agen sebelum membuat rentang. Nilai ini diteruskan melalui konteks OpenTelemetry dan melekat pada semua rentang yang dibuat dalam cakupan bagasi. Untuk API khusus platform, lihat Atribut bagasi.
  • Pastikan aktivitas TurnContext memiliki penerima yang valid dengan identitas agen jika Anda menggunakan middleware baggage atau pembantu konteks turn dari paket integrasi hosting untuk mengisi ID-ID tersebut.

Kegagalan resolusi token — ekspor dilewati atau tidak diizinkan

Gejala: Token resolver mengembalikan null atau melempar kesalahan. Bergantung pada SDK, ekspor dapat dilewati sepenuhnya atau permintaan dikirim tanpa header otorisasi dan gagal dengan HTTP 401.

Resolution:

  • Penyelesai token diperlukan saat inisialisasi. Jika tidak tersedia, eksportir melempar kesalahan saat memulai. Verifikasi bahwa token resolver telah disediakan dan mengembalikan token pembawa yang valid.
  • Pastikan ID penyewa dan ID agen yang benar digunakan untuk BaggageBuilder, karena nilai-nilai ini akan diteruskan ke penyelesai token.
  • Untuk agen yang di-host di Azure, pastikan Identitas Terkelola memiliki izin API yang diperlukan untuk cakupan observabilitas.

HTTP 401 Tidak Sah

Gejala: Ekspor gagal dengan HTTP 401. Eksportir tidak mencoba ulang kesalahan ini.

Resolution:

  • Verifikasi bahwa audiens token sesuai dengan cakupan titik akhir observabilitas.
  • Periksa apakah token resolver tidak mengembalikan token pengguna delegasi, token untuk audiens yang salah, atau token kedaluwarsa.

Pelarangan HTTP 403

Gejala: Ekspor gagal dengan HTTP 403. Eksportir tidak mencoba ulang kesalahan ini.

Penyebab utama: Kesalahan HTTP 403 dapat memiliki berbagai penyebab. Periksa resolusi berikut secara berurutan.

Resolution:

  • Lisensi hilang — Verifikasi bahwa penyewa Anda memiliki salah satu lisensi berikut yang ditetapkan di Pusat admin Microsoft 365:

    • Uji - Microsoft 365 E7
    • Microsoft 365 E7
    • Microsoft Agent 365 Frontier
  • Izin Agent365.Observability.OtelWrite hilang — Jika Anda baru saja memperbarui paket observability Anda, Anda harus memberikan izin ini. Lihat catatan penting di bagian berikutnya.

Penting

Agen yang sudah ada yang memutakhirkan ke versi paket ini memerlukan langkah tambahan

Langkah ini hanya berlaku jika Anda memutakhirkan agen yang ada. Instalasi agen baru tidak memerlukan langkah ini. Jika Anda memutakhirkan ke versi paket berikutnya atau yang lebih baru, Anda harus memberikan izin Agent365.Observability.OtelWrite baru ke identitas Anda (Identitas Terkelola atau pendaftaran aplikasi). Tanpa izin ini, ekspor telemetri gagal dengan HTTP 403.

Platform Versi minimum yang memerlukan langkah ini
.NET 0.3-beta
Node.js 0.2.0-preview.1
Python 0.3.0

Memberikan izin dapat dilakukan dengan menggunakan salah satu opsi berikut.

Opsi A — Agent 365 CLI (memerlukan akun Administrator Global; jalankan dari direktori proyek agent yang berisi a365.config.json, atau gunakan --agent-name)

a365 setup permissions bot

Atau, tanpa file konfigurasi:

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

Perintah ini memberikan semua izin yang belum diberikan pada blueprint, termasuk cakupan Observability.

Opsi B — Portal Entra (file config tidak diperlukan; memerlukan akses Administrator Global ke pendaftaran aplikasi blueprint)

  1. Buka portal Entra>Pendaftaran Aplikasi> pilih aplikasi Blueprint Anda.
  2. Buka Izin API>Tambah izin>API yang digunakan organisasi saya> cari 9b975845-388f-4429-889e-eab1ef63949c.
  3. Pilih Izin yang didelegasikan> periksa Agent365.Observability.OtelWrite>Tambah izin.
  4. Ulangi langkah 2–3, kali ini pilih Izin aplikasi>, centang Agent365.Observability.OtelWrite>Tambahkan izin.
  5. Klik Berikan persetujuan admin dan konfirmasi.

Baik Agent365.Observability.OtelWrite (Didelegasikan) maupun Agent365.Observability.OtelWrite (Aplikasi) harus menunjukkan status Granted.

HTTP 403 Forbidden — Ketidakcocokan ID Agen

Gejala: Ekspor gagal dengan HTTP 403 dan pesan server yang mirip dengan 403 Forbidden dengan agent-ID-mismatch gagal memanggil titik akhir pelacakan Agent 365.

Akar penyebab: Kesalahan ini terjadi ketika Anda menggunakan ID klien blueprint bukan ID klien instans agen saat mengatur detail agen. ID agen pada URL ekspor tidak sesuai dengan identitas yang diotorisasi oleh token, sehingga titik akhir pelacakan menolak permintaan tersebut.

Resolution:

  • Verifikasi apakah ID penyewa telah ditambahkan ke daftar penyewa yang diizinkan Agent 365.
  • Atur detail agen dengan ID klien instans agen (bukan ID klien blueprint).
  • Verifikasi URL ekspor yang dihasilkan – URL tersebut dicatat jika Anda mengaktifkan logger. Pastikan ID agen pada URL sesuai dengan ID klien instans agen.
  • Untuk mengaktifkan pembuatan log diagnostik per SDK, lihat Validasi secara lokal.

Kesalahan HTTP 429 atau 5xx - Kesalahan sementara

Gejala: Ekspor gagal dengan kode status HTTP sementara seperti 429 atau 5xx.

Resolution:

  • Kesalahan ini biasanya bersifat sementara dan akan teratasi sendiri. SDK Python dan JavaScript secara otomatis melakukan percobaan ulang pada kode status HTTP 408, 429, dan 5xx hingga tiga kali dengan backoff eksponensial. SDK .NET tidak melakukan percobaan ulang secara otomatis.
  • Jika kesalahan berlanjut, periksa dasbor kesehatan layanan.
  • Pertimbangkan untuk mengurangi frekuensi ekspor dengan memperpanjang waktu tunda terjadwal antar-batch atau memperbesar ukuran batch ekspor maksimum. Untuk opsi konfigurasi per platform, lihat tabel Agent365ExporterOptions di Konfigurasi.

Batas waktu ekspor

Gejala: Batas waktu upaya ekspor.

Resolution:

  • Periksa konektivitas jaringan ke titik akhir observabilitas.
  • Pengaturan batas waktu default berbeda untuk setiap platform. Batas waktu default permintaan HTTP adalah 30 detik. Beberapa SDK juga memiliki batas waktu pengekspor keseluruhan terpisah yang mencakup seluruh siklus ekspor, termasuk percobaan ulang. Untuk properti dan default yang tepat per platform, lihat tabel Agent365ExporterOptions di Konfigurasi.
  • Jika waktu habis sering terjadi, tingkatkan nilai batas waktu yang relevan pada pengaturan pengekspor Anda.

Ekspor berhasil tetapi telemetri tidak muncul di Defender atau Purview

Gejala: Log menunjukkan ekspor yang berhasil tetapi telemetri tidak muncul di Microsoft Defender atau Microsoft Purview.

Resolution:

  • Pastikan Anda memenuhi prasyarat untuk melihat log yang diekspor. Untuk Purview, audit harus diaktifkan. Untuk Defender, Anda harus mengonfigurasi perburuan lanjutan. Untuk informasi selengkapnya, lihat Melihat log diekspor.
  • Telemetri dapat membutuhkan beberapa menit untuk muncul setelah ekspor berhasil. Tunggu hingga data muncul sebelum menyelidiki lebih lanjut.

Untuk informasi lebih lanjut tentang pengujian observabilitas, lihat: