Deprecated Agent 365 Observability SDK

Important

この記事では、非推奨のAgent 365 Observability SDKについて説明します。 既存の統合は引き続き動作しますが、新しい統合にはこのSDKは使わないでください。 新規開発の場合は、Microsoft OpenTelemetry Distroをご利用ください。 既存の統合を更新する前に、あなたの言語の移行ガイドを確認してください:

基盤となるデータモデル、アイデンティティと認証、スコープと同意、すべての統合経路に適用される制限については、Agent 365 のオブザーバビリティの概念を参照してください。

Note

可観測性は、「 エージェント 365 開発の開始 」の増分機能レベルの 1 つであり、すべてのエージェントの種類に適用されます。

Agent 365エコシステムに参加するには、エージェントにAgent 365のObservability機能を追加してください。 Agent 365 Observabilityは OpenTelemetry(OTel) を基盤とし、すべてのエージェントプラットフォームで一貫して安全にテレメトリをキャプチャするための統一フレームワークを提供します。 この必要なコンポーネントを実装することで、IT管理者がMicrosoft管理センターでエージェントの活動を監視できるようになり、セキュリティチームはDefenderやPurviewを使ってコンプライアンスや脅威検出を行うことができます。

主な利点

  • エンドツーエンドの可視性:セッション、ツールコール、例外を含むすべてのエージェント呼び出しの包括的なテレメトリをキャプチャし、プラットフォーム間での完全なトレーサビリティを実現します。
  • セキュリティとコンプライアンスの有効化: 統合監査ログをDefenderと Purview にフィードし、エージェントの高度なセキュリティ シナリオとコンプライアンス レポートを有効にします。
  • クロス プラットフォームの柔軟性: OTel 標準を基に構築し、Copilot Studio、Foundry、将来のエージェント フレームワークなどの多様なランタイムとプラットフォームをサポートします。
  • 管理者の操作効率: Microsoft 365管理センターで一元的な監視機能を提供し、エージェントを管理する IT チームのロールベースのアクセス制御を使用して、トラブルシューティング時間を短縮し、ガバナンスを向上させます。

サポートされているエージェント

次の種類のエージェントでは、エージェント 365 の可観測性がサポートされています。

Installation

次のコマンドを使用して、Agent 365 でサポートされている言語の監視モジュールをインストールします。

コアの可観測性とランタイム パッケージをインストールします。 Agent 365 Observability を使用するすべてのエージェントには、これらのパッケージが必要です。

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

エージェントが Microsoft Agents Hosting パッケージを使用している場合は、ホスティング統合パッケージをインストールします。 TurnContextから手荷物とスコープを自動的に埋め込むとともに、監視エクスポーター用のトークンキャッシュを含むミドルウェアを提供します。

pip install microsoft-agents-a365-observability-hosting

エージェントでサポートされている 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

Configuration

以下の設定を使って、エージェントのAgent 365 Observabilityを有効にしてカスタマイズしてください。

ENABLE_A365_OBSERVABILITY_EXPORTER環境変数をtrueに設定して観察しやすくしてください。 Agent 365 SDK 2.0以降では、エクスポーターは常にサービス間 (S2S) ルートを使用し、設定されたアプリ専用資格情報 token_resolver で認証します。 リゾルバなしでエクスポーターを有効にすると、Pythonはコンソールのエクスポーターのフォールバックを維持し、テレメトリをAgent 365に送りません。

from microsoft_agents_a365.observability.core import configure

def token_resolver(agent_id: str, tenant_id: str) -> str | None:
    # Return a validated app-only observability token for this agent and tenant.
    return "<app-only-observability-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()の省略可能なパラメーターについて説明します。

パラメーター Description Default
logger_name デバッグとコンソール ログ出力に使用されるPython ロガーの名前。 microsoft_agents_a365.observability.core
exporter_options トークン リゾルバーとクラスター カテゴリを一緒に構成する Agent365ExporterOptions インスタンス。 None
suppress_invoke_agent_input Trueすると、InvokeAgentスパンでの入力メッセージが抑制されます。 False

次の表では、 Agent365ExporterOptionsの省略可能なプロパティについて説明します。

