Azure API Management'da MCP sunucu trafiğini izleme

Bu makalede, Azure API Management’in MCP sunucularına yönelik trafik için hangi telemetri verilerini yaydığını, araç bağımsız değişkenleri ve sonuçları için yüklerin günlüğe kaydedilmesini nasıl etkinleştireceğinizi ve verileri Azure İzleyici’de nasıl sorgulayacağınızı öğreneceksiniz.  

Prerequisites

MCP sunucuları için varsayılan telemetri

HER MCP isteği için API Management, MCP'ye özgü boyutlara sahip bir Application Insights istek satırı yazar ve standart süre alanını ayarlar. Herhangi bir yapılandırmayı değiştirmeden araç başına gecikme süresi grafiği oluşturabilirsiniz. Ayrıntılar için bu makalenin devamında yer alan MCP telemetri başvurusu bölümüne bakın.  

Note

MCP telemetrisi, verinin araçlar arasında tutarlı olması için standart telemetri öznitelik adlarını (örneğin) gen_ai.*tanımlayan, üretken yapay zeka için OpenTelemetry semantik kurallarını izler.

Bağımsız değişkenler ve sonuçlar için yük kaydını etkinleştir

API Management, varsayılan olarak araç çağrılarının parametrelerini ve sonuçlarını kaydetmez. BIR MCP sunucusu için yakalamayı etkinleştirmek için:

  1. Azure portalında API Management örneğine gidin. 

  2. API'ler>MCP sunucuları'nı seçin, ardından günlüğe kaydetmek istediğiniz MCP sunucusunu seçin. 

  3. Ayarlar>Tanılama Günlükleri'ni seçin. 

  4. Ön uç ve arka uç yük kaydını etkinleştirin. Kaydetseçeneğini seçin. 

Dikkat

Araç bağımsız değişkenleri ve sonuçları, istemler, müşteri verileri veya gizli bilgiler içerebilir. Yük günlüğünü yalnızca ihtiyacınız olan MCP sunucuları ve ortamları için etkinleştirin. Geniş kapsamlı dağıtımdan önce temizleme veya talep izin listelerini uygulayın. 

KQL ile MCP trafiğini sorgulama

Aşağıda, MCP trafiğini analiz etmek için Azure İzleyici çalıştırabileceğiniz örnek Kusto sorguları yer alır. Bu örneklerde, uygun olan yerlerde sales-mcp öğesini MCP sunucunuzun adıyla değiştirin.

Belirli bir MCP sunucusundaki son 50 araç çağrısını listeleme

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

Araç çağrısı hacmine göre en yüksek MCP istemcileri

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

Son 24 saat içinde araç başına p50 ve p95 gecikme süresi

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

Zaman içinde araç başına hata oranı

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

Belirli bir araca gönderilen argümanları inceleme

Bu senaryoda, MCP sunucusu için yük günlüğünün etkinleştirildiğinden emin olun.

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

İzleme ilkesiyle özel boyutlar ekleyin

Yerleşik şemada olmayan verileri (örneğin, özel x-agent-id üst bilgi, JWT talebi veya bağıntı kimliği) yakalamak için MCP sunucusunun kapsamında izleme ilkesini kullanın. 

Warning

MCP kapsamına bağlı ilkelerden context.Response.Body öğesine erişmeyin. MCP yanıtları akış olarak iletilir ve yanıt gövdesinin okunması bu akışı bozar. 

MCP telemetri referansı

Her MCP isteğinde aşağıdaki boyutlar görünür:

Mülkiyet Açıklama
gen_ai.operation.name JSON-RPC yöntemi (tools/list veya tools/call).
gen_ai.conversation.id MCP oturum kimliği.
network.protocol.name Protokol adı (MCP).
network.protocol.version Protokol sürümü.
auth.type Gelen kimlik doğrulama yöntemi.
user_agent.name MCP istemci adı (örneğin, vscode veya claude-desktop).
user_agent.version MCP istemci sürümü.
service.name MCP sunucu adı.
service.version MCP sunucu sürümü.
api.type API tür tanımlayıcısı (Mcp).
error.message Hata dizesi, başarısızlık durumunda.
error.type Hata kategorisi, başarısızlık durumunda.

Araçlarda/listede ek alanlar

Metric Açıklama
ToolCount Yanıtta döndürülen araç sayısı.

Araçlarda/aramada ek alanlar

Mülkiyet Açıklama
gen_ai.tool.name Ajanın çağırdığı araç.
gen_ai.tool.type Araç türü.
gen_ai.tool.call.arguments Argümanlar JSON. Yalnızca yük kaydı etkinleştirildiğinde bulunur.
gen_ai.tool.call.result Sonuç JSON. Yalnızca yük kaydı etkinleştirildiğinde mevcuttur.