この記事では、MCP サーバーへのトラフィックについて Azure API Management が出力するテレメトリ、ツールの引数と結果のペイロード ログを有効にする方法、および Azure Monitor でデータをクエリする方法について説明します。
Prerequisites
少なくとも 1 つの MCP サーバーを持つ API Management インスタンス。 「REST API を MCP サーバーとして公開する」または「既存の MCP サーバーを公開する」を参照してください。
API Management インスタンスにリンクされている Application Insights リソース。 詳細については、「Azure API Management用に Application Insights を構成する」を参照してください。
MCP サーバーの既定のテレメトリ
すべての MCP 要求について、API Management は、MCP 固有のディメンションを持つ Application Insights 要求行を書き込み、標準期間フィールドを設定します。 構成を変更することなく、ツールごとの待機時間をグラフにすることができます。 詳細については、この記事の後半の 「MCP テレメトリ リファレンス 」セクションを参照してください。
Note
MCP テレメトリは、生成 AI の OpenTelemetry セマンティック規則に従います。これは、標準のテレメトリ属性名 ( gen_ai.* など) を定義するため、ツール間でデータの整合性が保たれます。
引数と結果のペイロード ログを有効にする
既定では、API Management はツール呼び出しの引数と結果をキャプチャしません。 MCP サーバーのキャプチャを有効にするには:
Azure ポータルで、API Management インスタンスに移動します。
API>MCP サーバーを選択し、ログに記録する MCP サーバーを選択します。
[設定]>[Diagnostic Logs]\(診断ログ\) を選択します。
フロントエンドとバックエンドのペイロードのログ記録を有効にします。 保存を選びます。
注意事項
ツールの引数と結果には、プロンプト、顧客データ、またはシークレットを含めることができます。 必要な MCP サーバーと環境に対してのみペイロード ログを有効にします。 本格展開の前に、スクラビングまたはクレーム許可リストを適用してください。
KQL を使用して MCP トラフィックにクエリを実行する
MCP トラフィックを分析するためにAzure Monitorで実行できる Kusto クエリの例を次に示します。 これらの例では、 sales-mcp を該当する場合は MCP サーバーの名前に置き換えます。
特定の MCP サーバーで最後に 50 回のツール呼び出しを一覧表示する
requests
| where customDimensions["api.type"] == "Mcp"
and customDimensions["service.name"] == "sales-mcp"
and customDimensions["gen_ai.operation.name"] == "tools/call"
| project timestamp,
tool = customDimensions["gen_ai.tool.name"],
session = customDimensions["gen_ai.conversation.id"],
client = strcat(customDimensions["user_agent.name"], "/",
customDimensions["user_agent.version"]),
durationMs = duration,
success
| order by timestamp desc
| take 50
ツール呼び出しボリューム別の上位 MCP クライアント
requests
| where customDimensions["api.type"] == "Mcp"
and customDimensions["gen_ai.operation.name"] == "tools/call"
| summarize calls = count()
by client = strcat(customDimensions["user_agent.name"], "/",
customDimensions["user_agent.version"])
| top 10 by calls desc
過去 24 時間のツールあたりの p50 と p95 の待機時間
requests
| where customDimensions["api.type"] == "Mcp"
and customDimensions["gen_ai.operation.name"] == "tools/call"
and timestamp > ago(24h)
| summarize p50 = percentile(duration, 50),
p95 = percentile(duration, 95),
calls = count()
by tool = tostring(customDimensions["gen_ai.tool.name"])
| order by p95 desc
時間の経過に伴うツールごとのエラー率
requests
| where customDimensions["api.type"] == "Mcp"
and customDimensions["gen_ai.operation.name"] == "tools/call"
| summarize total = count(),
failures = countif(success == false)
by bin(timestamp, 5m),
tool = tostring(customDimensions["gen_ai.tool.name"])
| extend errorRate = todouble(failures) / total
| render timechart
特定のツールに送信された引数を検査する
このシナリオでは、MCP サーバーに対してペイロード ログが有効になっていることを確認します。
requests
| where customDimensions["api.type"] == "Mcp"
and customDimensions["service.name"] == "sales-mcp"
and customDimensions["gen_ai.tool.name"] == "create_quote"
and timestamp > ago(1h)
| project timestamp,
session = customDimensions["gen_ai.conversation.id"],
args = customDimensions["gen_ai.tool.call.arguments"],
result = customDimensions["gen_ai.tool.call.result"]
トレース ポリシーを使用してカスタム ディメンションを追加する
組み込みスキーマにないデータ (カスタム x-agent-id ヘッダー、JWT 要求、関連付け ID など) をキャプチャするには、MCP サーバーのスコープで トレース ポリシーを使用します。
Warning
MCP スコープにアタッチされているポリシーから context.Response.Body にアクセスしないでください。 MCP 応答がストリーミングされ、本文の読み取りによってストリームが中断されます。
MCP テレメトリ リファレンス
MCP 要求ごとに次のディメンションが表示されます。
| プロパティ | Description |
|---|---|
gen_ai.operation.name |
JSON-RPC メソッド (ツール/リストまたはツール/呼び出し)。 |
gen_ai.conversation.id |
MCP セッション ID。 |
network.protocol.name |
プロトコル名 (MCP)。 |
network.protocol.version |
プロトコルのバージョン。 |
auth.type |
受信認証方法。 |
user_agent.name |
MCP クライアント名 (vscode や claude-desktop など)。 |
user_agent.version |
MCP クライアントのバージョン。 |
service.name |
MCPサーバー名。 |
service.version |
MCP サーバーのバージョン。 |
api.type |
API 型識別子 (Mcp)。 |
error.message |
失敗時のエラー文字列。 |
error.type |
エラー カテゴリ (失敗時)。 |
ツール/リストの追加フィールド
| Metric | Description |
|---|---|
ToolCount |
応答で返されるツールの数。 |
ツール/呼び出しの追加フィールド
| プロパティ | Description |
|---|---|
gen_ai.tool.name |
エージェントが呼び出したツール。 |
gen_ai.tool.type |
ツールの種類。 |
gen_ai.tool.call.arguments |
引数 JSON。 ペイロード ログが有効な場合にのみ存在します。 |
gen_ai.tool.call.result |
結果 JSON。 ペイロード ログが有効な場合にのみ存在します。 |