Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie, welche Telemetrie Azure API Management für den Datenverkehr an MCP-Server ausgibt, wie Sie die Nutzlastprotokollierung für Toolargumente und -ergebnisse aktivieren und wie Sie die Daten in Azure Monitor abfragen.
Prerequisites
Eine API-Verwaltungsinstanz mit mindestens einem MCP-Server. Siehe Verfügbarmachen einer REST-API als MCP-Server oder Verfügbarmachen eines vorhandenen MCP-Servers.
Eine Application Insights-Ressource, die mit Ihrer API-Verwaltungsinstanz verknüpft ist. Weitere Informationen finden Sie unter Configure Application Insights for Azure API Management.
Standard-Telemetrie für MCP-Server
Für jede MCP-Anfrage schreibt API Management eine Zeile in die Anforderungstabelle von Application Insights mit MCP-spezifischen Dimensionen und setzt das Standardfeld für die Dauer. Sie können die Latenz pro Tool erstellen, ohne eine Konfiguration zu ändern. Ausführliche Informationen finden Sie im Abschnitt zur MCP-Telemetriereferenz weiter unten in diesem Artikel.
Note
MCP-Telemetrie folgt den OpenTelemetry-Semantikkonventionen für generative KI, die Standardmäßige Telemetrie-Attributnamen (z. B. ) definieren, gen_ai.*damit Daten über Tools hinweg konsistent sind.
Nutzdatenprotokollierung für Argumente und Ergebnisse aktivieren
Standardmäßig erfasst die API-Verwaltung nicht die Argumente und Ergebnisse von Toolaufrufen. So aktivieren Sie die Erfassung für einen MCP-Server:
Wechseln Sie im Azure-Portal zu Ihrer API-Verwaltungsinstanz.
Wählen Sie APIs>MCP-Server und dann den MCP-Server aus, den Sie protokollieren möchten.
Wählen Sie Einstellungen>Diagnoseprotokolle aus.
Aktivieren Sie die Frontend- und Back-End-Nutzlastprotokollierung. Wählen Sie Speichern aus.
Vorsicht
Toolargumente und Ergebnisse können Eingabeaufforderungen, Kundendaten oder geheime Schlüssel enthalten. Aktivieren Sie die Nutzlastprotokollierung nur für die MCP-Server und -Umgebungen, in denen Sie sie benötigen. Führen Sie vor dem allgemeinen Rollout eine Bereinigung durch oder wenden Sie Positivlisten für Ansprüche an.
MCP-Datenverkehr mit KQL abfragen
Im Folgenden finden Sie Beispiel-Kusto-Abfragen, die Sie in Azure Monitor ausführen können, um MCP-Datenverkehr zu analysieren. Ersetzen Sie in diesen Beispielen sales-mcp gegebenenfalls durch den Namen Ihres MCP-Servers.
Auflisten der letzten 50 Toolaufrufe auf einem bestimmten 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
MCP-Clients mit den meisten Tool-Aufrufen
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- und p95-Latenz pro Tool in den letzten 24 Stunden
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
Fehlerrate pro Tool im Laufe der Zeit
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
Überprüfen von Argumenten, die an ein bestimmtes Tool gesendet werden
Stellen Sie für dieses Szenario sicher, dass die Nutzlastprotokollierung für den MCP-Server aktiviert ist.
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"]
Benutzerdefinierte Dimensionen mit der Trace-Richtlinie hinzufügen
Verwenden Sie die trace-Richtlinie im Gültigkeitsbereich des MCP-Servers, um Daten zu erfassen, die nicht im integrierten Schema enthalten sind – zum Beispiel einen benutzerdefinierten x-agent-id Header, einen JWT-Claim oder eine Korrelations-ID.
Warning
Greifen Sie nicht über Richtlinien, die dem MCP-Bereich zugeordnet sind, auf context.Response.Body zu. MCP-Antworten werden als Stream übertragen, und das Lesen des Antworttexts unterbricht diese Übertragung.
MCP-Telemetriereferenz
Die folgenden Dimensionen werden für jede MCP-Anforderung angezeigt:
| Eigentum | Description |
|---|---|
gen_ai.operation.name |
die JSON-RPC-Methode (tools/list oder tools/call). |
gen_ai.conversation.id |
MCP-Sitzungs-ID. |
network.protocol.name |
Protokollname (MCP). |
network.protocol.version |
Protokollversion. |
auth.type |
Methode für die eingehende Authentifizierung. |
user_agent.name |
MCP-Clientname (z. B. vscode oder claude-desktop). |
user_agent.version |
MCP-Client-Version. |
service.name |
Name des MCP-Servers. |
service.version |
Version des MCP-Servers. |
api.type |
API-Typ diskriminator (Mcp). |
error.message |
Fehlerzeichenfolge bei Fehler |
error.type |
Fehlerkategorie im Fehlerfall. |
Zusätzliche Felder auf tools/list
| Metric | Description |
|---|---|
ToolCount |
Anzahl der in der Antwort zurückgegebenen Werkzeuge. |
Zusätzliche Felder für Tools/Aufrufe
| Eigentum | Description |
|---|---|
gen_ai.tool.name |
Tool, das der Agent aufgerufen hat. |
gen_ai.tool.type |
Tooltyp. |
gen_ai.tool.call.arguments |
Argumente in JSON Nur vorhanden, wenn die Nutzlastprotokollierung aktiviert ist. |
gen_ai.tool.call.result |
Ergebnis-JSON. Nur verfügbar, wenn die Nutzlastprotokollierung aktiviert ist. |