簡體   English   中英

如何通過Azure REST API訪問Cosmos DB數據庫或集合指標?

[英]How do I access Cosmos DB database or collection metrics via the Azure REST API?

我正在嘗試使用Azure指標API來檢索Cosmos DB數據庫和集合的指標。

我能夠使用指標API來檢索Cosmos DB帳戶本身的指標,但是我無法弄清數據庫或集合的資源URL。

所以這有效:

public static async Task GetMetricsForCollection(ICosmosDBAccount cosmos, IDocumentClient client)
{   
    var uriBuilder = new System.Text.StringBuilder();

    uriBuilder.Append($"https://management.azure.com{cosmos.Id}");
    uriBuilder.Append($"/providers/microsoft.insights/metricDefinitions?api-version=2018-01-01");

    //...Use uri to access API over HTTP

但是我無法弄清楚如何在更深層次上獲得更具體的指標。

在MSDN社區上找到了這篇文章 ,說這應該可行

public static async Task GetMetricsForCollection(ICosmosDBAccount cosmos, IDocumentClient client)
{
    var db = client.CreateDatabaseQuery().AsEnumerable().First();

    var uriBuilder = new System.Text.StringBuilder();
    //Use the database resource Id to retrieve the metrics
    uriBuilder.Append($"https://management.azure.com{cosmos.Id}/databases/{db.ResourceId}");
    uriBuilder.Append($"/providers/microsoft.insights/metricDefinitions?api-version=2018-01-01");

    //...Use uri to access API over HTTP

但是它返回一個錯誤

Response status code does not indicate success: 400 
Microsoft.DocumentDB/databaseAccounts/databases is not a supported platform metric namespace, supported ones are 
Microsoft.LocationBasedServices/accounts,Microsoft.EventHub/namespaces,Microsoft.EventHub/clusters,Microsoft.ServiceBus/namespaces,
Microsoft.KeyVault/vaults,Microsoft.ClassicCompute/domainNames/slots/roles,Microsoft.ClassicCompute/virtualMachines,
Microsoft.Network/publicIPAddresses,Microsoft.Network/networkInterfaces,Microsoft.Network/loadBalancers,
Microsoft.Network/networkWatchers/connectionMonitors,Microsoft.Network/virtualNetworkGateways,Microsoft.Network/connections,
Microsoft.Network/applicationGateways,Microsoft.Network/dnszones,Microsoft.Network/trafficmanagerprofiles,
Microsoft.Network/expressRouteCircuits,Microsoft.EventGrid/eventSubscriptions,Microsoft.EventGrid/topics,Microsoft.EventGrid/extensionTopics,
Microsoft.Batch/batchAccounts,Microsoft.TimeSeriesInsights/environments,Microsoft.TimeSeriesInsights/environments/eventsources,
Microsoft.OperationalInsights/workspaces,Microsoft.Maps/accounts,Microsoft.Sql/servers,Microsoft.Sql/servers/databases,
Microsoft.Sql/servers/elasticpools,Microsoft.AnalysisServices/servers,Microsoft.Compute/virtualMachines,
Microsoft.Compute/virtualMachineScaleSets,Microsoft.Compute/virtualMachineScaleSets/virtualMachines,Microsoft.DataFactory/dataFactories,
Microsoft.DataFactory/factories,Microsoft.Storage/storageAccounts,Microsoft.Storage/storageAccounts/blobServices,
Microsoft.Storage/storageAccounts/tableServices,Microsoft.Storage/storageAccounts/queueServices,
Microsoft.Storage/storageAccounts/fileServices,Microsoft.Logic/workflows,Microsoft.Automation/automationAccounts,
Microsoft.ContainerService/managedClusters,Microsoft.StorageSync/storageSyncServices,Microsoft.ApiManagement/service,
Microsoft.DBforMySQL/servers,Microsoft.DocumentDB/databaseAccounts,Microsoft.ContainerRegistry/registries,Microsoft.Search/searchServices,
microsoft.insights/components,microsoft.insights/autoscalesettings,Microsoft.DataLakeStore/accounts,Microsoft.Web/serverFarms,
Microsoft.Web/sites,Microsoft.Web/sites/slots,Microsoft.Web/hostingEnvironments/multiRolePools,Microsoft.Web/hostingEnvironments/workerPools,
Microsoft.HDInsight/clusters,Microsoft.NetApp/netAppAccounts/capacityPools,Microsoft.NetApp/netAppAccounts/capacityPools/volumes,
test.shoebox/testresources,test.shoebox/testresources2,Microsoft.NotificationHubs/namespaces/notificationHubs,Microsoft.CustomerInsights/hubs,
CloudSimple.PrivateCloudIaaS/virtualMachines,Microsoft.StreamAnalytics/streamingjobs,Microsoft.CognitiveServices/accounts,
Microsoft.Cache/Redis,Microsoft.Devices/IotHubs,Microsoft.Devices/ElasticPools,Microsoft.Devices/ElasticPools/IotHubTenants,
Microsoft.Devices/ProvisioningServices,Microsoft.SignalRService/SignalR,Microsoft.DataLakeAnalytics/accounts,
Microsoft.DBforPostgreSQL/servers,Microsoft.ContainerInstance/containerGroups,Microsoft.Relay/namespaces,
Microsoft.PowerBIDedicated/capacities

(因此,您不必閱讀所有內容,我可以確認它沒有提及此API可以使用集合或數據庫。)

我也用db.Id而不是db.ResourceId了此錯誤。

我還嘗試使用uriBuilder.Append($"https://management.azure.com{cosmos.Id}/databases/{db.ResourceId}/collections/{collection.ResourceId}"); 但它也會生成相同的消息。

我很沮喪

在Azure門戶中瀏覽網絡跟蹤信息后,看起來好像有兩種Cosmos指標類型:使用microsoft.insights提供程序的指標和不使用microsoft.insights提供程序的指標。

對於使用提供程序的用戶,可以將數據庫和集合(人類可讀的名稱,也稱為.Id屬性)添加為度量標准API的過濾器:

public static async Task GetMetricsForCollection(ICosmosDBAccount cosmos, IDocumentClient client)
{
    var db = client.CreateDatabaseQuery().AsEnumerable().First();
    var dbUri = UriFactory.CreateDatabaseUri(db.Id);
    var collection = client.CreateDocumentCollectionQuery(dbUri).AsEnumerable().First();

    var uriBuilder = new System.Text.StringBuilder();
    //Use the database resource Id to retrieve the metrics
    uriBuilder.Append($"https://management.azure.com{cosmos.Id}");
    uriBuilder.Append($"/providers/microsoft.insights/metricDefinitions?api-version=2018-01-01");
    uriBuilder.Append($"&$filter=DatabaseName eq '{db.Id}' and CollectionName eq '{collection.Id}'");

對於那些沒有的用戶,可以將/metrics添加到鏈接的論壇帖子建議的資源URI中。 在這種情況下,您需要使用.ResourceId屬性。

看起來還需要一個filter參數。 我只是從Azure門戶的網絡跟蹤中復制和粘貼,因為我不相信這在任何地方都有記錄,但最終看起來像

public static async Task GetMetricsForCollection(ICosmosDBAccount cosmos, IDocumentClient client)
{
    var db = client.CreateDatabaseQuery().AsEnumerable().First();
    var dbUri = UriFactory.CreateDatabaseUri(db.Id);
    var collection = client.CreateDocumentCollectionQuery(dbUri).AsEnumerable().First();

    var uriBuilder = new System.Text.StringBuilder();

    uriBuilder.Append($"https://management.azure.com{cosmos.Id}");
    uriBuilder.Append($"/databases/{db.ResourceId}/collections/{collection.ResourceId}/metrics?api-version=2014-04-01");
    uriBuilder.Append($"&$filter=(name.value eq 'Available Storage' or name.value eq 'Data Size' or name.value eq 'Index Size') and endTime eq 2018-06-22T12%3A35%3A00.000Z and startTime eq 2018-06-22T11%3A35%3A00.000Z and timeGrain eq duration'PT5M'");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM