Monitorování provozu serveru MCP v Azure API Management

V tomto článku se dozvíte, jakou telemetrii Azure API Management generuje pro provoz směrovaný na servery MCP, jak povolit protokolování datové části pro argumenty nástrojů a výsledky a jak se na tato data dotazovat v Azure Monitoru.  

Předpoklady

Výchozí telemetrie pro servery MCP

Pro každý požadavek MCP služba API Management zapíše řádek žádostí Application Insights s dimenzemi specifickými pro MCP a nastaví standardní pole doby trvání. Latenci jednotlivých nástrojů můžete zobrazit beze změny konfigurace. Podrobnosti najdete v části s referenčními informacemi k telemetrii MCP dále v tomto článku.  

Note

Telemetrie MCP se řídí sémantickou konvencí OpenTelemetry pro generování umělé inteligence, která definuje standardní názvy atributů telemetrie (například gen_ai.*), takže data jsou konzistentní napříč nástroji.

Povolte protokolování datové části pro argumenty a výsledky

Ve výchozím nastavení služba API Management nezachytává argumenty a výsledky volání nástrojů. Povolení zachytávání pro server MCP:

  1. Na portálu Azure přejděte do instance služby API Management. 

  2. Vyberte API>servery MCP a pak vyberte server MCP, který chcete protokolovat. 

  3. Vyberte Nastavení>diagnostických protokolů. 

  4. Povolte protokolování payloadů pro frontend i backend. Vyberte Uložit. 

Caution

Argumenty a výsledky nástrojů můžou zahrnovat výzvy, zákaznická data nebo tajné kódy. Povolte protokolování payloadu pouze pro servery MCP a prostředí, kde ho potřebujete. Před plošným nasazením použijte scrubování nebo seznamy povolených deklarací identity. 

Dotazování provozu MCP pomocí KQL

Následují ukázkové dotazy Kusto, které můžete spustit v Azure Monitor k analýze provozu MCP. V těchto příkladech nahraďte sales-mcp název serveru MCP tam, kde je to možné.

Zobrazení seznamu posledních 50 volání nástroje na daném serveru MCP

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

Nejlepší klienti MCP podle objemu volání nástrojů

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

Latence p50 a p95 na nástroj za posledních 24 hodin

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

Míra chyb jednotlivých nástrojů v průběhu času

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

Kontrola argumentů odeslaných do konkrétního nástroje

V tomto scénáři se ujistěte, že je na serveru MCP povoleno protokolování obsahu přenášených dat.

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

Přidání vlastních dimenzí pomocí zásad trasování

Chcete-li zachytit data, která nejsou součástí předdefinovaného schématu – například vlastní hlavičku x-agent-id, atribut JWT nebo ID korelace – použijte zásadu trasování v rámci serveru MCP. 

Warning

Nepřistupujte k context.Response.Body pomocí zásad připojených k rozsahu MCP. Odpovědi MCP se streamují a čtení textu přeruší datový proud. 

Referenční informace k telemetrii MCP

Na každém požadavku MCP se zobrazí následující dimenze:

Vlastnictví Description
gen_ai.operation.name metoda JSON-RPC (tools/list nebo tools/call).
gen_ai.conversation.id ID relace MCP.
network.protocol.name Název protokolu (MCP).
network.protocol.version Verze protokolu.
auth.type Metoda příchozího ověřování
user_agent.name Název klienta MCP (například vscode nebo claude-desktop).
user_agent.version Verze klienta MCP.
service.name Název MCP serveru.
service.version Verze serveru MCP.
api.type Diskriminátor typu rozhraní API (Mcp).
error.message Chybový řetězec v případě selhání.
error.type Kategorie chyb při selhání

Další pole v nástrojích nebo seznamu

Metric Description
ToolCount Počet nástrojů vrácených v odpovědi

Další pole v tools/call

Vlastnictví Description
gen_ai.tool.name Nástroj, který agent vyvolal.
gen_ai.tool.type Typ nástroje.
gen_ai.tool.call.arguments Argumenty ve formátu JSON. Je přítomno pouze tehdy, pokud je povoleno protokolování datové části.
gen_ai.tool.call.result Výsledek JSON. Je přítomna pouze tehdy, když je povoleno protokolování datové zátěže.