財産 Description Default
use_s2s_endpoint 非推奨のため無視されます。 Agent 365 SDK 2.0以降は、この値が Falseであっても常にS2Sルートを使用します。 False (無視)
max_queue_size バッチ プロセッサの最大キュー サイズ。 2048
scheduled_delay_ms エクスポート バッチ間の遅延 (ミリ秒単位)。 5000
exporter_timeout_ms エクスポート操作のタイムアウト (ミリ秒単位)。 30000
max_export_batch_size エクスポート操作の最大バッチ サイズ。 512

バゲッジ属性

BaggageBuilder を使用して、要求のすべてのスパンを流れるコンテキスト情報を設定します。 SDKは、空でないすべての手荷物エントリを既存の属性を上書きせずに新たに開始したスパンにコピーする SpanProcessor を実装しています。

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

BaggageBuilderからTurnContextを自動的に設定するには、populate パッケージのmicrosoft-agents-a365-observability-hosting ヘルパーを使用します。 このヘルパーは、アクティビティから呼び出し元、エージェント、テナント、チャネル、会話の詳細を自動的に抽出します。

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

手荷物ミドルウェア

エージェントがホスティング統合パッケージを使用している場合は、手荷物ミドルウェアを登録して、すべての着信要求に対して自動的に手荷物を設定します。 この手順により、各アクティビティ ハンドラーで BaggageBuilder を手動で呼び出す必要がなくなります。

アダプター ミドルウェア セットに BaggageMiddleware を登録します。 すべての着信 TurnContext から呼び出し元、エージェント、テナント、チャネル、および会話の詳細が自動的に抽出され、要求が手荷物スコープにラップされます。

from microsoft_agents_a365.observability.hosting import BaggageMiddleware

adapter.use(BaggageMiddleware())

または、 ObservabilityHostingManager を使用して、手荷物ミドルウェアとその他のホスティング機能を構成します。

from microsoft_agents_a365.observability.hosting import ObservabilityHostingManager, ObservabilityHostingOptions

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

ミドルウェアは、非同期応答 (ContinueConversation イベント) の手荷物設定をスキップして、元の要求が既に設定した手荷物を上書きしないようにします。

トークン リゾルバー

Agent 365 SDK 2.0以降でAgent 365エクスポーターを使用する場合は、エクスポートを行うエージェントインスタンスの最終的なアプリのみの観測性トークンを返すトークンリゾルバを提供します。 エクスポーターは常にテレメトリをS2Sルートに送り、委任ルートには戻りません。 Agent 365 に登録されたエージェント インスタンスは、このルートでエクスポートするのに Agent365.Observability.OtelWrite の許可や管理者の同意は必要ありません。

アプリ専用トークンを取得するには、2段階のFederated Managed Identity(FMI)交換を利用します。

  1. client_credentialsがエージェントインスタンスのクライアントIDに設定されたapi://AzureADTokenExchange/.defaultのfmi_pathのブループリントトークンを取得してください。
  2. api://9b975845-388f-4429-889e-eab1ef63949c/.default のエージェントインスタンス client_credentials トークンを取得してください。 ステップ1のトークンを client_assertionとして渡し、 client_assertion_type を urn:ietf:params:oauth:client-assertion-type:jwt-bearerに設定します。

完全な認証設定については、S2S を使用する Agent 365-enabledを参照してください。 トークンサービスの完全な実装については、Node.js、Python、.NETのAgent 365サンプルをご覧ください。

リゾルバは次の条件を満たす必要があります:

  • エクスポートエージェントのインスタンスとテナントに対してアプリ専用のトークンを返します。 中間ブループリントのアサーション、ブループリントトークン、ユーザートークン、またはOBOトークンを返してはいけません。
  • 返却する前にトークンを検証してください。 承諾する idtyp=app。 idtypが存在しない場合は、空でないrolesクレームを持つトークン、またはsubに等しい空でないoidクレームを持つトークンのみを受け入れます。 scpクレームやその他のidtyp値があるトークン、期限切れのトークン、9b975845-388f-4429-889e-eab1ef63949c が api://9b975845-388f-4429-889e-eab1ef63949c または aud でないトークンは拒否してください。
  • トークンをキャッシュして、期限切れ前にリフレッシュしてください。 エクスポーターは各エクスポートバッチで、各テナントおよび各エージェント ID ごとにリゾルバーを一度呼び出します。

Note

