Övervaka MCP-servertrafik i Azure API Management

I den här artikeln får du lära dig vilka telemetri Azure API Management genererar för trafik till MCP-servrar, hur du aktiverar nyttolastloggning för verktygsargument och resultat samt hur du frågar efter data i Azure Monitor.  

Prerequisites

Standardtelemetri för MCP-servrar

För varje MCP-begäran skapar API Management en rad i Application Insights-tabellen för begäranden med MCP-specifika dimensioner och anger standardfältet för varaktighet. Du kan visa latens per verktyg i ett diagram utan att ändra några inställningar. Mer information finns i referensavsnittet mcp-telemetri senare i den här artikeln.  

Note

MCP-telemetri följer OpenTelemetry-semantiska konventioner för generativ AI, som definierar standardattributnamn för telemetri (till exempel gen_ai.*) så att data är konsekventa mellan olika verktyg.

Aktivera loggning av nyttolast för argument och resultat

API Management samlar som standard inte in argumenten och resultatet av verktygsanrop. Så här aktiverar du avbildning för en MCP-server:

  1. I Azure-portalen går du till din API Management-instans. 

  2. Välj API:er>MCP-servrar och välj sedan den MCP-server som du vill logga. 

  3. Välj Inställningar>Diagnostikloggar

  4. Aktivera loggning av front-end- och back-end-payload. Välj Spara

Försiktighet

Verktygsargument och resultat kan innehålla frågor, kunddata eller hemligheter. Aktivera endast nyttolastloggning för MCP-servrar och miljöer där du behöver den. Använd rensnings- eller anspråkslista före bred distribution. 

Fråga efter MCP-trafik med KQL

Följande är exempel på Kusto-frågor som du kan köra i Azure Monitor för att analysera MCP-trafik. I de här exemplen ersätter du sales-mcp med namnet på mcp-servern där det är tillämpligt.

Lista de senaste 50 verktygsanropen på en viss MCP-server

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

De främsta MCP-klienterna efter verktygsanropsvolym

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

p50 och p95 svarstid per verktyg under de senaste 24 timmarna

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

Felfrekvens per verktyg över tid

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

Granska argument som skickas till ett specifikt verktyg

I det här scenariot kontrollerar du att nyttolastloggning är aktiverad för MCP-servern.

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

Lägg till anpassade dimensioner med spårningsprincipen

Om du vill samla in data som inte finns i det inbyggda schemat – till exempel ett anpassat x-agent-id huvud, ett JWT-anspråk eller ett korrelations-ID – använder du spårningsprincipen i MCP-serverns omfång. 

Varning

Använd inte context.Response.Body via principer som är kopplade till MCP-omfånget. MCP-svar strömmar, och att läsa svarsinnehållet bryter strömningen. 

MCP-telemetrireferens

Följande dimensioner visas på varje MCP-begäran:

Fastighet Beskrivning
gen_ai.operation.name JSON-RPC -metoden (verktyg/lista eller verktyg/anrop).
gen_ai.conversation.id MCP-sessions-ID.
network.protocol.name Protokollnamn (MCP).
network.protocol.version Protokollversion.
auth.type Inkommande autentiseringsmetod.
user_agent.name MCP-klientnamn (till exempel vscode eller claude-desktop).
user_agent.version MCP-klientversion.
service.name MCP-servernamn.
service.version MCP-serverversion.
api.type API-typdiskriminator (Mcp).
error.message Felsträng vid misslyckande.
error.type Felkategori vid misslyckande.

Ytterligare fält i verktyg/lista

Metric Beskrivning
ToolCount Antal verktyg som returneras i svaret.

Ytterligare fält i verktyg/anrop

Fastighet Beskrivning
gen_ai.tool.name Verktyg som agenten anropade.
gen_ai.tool.type Verktygstyp.
gen_ai.tool.call.arguments Argument JSON. Finns endast när loggning av nyttolastdata är aktiverad.
gen_ai.tool.call.result JSON-resultat Visas endast när nyttolastloggning är aktiverad.