MCP-serververkeer bewaken in Azure API Management

In dit artikel leert u welke telemetrie Azure API Management verzendt voor verkeer naar MCP-servers, hoe u payloadlogboekregistratie inschakelt voor hulpprogrammaargumenten en resultaten en hoe u query's uitvoert op de gegevens in Azure Monitor.  

Prerequisites

Standaardtelemetrie voor MCP-servers

Voor elke MCP-aanvraag schrijft API Management een Application Insights-aanvraagrij met MCP-specifieke dimensies en stelt het standaardduurveld in. U kunt latentie per hulpprogramma weergeven zonder dat u een configuratie hoeft te wijzigen. Zie de sectie MCP-telemetriereferentie verderop in dit artikel voor meer informatie.  

Note

MCP-telemetrie volgt de semantische OpenTelemetry-conventies voor generatieve AI, waarmee standaardnamen van telemetriekenmerken worden gedefinieerd (bijvoorbeeld gen_ai.*) zodat gegevens consistent zijn in verschillende hulpprogramma's.

Payloadregistratie inschakelen voor argumenten en resultaten

Api Management legt standaard niet de argumenten en resultaten van hulpprogramma-aanroepen vast. Om opname voor een MCP-server in te schakelen:

  1. Navigeer in de Azure portal naar uw API Management-instantie. 

  2. Selecteer API's>MCP-servers en selecteer vervolgens de MCP-server die u wilt registreren. 

  3. Selecteer Instellingen>Diagnostische logboeken

  4. Logboekregistratie van front-end- en back-endpayloads inschakelen. Selecteer Opslaan

Waarschuwing

Hulpprogrammaargumenten en -resultaten kunnen vragen, klantgegevens of geheimen bevatten. Schakel payloadlogboekregistratie alleen in voor de MCP-servers en -omgevingen waar u deze nodig hebt. Pas scrubbing of claim allowlists toe vóór de brede implementatie. 

Query's uitvoeren op MCP-verkeer met KQL

Hier volgen voorbeelden van Kusto-query's die u in Azure Monitor kunt uitvoeren om MCP-verkeer te analyseren. Vervang in deze voorbeelden indien sales-mcp van toepassing door de naam van uw MCP-server.

De laatste 50 hulpprogramma-aanroepen weergeven op een bepaalde 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

Top MCP-clients op basis van het aantal toolaanroepen

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- en p95-latentie per hulpprogramma gedurende de afgelopen 24 uur

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

Foutpercentage per hulpprogramma in de loop van de tijd

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

Argumenten controleren die naar een specifiek hulpprogramma zijn verzonden

Zorg er in dit scenario voor dat payloadlogboekregistratie is ingeschakeld voor de MCP-server.

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

Aangepaste dimensies toevoegen met het traceringsbeleid

Als u gegevens wilt vastleggen die zich niet in het ingebouwde schema bevinden, bijvoorbeeld een aangepaste x-agent-id header, een JWT-claim of een correlatie-id, gebruikt u het traceringsbeleid binnen het bereik van de MCP-server. 

Warning

Open context.Response.Body niet vanuit beleidsregels die aan het MCP-bereik zijn gekoppeld. MCP-antwoorden worden gestreamd en het lezen van de hoofdtekst breekt de stroom af. 

MCP-telemetriereferentie

De volgende dimensies worden weergegeven op elke MCP-aanvraag:

Property Beschrijving
gen_ai.operation.name JSON-RPC methode (hulpprogramma's/lijsten of hulpprogramma's/aanroepen).
gen_ai.conversation.id MCP-sessie-id.
network.protocol.name Protocolnaam (MCP).
network.protocol.version Protocolversie.
auth.type Methode voor binnenkomende verificatie.
user_agent.name MCP-clientnaam (bijvoorbeeld vscode of claude-desktop).
user_agent.version MCP-clientversie.
service.name MCP-servernaam.
service.version MCP-serverversie.
api.type Api-typediscriminatie (Mcp).
error.message Foutmelding, indien een fout optreedt.
error.type Foutcategorie bij een fout.

Aanvullende velden in hulpprogramma's/lijsten

Metrisch Beschrijving
ToolCount Het aantal hulpprogramma's dat in het antwoord is geretourneerd.

Aanvullende velden bij tools/aanroep

Property Beschrijving
gen_ai.tool.name Hulpprogramma dat de agent heeft aangeroepen.
gen_ai.tool.type Hulpprogrammatype.
gen_ai.tool.call.arguments JSON-argumenten Alleen aanwezig wanneer payloadlogging is ingeschakeld.
gen_ai.tool.call.result JSON-resultaat Alleen aanwezig wanneer payload-logging is ingeschakeld.