重要
若要在 Agent 365 中啟用可觀察性,請使用 Microsoft OpenTelemetry Distro。 這個發行版在 Microsoft 各產品中提供單一可觀察性 SDK,為 Agent 365、Microsoft Foundry、Azure 監視器等提供支援。 本文所述的現有做法會持續運作,不會有重大變更。 如需依語言劃分的移轉指引,請參閱下列指南:
- Python 移轉指南
- JavaScript/TypeScript 移轉指南
- .NET 移轉指南。如需適用於所有整合路徑的基礎資料模型、身分識別與驗證、範圍與同意,以及限制,請參閱 Agent 365 可觀察性概念。
注意
可觀察性是開始使用 Agent 365 開發中漸進式功能層級之一,適用於所有 Agent 類型。
若要參與 Agent 365 生態系統,請為您的 Agent 新增 Agent 365 可觀察性功能。 Agent 365 可觀察性以 OpenTelemetry (OTel) 為基礎,提供統一的架構,可在所有 Agent 平台上一致且安全地擷取遙測資料。 實作這個必要元件後,IT 管理員即可在 Microsoft 系統管理中心監控您 Agent 的活動,安全性團隊也能使用 Defender 和 Purview 進行合規性與威脅偵測。
重點優勢
- 端對端可見性:擷取每次 Agent 叫用的完整遙測資料,包括工作階段、工具呼叫和例外狀況,讓您在各平台間都有完整的追蹤能力。
- 安全性與合規性強化:將統一的稽核記錄饋入 Defender 和 Purview,為您的 Agent 啟用進階安全性案例與合規性報告。
- 跨平台彈性:以 OTel 標準為基礎,支援 Copilot Studio、Foundry 等多元執行階段與平台,以及未來的 Agent 架構。
- 提升管理員作業效率:在 Microsoft 365 系統管理中心提供集中式可觀察性,縮短疑難排解時間,並透過角色型存取控制,為管理您 Agent 的 IT 團隊改善治理。
支援的 Agent
下列 Agent 類型支援 Agent 365 可觀察性:
- 已啟用 Microsoft Agent 365 的 Agent:使用可觀察性 SDK 對您的 Agent 進行檢測。
- 自訂引擎 Agent:使用可觀察性 SDK 對您的 Agent 進行檢測。
- 宣告式 Agent:開箱即用即支援可觀察性。 不需要實作 SDK。
安裝
使用下列命令,為 Agent 365 支援的語言安裝可觀察性模組。
安裝核心可觀察性和執行階段套件。 所有使用 Agent 365 可觀察性的 Agent 都需要這些套件。
pip install microsoft-agents-a365-observability-core
pip install microsoft-agents-a365-runtime
如果您的 Agent 使用 Microsoft Agents Hosting 套件,請安裝適用於裝載的整合套件。 這項元件提供中介軟體,可自動從 TurnContext 填入 Baggage 與範圍,並內建可觀察性匯出工具所需的權杖快取功能。
pip install microsoft-agents-a365-observability-hosting
如果您的 Agent 使用其中一個支援的 AI 架構,請安裝對應的自動檢測擴充功能,即可自動擷取遙測資料,而不需要手動撰寫檢測程式碼。 如需設定詳細資料,請參閱自動檢測。
# 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
組態
使用下列設定,為您的 Agent 啟用並自訂 Agent 365 可觀察性。
若要啟用可觀察性,請將 ENABLE_A365_OBSERVABILITY_EXPORTER 環境變數設為 true。 這項設定會將記錄匯出至服務,且需要提供 token_resolver。 否則會使用主控台匯出工具。
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,
)
權杖解析器不會記錄到主控台。
您可以將 Agent365ExporterOptions 執行個體傳遞至 exporter_options,藉此自訂匯出工具的行為。 提供 exporter_options 時,其優先順序高於 token_resolver 和 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,
)
下表說明 configure() 的選擇性參數。
| 參數 | 描述 | 預設 |
|---|---|---|
logger_name |
用於偵錯與主控台記錄輸出的 Python 記錄器名稱。 | microsoft_agents_a365.observability.core |
exporter_options |
一併設定權杖解析器與叢集類別的 Agent365ExporterOptions 執行個體。 |
None |
suppress_invoke_agent_input |
設為 True 時,會隱藏 InvokeAgent Span 上的輸入訊息。 |
False |
下表說明 Agent365ExporterOptions 的選擇性屬性。
| 屬性 | 說明 | 預設 |
|---|---|---|
use_s2s_endpoint |
True 時,請使用服務到服務端點路徑。 |
False |
max_queue_size |
批次處理器的最大佇列大小。 | 2048 |
scheduled_delay_ms |
匯出批次之間的延遲 (以毫秒為單位)。 | 5000 |
exporter_timeout_ms |
匯出作業的逾時時間 (以毫秒為單位)。 | 30000 |
max_export_batch_size |
匯出作業的最大批次大小。 | 512 |
Baggage 屬性
使用 BaggageBuilder 來設定可要求中所有跨度間流程的上下文資訊。
SDK 實現一個 SpanProcessor,能將所有非空的 Baggage 屬性複製到新啟動的跨度,且不會覆寫現有屬性。
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
若要從 TurnContext 自動填入 BaggageBuilder,請使用 microsoft-agents-a365-observability-hosting 套件中的 populate 協助程式。 此協助工具會自動從活動中擷取呼叫者、Agent、租用戶、管道和交談詳細資料。
from microsoft_agents.hosting.core.turn_context import TurnContext
from microsoft_agents_a365.observability.core import BaggageBuilder
from microsoft_agents_a365.observability.hosting.scope_helpers.populate_baggage import populate
builder = BaggageBuilder()
populate(builder, turn_context)
with builder.build():
# Baggage is auto-populated from the TurnContext activity
pass
Baggage 中介軟體
如果您的 Agent 使用整合套件,請註冊 Baggage 中介軟體,讓每個傳入的要求自動填入 Baggage 。 此步驟能免除在每個活動處理常式中手動呼叫 BaggageBuilder 的需求。
在配接器中介軟體集上註冊 BaggageMiddleware。 它會自動從每個傳入的 TurnContext 中擷取呼叫者、Agent、租用戶、管道和交談詳細資料,並將要求裝合在 Baggage 範圍內。
from microsoft_agents_a365.observability.hosting import BaggageMiddleware
adapter.use(BaggageMiddleware())
或者,您也可以使用 ObservabilityHostingManager 設定 Baggage 中介軟體及其他裝載功能:
from microsoft_agents_a365.observability.hosting import ObservabilityHostingManager, ObservabilityHostingOptions
options = ObservabilityHostingOptions(enable_baggage=True)
ObservabilityHostingManager.configure(adapter.middleware_set, options)
中介軟體會跳過非同步回覆 (ContinueConversation 事件) 的 Baggage 設定,以避免覆寫原始要求已設定的 Baggage。
權杖解析器
使用 Agent 365 匯出工具時,您必須提供會傳回驗證權杖的權杖解析器函式。
搭配 Agent Hosting 架構使用 Agent 365 可觀察性 SDK 時,您可以透過 Agent 活動中的 TurnContext 產生權杖。
下列程式碼片段示範如何使用 microsoft_agents.hosting.core SDK 產生權杖。 這裡產生的驗證權杖,會用於將 Span 匯出至 A365 擷取服務。 Agent 可以自行產生權杖,例如使用 Microsoft 驗證資源庫 (MSAL),但必須確保權杖具有可觀察性範圍。
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
若 Agent 是透過 A365 CLI 建置,並使用 AI 隊友與 Microsoft Agent 365 Observability Hosting Library 套件,請使用 AgenticTokenCache 自動處理權杖快取。 在活動處理常式中,針對每個 Agent 與租用戶註冊一次權杖,並在可觀察性設定中,將 cache.get_observability_token 做為 token_resolver 傳入。
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(),
)
自動檢測
自動檢測會自動監聽代理式架構 (SDK) 現有的追蹤遙測訊號,並將其轉送至 Agent 365 可觀察性服務。 這項功能可讓開發人員不必手動撰寫監控程式碼,簡化設定作業,並確保效能追蹤的一致性。
重要
自動檢測僅會填入標準 OTel 屬性。 您必須使用 BaggageBuilder 來新增 Microsoft 特定的屬性。 若要查看缺少哪些屬性,請對照市集記錄檢查您的主控台 Span 輸出,以取得差異集。
多個 SDK 與平台皆支援自動檢測:
| 平台 | 支援的 SDK / 架構 |
|---|---|
| .NET | 語意核心、OpenAI、Agent Framework |
| Python | 語意核心、OpenAI、Agent Framework、LangChain |
| Node.js | OpenAI、LangChain |
注意
自動檢測的支援程度會依平台與 SDK 實作而異。
語意核心
自動檢測需要使用 Baggage 建置器。 使用 BaggageBuilder 設定 Agent 識別碼與租用戶識別碼。
安裝 套件。
pip install microsoft-agents-a365-observability-extensions-semantic-kernel
設定可觀察性。
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
自動檢測需要使用 Baggage 建置器。 使用 BaggageBuilder 設定 Agent 識別碼與租用戶識別碼。
安裝 套件。
pip install microsoft-agents-a365-observability-extensions-openai
設定可觀察性。
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
自動檢測需要使用 Baggage 建置器。 使用 BaggageBuilder 設定 Agent 識別碼與租用戶識別碼。
安裝 套件。
pip install microsoft-agents-a365-observability-extensions-agent-framework
設定可觀察性。
from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.agentframework import (
AgentFrameworkInstrumentor,
)
# Configure observability
configure(
service_name="AgentFrameworkTracingWithAzureOpenAI",
service_namespace="AgentFrameworkTesting",
)
# Enable auto-instrumentation
AgentFrameworkInstrumentor().instrument()
LangChain Framework
自動檢測需要使用 Baggage 建置器。 使用 BaggageBuilder 設定 Agent 識別碼與租用戶識別碼。
安裝 套件。
pip install microsoft-agents-a365-observability-extensions-langchain
設定可觀察性。
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
手動檢測
使用 Agent 365 可觀察性 SDK 了解 Agent 的內部運作方式。
SDK 提供您可以啟動的範圍:InvokeAgentScope、ExecuteToolScope、InferenceScope 與 OutputScope。
Agent 叫用
在您的 Agent 處理程序開始時使用這個範圍。 使用叫用 Agent 範圍,您可以擷取目前所叫用的 Agent、Agent 使用者資料等屬性。
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(...)
工具執行
下列範例示範如何為您 Agent 的工具執行新增可觀察性追蹤。 這項追蹤會擷取遙測資料,以供監控與稽核之用。
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)
推斷
下列範例示範如何為 AI 模型推斷呼叫加上可觀察性追蹤檢測,以擷取權杖使用量、模型詳細資料及回應中繼資料。
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)
輸出
當 InvokeAgentScope、ExecuteToolScope 或 InferenceScope 無法同步擷取輸出資料時,請針對非同步案例使用這個範圍。 將 OutputScope 啟動為子 Span,在父範圍完成後記錄最終的輸出訊息。
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
在本機驗證
若要驗證您已成功整合可觀察性 SDK,請檢查您 Agent 產生的主控台記錄,以及可觀察性 SDK 的記錄。
將 ENABLE_A365_OBSERVABILITY_EXPORTER 環境變數設定為 false。 這項設定會將 Span (追蹤) 匯出至主控台。
若要調查匯出失敗的問題,請將 ENABLE_A365_OBSERVABILITY_EXPORTER 設為 true,並在應用程式啟動時設定偵錯記錄,以啟用詳細記錄:
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)
主要記錄訊息:
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.
檢視已匯出的記錄
若要在 Microsoft Purview 或 Microsoft Defender 中檢視 Agent 遙測資料,請確保符合以下要求:
- Microsoft Purview:您的組織必須開啟稽核功能。 如需指示,請參閱開啟或關閉稽核。
-
Microsoft Defender:必須設定進階搜捕功能,才能存取
CloudAppEvents資料表。 詳情請參閱進階搜捕結構妙術中的 CloudAppEvents 資料表。
驗證是否可發佈至市集
重要
若要通過市集驗證,您的 Agent 必須實作 InvokeAgentScope、InferenceScope 及 ExecuteToolScope 範圍。 發佈時必須具備這三個範圍。
發佈之前,請實作必要的 invoke agent、execute tool、inference 及 output 範圍,並使用主控台記錄驗證您 Agent 的可觀察性整合。 接著,將您 Agent 的記錄與下列屬性清單進行比對,確認所有必要屬性皆已具備。 在每個範圍或透過 Baggage 建置器擷取屬性,並可視需要納入選擇性屬性。
如需市集發佈需求的詳細資訊,請參閱市集驗證準則。
InvokeAgentScope 屬性
下列清單彙總啟動 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 屬性
下列清單彙總啟動 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 屬性
下列清單彙總啟動 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 屬性
下列清單彙總啟動 OutputScope 時所記錄的必要與選擇性遙測屬性。 當父範圍無法同步擷取輸出資料時,請針對非同步案例使用這個範圍。
"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"
}
使用可檢視性測試您的 Agent
在您的 Agent 中實作可觀察性之後,請進行測試,確保能正確擷取遙測資料。 請遵循測試指南設定您的環境。 接著,請主要參閱檢視可觀察性記錄一節,驗證您的可觀察性實作是否如預期運作。
驗證:
- 前往:
https://admin.cloud.microsoft/#/agents/all - 選取您的 Agent >活動
- 您會看到工作階段與工具呼叫
疑難排解
本節說明實作與使用可觀察性時常見的問題。
| 問題回報 | Description |
|---|---|
| 可檢視性資料未顯示 | 因為未啟用匯出、設定不正確,或權杖解析失敗,所以看不到任何遙測資料。 |
| 遺漏租用戶識別碼或 Agent 識別碼 - 已跳過跨度 | 如果缺少分割所需的身分識別屬性,Span 會在匯出前遭到捨棄。 |
| 權杖解析失敗 - 匯出跳過或未經授權 | 如果解析器未傳回權杖或發生例外狀況,匯出要求就會失敗或遭到略過。 |
| HTTP 401 未授權 | 驗證在語法上成功,但因為範圍、類型或過期等因素,導致權杖對擷取而言無效。 |
| HTTP 403 禁止 | 因為租用戶授權缺口或缺少可觀察性權限,所以存取遭拒。 |
| HTTP 403 禁止 - Agent 識別碼不符 | 如果 URL 中的 Agent 身分識別與權杖所代表的身分識別不符,要求就會遭到拒絕。 |
| HTTP 429 或 5xx 錯誤 - 暫時性錯誤 | 暫時的節流或服務端故障會中斷匯出,可能需要調整重試設定。 |
| 匯出逾時 | 因為網路延遲或端點回應速度,遙測批次超過設定的逾時範圍。 |
| 匯出成功,但 Defender 或 Purview 中未顯示遙測資料 | 擷取已完成,但下游的可見性因產品必要條件而延遲或遭到封鎖。 |
提示
Agent 365 疑難排解指南包含高階疑難排解建議、最佳做法,以及每個階段的疑難排解連結,涵蓋 Agent 365 開發生命週期的所有部分。
可檢視性資料未顯示
徵狀:
- Agent 正在執行
- 系統管理中心中沒有遙測資料
- 無法查看 Agent 活動
根本原因:
- 未啟用可觀察性
- 組態錯誤
- 權杖解析器問題
解決方案:嘗試以下步驟來解決問題:
驗證可觀察性匯出工具是否已啟用
您必須明確啟用 Agent 365 匯出器。 停用時,SDK 會回復使用主控台匯出工具,且不會將遙測資料傳送至服務。 如需設定詳細資料,請參閱設定。
檢查權杖解析器設定
匯出器需要一個有效的權杖解析器,可為每個匯出要求傳回一個持有人權杖。 如果遺漏權杖解析器或傳回
null,匯出會靜默跳過。 請確認您的程式碼已正確實作權杖解析器。 如需詳細資料,請參閱權杖解析器。檢查記錄中的錯誤
啟用詳細記錄,並使用
az webapp log tail命令搜尋記錄中與可觀察性相關的錯誤。 如需依平台啟用記錄的詳細資料,請參閱在本機驗證。# Look for observability-related errors az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"驗證遙測資料匯出
確認遙測資料已如預期產生並匯出。
- 新增主控台匯出工具,並檢查是否已在本機產生遙測資料。 如需如何使用主控台匯出工具及驗證輸出的詳細資料,請參閱在本機驗證。
遺漏租用戶識別碼或 Agent 識別碼 — 已跳過跨度
症狀:系統會靜默丟棄跨度,並永不將其匯出。 部分 SDK 會記錄遭略過的 Span 數量,或顯示類似「找不到具有租用戶/Agent 身分識別的 Span」的訊息;其他 SDK 則會直接捨棄,不會記錄。
解決方法:
- 匯出之前,SDK 會依租用戶與 Agent 身分識別分割 Span。 系統會捨棄缺少租用戶識別碼或 Agent 識別碼的 Span,且絕不會將其傳送至服務。
- 確保
BaggageBuilder在建立跨度前,已經設定好租用戶識別碼和 Agent 識別碼。 這些值會透過 OpenTelemetry 上下文傳播,並附加於所有在 Baggage 範圍內建立的跨度上。 如需平台專屬的 API,請參閱 Baggage 屬性。 - 如果您使用裝載整合套件中的 Baggage 中介軟體或 Turn Context 協助程式來填入這些識別碼,請確認
TurnContext活動具有含 Agent 身分識別的有效收件者。
權杖解析失敗 — 匯出跳過或未經授權
症狀:權杖解析器傳回 null 或拋出錯誤。 視 SDK 而定,匯出作業可能會完全略過,或要求在未附加授權標頭的情況下傳送,並因 HTTP 401 而失敗。
解決方法:
- 初始化時必須提供權杖解析器。 如果遺漏,匯出器會在啟動時拋出錯誤。 驗證已提供權杖解析器,且能傳回有效的持有人權杖。
- 請確認
BaggageBuilder使用的租用戶識別碼與 Agent 識別碼正確無誤,因為這些值會傳遞給權杖解析器。 - 對於在 Azure 上託管的 Agent,請驗證受管理識別具有可檢視性範圍所需的 API 權限。
HTTP 401 未授權
症狀:匯出失敗,並出現 HTTP 401 錯誤。 匯出器不會重試這個錯誤。
解決方法:
- 驗證權杖對象是否符合可檢視性端點範圍。
- 檢查權杖解析器是否未傳回委派使用者權杖、對象不正確的權杖,或是過期權杖。
HTTP 403 禁止
症狀:匯出失敗,並出現 HTTP 403 錯誤。 匯出器不會重試這個錯誤。
根本原因:HTTP 403 錯誤可能有多種原因。 請依序檢查以下解決方案。
解決方法:
遺漏授權 — 請驗證您的租用戶在 Microsoft 365 系統管理中心中,已指派以下其中一項授權:
- 測試 - Microsoft 365 E7
- Microsoft 365 E7
- Microsoft Agent 365 Frontier
缺少
Agent365.Observability.OtelWrite權限 — 如果您最近升級了可觀察性套件,就需要授與這項權限。 請參閱下一節中的重要注意事項。
重要
升級至這些套件版本的現有 Agent 需要執行額外步驟
這個步驟僅適用於升級現有 Agent 的情況。 新安裝的 Agent 不需要這個步驟。 如果您要升級至下列套件版本或更新版本,必須將新的 Agent365.Observability.OtelWrite 權限授與您的身分識別 (受控識別或應用程式註冊)。 若無此權限,遙測資料匯出將因 HTTP 403 而失敗。
| 平台 | 需要執行這個步驟的最低版本 |
|---|---|
| .NET | 0.3-beta |
| Node.js | 0.2.0-preview.1 |
| Python | 0.3.0 |
請使用下列其中一個選項授與權限。
選項 A — Agent 365 CLI (需要全域管理員帳戶;請從包含 a365.config.json 的 Agent 專案目錄執行,或使用 --agent-name)
a365 setup permissions bot
或者,無需組態檔:
a365 setup permissions bot --agent-name "<agent-name>"
這個命令會授與藍圖上所有缺少的權限,包括可觀察性範圍。
選項 B — Entra 入口網站 (不需要設定檔;需要對藍圖應用程式註冊擁有全域管理員存取權)
- 移至 Entra 入口網站>應用程式註冊>,選取您的 Blueprint 應用程式。
- 移至 API 權限>新增權限>我的組織使用的 API> 尋找
9b975845-388f-4429-889e-eab1ef63949c。 - 選取委派權限>,勾選
Agent365.Observability.OtelWrite>新增權限。 - 重複執行步驟 2–3,這次改選取應用程式權限>,勾選
Agent365.Observability.OtelWrite>新增權限。 - 按一下授與管理員同意並確認。
Agent365.Observability.OtelWrite (委派) 與 Agent365.Observability.OtelWrite (應用程式) 都應顯示 Granted 狀態。
HTTP 403 禁止 — Agent 識別碼不符
症狀:匯出時因 HTTP 403 而失敗,並收到類似 403 Forbidden 和 agent-ID-mismatch 的伺服器訊息,且在呼叫 Agent 365 追蹤端點時發生失敗。
根本原因:在您設定 Agent 詳細資料時,您使用藍圖用戶端識別碼而非 Agen t執行個體用戶端識別碼,就會導致此錯誤。 匯出 URL 中的 Agent 識別碼與權杖授權的身分識別不相符,因此追蹤端點拒絕要求。
解決方法:
- 驗證租用戶識別碼是否已新增至 Agent 365 允許租用戶清單。
- 將 Agent 詳細資料設定為 Agent 執行個體用戶端識別碼 (而非藍圖用戶端識別碼)。
- 驗證產生的匯出 URL - 如果您啟用記錄器,會將它記錄下來。 確認 URL 中的Agent 識別碼與 Agent 執行個體用戶端識別碼相符。
- 如需依 SDK 啟用診斷記錄的詳細資料,請參閱在本機驗證。
HTTP 429 或 5xx 錯誤 - 暫時性錯誤
症狀:匯出因暫時性 HTTP 狀態碼 (例如 429 或 5xx) 而失敗。
解決方法:
- 這些錯誤通常是暫時性的,會自行解決。 Python 與 JavaScript SDK 會針對 HTTP 408、429 及 5xx 狀態碼,以指數輪詢間隔自動重試最多三次。 .NET SDK 不會自動重試。
- 如果錯誤持續,請檢查服務健康狀態儀表板。
- 請考慮增加批次之間的排程延遲,或增加匯出批次的大小上限,藉此降低匯出頻率。 如需依平台劃分的設定選項,請參閱設定中的
Agent365ExporterOptions資料表。
匯出逾時
症狀:匯出嘗試逾時。
解決方法:
- 檢查與可檢視性端點的網路連線。
- 逾時的預設值會依平台而異。 預設的 HTTP 要求逾時為 30 秒。 部分 SDK 也另外提供整體匯出工具逾時設定,涵蓋包括重試在內的整個匯出週期。 如需依平台劃分的確切屬性與預設值,請參閱設定中的
Agent365ExporterOptions資料表。 - 如果經常發生逾時,請增加匯出工具選項中的相關逾時值。
匯出成功,但 Defender 或 Purview 中未顯示遙測資料
徵狀:記錄顯示匯出成功,但在 Microsoft Defender 或 Microsoft Purview 中看不到遙測資料。
解決方法:
- 請確認您符合檢視已匯出記錄的必要條件。 若為 Purview,必須開啟稽核功能。 若為 Defender,您必須設定進階搜捕。 如需詳細資訊,請參閱檢視已匯出的記錄。
- 遙測資料在成功匯出後可能需要數分鐘才能填入。 請先等待資料出現,再進一步調查。
如需深入了解如何測試可觀察性,請參閱:
相關內容
- Agent 365 可檢視性概念 - 適用於每個整合路徑的資料流、身分識別模型、驗證、範圍與限制。
- Agent 365 可檢視性屬性參考 - 每個由 Agent 365 擷取的跨度都必須遵循的 Canonical 跨度屬性結構描述。
- Microsoft OpenTelemetry Distro - 適用於新整合的建議統一 SDK。