SDK 1.xからの移行: SDK 2.0では、オブザーバビリティエクスポートのための委任トークン交換が削除されます。 以下の例に示すように、エージェント内の委任トークンコードをアプリ専用リゾルバーに置き換えてください。 SDK 1.xに留まり、委任フローでエクスポートするエージェントは、委任された Agent365.Observability.OtelWrite 権限と管理者の同意が必要です。 a365 setup allコマンドはBlueprintエージェントに対してその権限を設定するものではありません。 許可を付与するには「許可を付与する」を参照してください。

AgenticTokenCache.refresh_observability_token(agent_id, tenant_id, acquire_app_only_obs_token)からtoken_resolverに電話して。 キャッシュは可観測性 /.default スコープを取得コールバックに渡し、キャッシュされたトークンを返します。

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.hosting.token_cache_helpers import AgenticTokenCache

cache = AgenticTokenCache()

async def acquire_app_only_obs_token(
    agent_id: str,
    tenant_id: str,
    scopes: list[str],
) -> str:
    # Run the FMI exchange described earlier, validate the token, and return it.
    return "<app-only-observability-token>"

async def token_resolver(agent_id: str, tenant_id: str) -> str:
    return await cache.refresh_observability_token(
        agent_id, tenant_id, acquire_app_only_obs_token
    )

configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    token_resolver=token_resolver,
)

Pythonはまた、スレッド安全なキャッシュからトークンを返す同期リゾルバもサポートしています。 Agent 365のサンプルではこのパターンが使用されており、これによりエクスポータースレッドで非同期リゾルバを実行する際の制約を回避できます。

SDK 1.xからの移行には、観測可能性スコープを要求したAGENT_APP.auth.exchange_tokenコールとAgenticTokenCache.register_observability を渡した AgenticTokenStruct コールを削除してください。 SDK 2.0では、 register_observability は非推奨の no-opとなっています。

自動インストルメンテーション

自動インストルメンテーションは、エージェンティック フレームワーク (SDK) の既存のテレメトリ信号をトレース用に自動的にリッスンし、それらを Agent 365 監視サービスに転送します。 この機能により、開発者が手動でモニタリングコードを書く必要がなくなり、設定が簡素化され、パフォーマンスの一貫性が保証されます。

Important

自動インストルメンテーションでは、標準の OTel 属性のみが設定されます。 BaggageBuilder を使用して、Microsoft固有の属性を追加する必要があります。 不足している属性を確認するには、差分セットについて、コンソールスパンの出力をストアログと照合してください。

複数のSDKおよびプラットフォームが自動計測をサポートしています:

Platform サポートされている SDK / フレームワーク
.NET Semantic Kernel、OpenAI、Agent Framework
Python Semantic Kernel、OpenAI、Agent Framework、LangChain
Node.js OpenAI、 LangChain

Note

自動インストルメンテーションのサポートは、プラットフォームと SDK の実装によって異なります。

セマンティック カーネル

自動インストルメンテーションでは、バゲッジビルダーを使用する必要があります。 エージェントIDとテナントIDは BaggageBuilderで設定できます。

パッケージをインストールします。

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 builder の使用が必要です。 エージェントIDとテナントIDは BaggageBuilderで設定できます。

パッケージをインストールします。

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

エージェント フレームワーク

自動インストルメンテーションには、Baggage Builder を使用する必要があります。 エージェントIDとテナントIDは BaggageBuilderで設定できます。

パッケージをインストールします。

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 フレームワーク

Note

LangChain フレームワークの自動インストルメンテーションでは、 LangGraph および Deep Agents もサポートされます。 同じ拡張機能は、これらのフレームワークのいずれかで構築されたエージェントのテレメトリを自動的にキャプチャします。

自動インストルメンテーションにはバゲッジ ビルダーの使用が必要です。 エージェントIDとテナントIDは BaggageBuilderで設定できます。

パッケージをインストールします。

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を使って、エージェントの内部動作を理解しましょう。 SDK には、開始できるスコープ ( InvokeAgentScope、 ExecuteToolScope、 InferenceScope、 OutputScope) が用意されています。

エージェント呼び出し

エージェントプロセスを開始する際に、この範囲を使用してください。 インヴォークエージェントスコープを使うことで、現在呼び出されているエージェントやエージェントのユーザーデータなどのプロパティをキャプチャできます。

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

ツールの実行

以下の例は、エージェントのツール実行に観測可能性トラッキングを追加する方法を示しています。 この追跡は監視および監査目的でテレメトリーを記録します。

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 を開始し、親スコープの終了後に最終的な出力メッセージを記録します。

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

