【问题标题】:How do I access Cosmos DB database or collection metrics via the Azure REST API?如何通过 Azure REST API 访问 Cosmos DB 数据库或收集指标?
【发布时间】:2018-06-22 11:53:30
【问题描述】:

我正在尝试使用 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

但我不知道如何在更深层次上获得更具体的指标。

found this post on the MSDN Community 说这应该可以工作

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 azure-cosmosdb azure-resource-manager


    【解决方案1】:

    在 Azure 门户中探索网络跟踪后,看起来有两种类型的 Cosmos 指标:使用 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'");
    

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 2022-01-02
      • 1970-01-01
      • 2019-02-22
      • 2022-07-04
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      相关资源
      最近更新 更多