ローカルでの検証

Observability SDKとの統合が成功したかを確認するために、エージェントが生成したコンソールログとObservability SDKのログを確認してください。

ENABLE_A365_OBSERVABILITY_EXPORTER 環境変数を false に設定します。 この設定はスパン(トレース)をコンソールにエクスポートします。

エクスポートエラーを調査するには、 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でエージェントのテレメトリを見るには、以下の要件を満たしていることを確認してください。

ストアパブリッシングのための検証

Important

ストアの検証を成功させるには、エージェントで、InvokeAgentScope、およびInferenceScopeスコープを実装するExecuteToolScope。 公開には、これら 3 つのスコープが必要です。

発行する前に、コンソール ログを使用して、必要な invoke agent、 execute tool、 inference、および output スコープを実装して、エージェントの可観測性の統合を検証します。 次に、エージェントのログを以下の属性リストと比較し、必要な属性がすべて揃っているか確認します。 各スコープや手荷物ビルダーで属性を取得でき、オプションの属性も自由に加えてください。

ストア公開要件の詳細については、 ストア検証ガイドラインをご覧ください。

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

可観測性でエージェントをテストする

エージェントに可観測性を実装したら、それをテストして、テレメトリが正しくキャプチャされていることを確認します。 テストガイドに従って環境を整えましょう。 次に、監視機能の実装が期待どおりに動作していることを検証するために、主に [監視ログの 表示 ] セクションに焦点を当てます。

検証:

  • https://admin.cloud.microsoft/#/agents/all に移動します
  • エージェント > アクティビティを選択してください
  • セッションとツール呼び出しが表示される

Troubleshooting

このセクションでは、可観測性の実装および使用における一般的な問題について説明します。

問題 Description
可観測性データが表示されない エクスポートが有効になっていない、構成が正しくない、またはトークン解決が失敗するため、テレメトリは表示されません。
テナント ID またはエージェント ID が見つからない - スパンがスキップされました パーティショニングに必要な識別属性がない場合、スパンはエクスポート前に除外されます。
トークンの解決に失敗しました - エクスポートはスキップされたか、許可されていません リゾルバがトークンを返さなかったり例外が発生すると、エクスポートは失敗します。
HTTP 401 Unauthorized(認証が必要です) 認証は構文的に成功しますが、スコープ、種類、または有効期限のため、トークンはインジェストに対して無効です。
HTTP 403 Forbidden テナント ライセンスの不足、Agent 365 の登録の欠如、または必要な場合に必要な Observability のアクセス許可の欠如により、アクセスが拒否されます。
HTTP 403 Forbidden - エージェント ID の不一致 URL 内のエージェント ID がトークンによって表される ID と一致しない場合、要求は拒否されます。
HTTP 429 または 5xx エラー - 一時的なエラー 一時的な調整またはサービス側のエラーによってエクスポートが中断され、再試行のチューニングが必要になる場合があります。
エクスポートのタイムアウト ネットワーク待機時間またはエンドポイントの応答性が原因で、テレメトリ バッチが構成されたタイムアウト期間を超えています。
エクスポートは成功しますが、テレメトリは Defender または Purview に表示されません インジェストは完了しますが、ダウンストリームの可視性は、製品の前提条件によって遅延またはブロックされます。

Tip

Agent 365トラブルシューティングガイドには、Agent 365 の開発ライフサイクルの各段階に対応した高レベルのトラブルシューティング推奨事項、ベストプラクティス、トラブルシューティングコンテンツへのリンクが含まれています。

観測データが表示されません

症状:

  • エージェントが走っている
  • 管理センターにテレメトリはありません
  • エージェントの活動が見えません

根本原因:

  • 観測可能性は有効になっていません
  • 構成エラー
  • トークンリゾルバの問題

解決策: 問題解決のために以下の手順を試してみてください。

  • 可観測性エクスポーターが有効になっていることを確認する

    エージェント 365 エクスポーターを明示的に有効にする必要があります。 無効にすると、SDK はコンソール エクスポーターにフォールバックし、テレメトリはサービスに送信されません。 構成の詳細については、「 構成」を参照してください。

  • トークンリゾルバの設定を確認する

    エクスポートツールは、各エクスポートリクエストごとにアプリ専用の観測性トークンを返す有効なトークンリゾルバを必要とします。 リゾルバが欠けていたり、トークンを返さなかったり、例外をスローした場合、エクスポートはリクエストを送信しません。 コードにトークンリゾルバが実装されているか確認してください。 詳細については、「 トークン リゾルバー」を参照してください。

  • ログの誤りをチェックしてください

    詳細ログを有効にし、 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"
    
  • テレメトリのエクスポートを検証してください

    テレメトリが正常に生成・エクスポートされているか確認してください。

    • コンソール エクスポーターを追加し、テレメトリがローカルで生成されているかどうかを確認します。 コンソール エクスポーターを使用して出力を検証する方法の詳細については、「 ローカルで検証する」を参照してください。

テナント ID またはエージェント ID が見つからない - 範囲がスキップされました

症状: システムは自動的にスパンをドロップし、エクスポートしません。 一部の SDK では、スキップされたスパンの数や、"テナント/エージェント ID が見つかったスパンがありません" などのメッセージが記録されます。他のユーザーは、ログを記録せずに削除します。

解決方法:

  • エクスポートする前に、SDK パーティションはテナント ID とエージェント ID ごとにまたがっています。 システムは、テナント ID またはエージェント ID を持たないスパンを削除し、サービスに送信することはありません。
  • スパンを作成する前に、 BaggageBuilder がテナント ID とエージェント ID で設定されていることを確認します。 これらの値は OpenTelemetry コンテキストを通じて伝達され、手荷物スコープ内で作成されたすべてのスパンにアタッチされます。 プラットフォーム固有の API については、「 Baggage 属性」を参照してください。
  • ホスティング統合パッケージの手荷物ミドルウェアまたはターンコンテキストヘルパーを使用してIDを設定する場合、TurnContext アクティビティにエージェントIDを持つ有効な受信者がいることを確認してください。

トークン解決失敗 - エクスポートがスキップされるか未承認

症状: トークンリゾルバは nullを返す、空のトークンを返すか、エラーを投げます。 エクスポートはリクエストを送信せずに失敗し、エクスポーターは委任されたルートにフォールバックしません。

解決方法:

  • エクスポートエージェントインスタンスとテナントの最終的なアプリ専用の観測性トークンを返すリゾルバを提供します。
  • これらの値はトークン リゾルバーに渡されるため、 BaggageBuilderに正しいテナント ID とエージェント ID が使用されていることを確認します。
  • 言語ごとの立ち上げ動作を確認してください。 Node.js はリゾルバなしで Agent 365 のエクスポーターを有効にすると設定に失敗し、.NET はエクスポーターの構築に失敗し、リゾルバが設定されていない場合、Python はコンソール エクスポーターにフォールバックします。
  • リゾルバーがトークンを返す前にそのトークンを検証することを確認してください。 scpクレームの委任トークンや、誤ったaudience向けに発行されたトークンは拒否しなければなりません。

HTTP 401 認証されていません

症状: HTTP 401 でエクスポートが失敗する。 エクスポーターはこのエラーを再試行しません。

解決方法:

  • トークンのオーディエンスが 9b975845-388f-4429-889e-eab1ef63949c か api://9b975845-388f-4429-889e-eab1ef63949cかを確認してください。
  • トークンリゾルバが委任されたユーザートークン、 scp クレームのあるトークン、誤ったオーディエンス向けのトークン、期限切れのトークンを返していないか確認してください。
  • リゾルバが中間ブループリントのアサーションではなく、最終的なエージェントインスタンストークンを返すことを確認しましょう。

HTTP 403 Forbidden(アクセス禁止)

症状: HTTP 403 でエクスポートが失敗する。 エクスポーターはこのエラーを再試行しません。

根本原因: HTTP 403 エラーの原因が異なる場合があります。 次の解決策を順番に確認してください。

解決方法:

  • Missing license — テナントに、Microsoft 365 管理センター。

    • テスト - Microsoft 365 E7
    • Microsoft 365 E7
    • Microsoft エージェント 365 フロンティア
  • エージェント インスタンスは登録されていません — S2S ルートは、Agent365.Observability.OtelWrite ロールなしのアプリ専用トークンを、Agent 365 に登録されたエージェント インスタンスからのみ受け入れます。 そうでなければHTTP 403 insufficient_scopeを返します。 ブループリントエージェントの場合、 a365 setup all はエージェントインスタンスを登録します。 登録失敗をやり直すには a365 setup all --agent-registration-onlyを実行してください。 Microsoft Entraのアイデンティティを作成するだけではエージェントインスタンスは登録されません。

  • トークンはアプリ専用ではありません — トークンに scp claim が含まれていないことを確認してください。 S2Sルートはアプリ専用のトークンが必要です。

  • 未登録のアイデンティティにはアプリロールがありません — カスタムエンジンエージェントが使う標準的なアプリ登録を含む未登録アイデンティティには、 Agent365.Observability.OtelWrite アプリロールが必要です。 許可を付与するには、「許可を付与する」を参照してください。

  • 委任ルート上の SDK 1.x エージェント — 委任ルートには委任された Agent365.Observability.OtelWrite 権限と管理者の同意が必要ですが、a365 setup all は Blueprint エージェント用にはこれらを設定しません。 SDK 2.0にアップグレードするか、権限を付与してください。

  • エージェントIDがトークンと一致しない — HTTP 403 Forbidden - エージェントIDの不一致を参照。

HTTP 403 Forbidden — エージェント ID の不一致

症状: HTTP 403 でエクスポートが失敗し、Agent 365 トレース エンドポイントの呼び出しで 403 Forbidden エラーが発生したことを示す、agent-ID-mismatch のようなサーバー メッセージが返されます。

根本原因:このエラーは、エージェントの詳細を設定するときに、エージェント インスタンス クライアント ID ではなくブループリント クライアント ID を使用する場合に発生します。 エクスポート URL のエージェント ID がトークンによって承認された ID と一致しないため、トレース エンドポイントは要求を拒否します。

解決方法:

  • テナント ID が Agent 365 の許可されるテナントの一覧に追加されているかどうかを確認します。
  • エージェントの詳細は、(ブループリント クライアント ID ではなく) エージェント インスタンス クライアント ID で設定します。
  • 生成されたエクスポート URL を確認します。ロガーを有効にするとログに記録されます。 URL のエージェント ID がエージェント インスタンスのクライアント ID と一致であることを確認します。
  • SDK ごとに診断ログを有効にするには、「 ローカルで検証する」を参照してください。

HTTP 429 または 5xx エラー - 一時的なエラー

症状: エクスポートは、429 や 5xx などの一時的な HTTP 状態コードで失敗します。

解決方法:

  • 通常、これらのエラーは一時的なものであり、単独で解決されます。 Pythonおよび JavaScript SDK は、指数バックオフを使用して HTTP 408、429、および 5xx 状態コードで最大 3 回自動的に再試行します。 .NET SDK は自動的に再試行されません。
  • エラーが解決しない場合は、サービス正常性ダッシュボードを確認します。
  • バッチ間のスケジュールされた遅延を増やすか、最大エクスポート バッチ サイズを増やすことで、エクスポート頻度を減らすことを検討してください。 プラットフォームごとの構成オプションについては、「Agent365ExporterOptions」の表を参照してください。

エクスポートのタイムアウト

症状: エクスポートの試行がタイムアウトしました。

解決方法:

  • 監視エンドポイントへのネットワーク接続を確認します。
  • タイムアウトの既定値はプラットフォームによって異なります。 既定の HTTP 要求タイムアウトは 30 秒です。 一部の SDK には、再試行を含むエクスポート サイクル全体をカバーする個別の全体的なエクスポーター タイムアウトもあります。 プラットフォームごとの正確なプロパティと既定値については、「Agent365ExporterOptions」のの表を参照してください。
  • タイムアウトが頻繁に発生する場合は、エクスポーター オプションで関連するタイムアウト値を増やします。

エクスポートは成功しますが、テレメトリは Defender または Purview に表示されません

Symptoms: ログにはエクスポートが成功したことが示されますが、テレメトリはMicrosoft DefenderまたはMicrosoft Purviewに表示されません。

解決方法:

  • エクスポートされたログを表示するための前提条件を満たしていることを確認します。 Purview の場合、監査を有効にする必要があります。 Defenderの場合は、高度なハンティングを構成する必要があります。 詳細については、 エクスポートされたログの表示を参照してください。
  • エクスポートが成功した後、テレメトリの設定には数分かかる場合があります。 さらに調査する前に、データが表示されるまで待ちます。

可観測性のテストの詳細については、以下を参照してください。