Как получить размер базы данных / контейнера Azure Cosmos DB? - PullRequest
2 голосов
/ 10 апреля 2020

В настоящее время я пытаюсь получить Azure Cosmos DB SQL Объем данных учетной записи API. Я нашел решение с помощью команды PowerShell Get-AzMetri c. Кто-нибудь знает, как это можно решить с помощью. NET SDK или REST API?

enter image description here

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Кто-нибудь знает, как это можно решить с помощью. NET SDK или REST API?

Azure PowerShell - это просто оболочка над REST API. Если вы запускаете командлет PowerShell с параметром -Debug, вы должны увидеть, как командлет выполняет вызов API REST для извлечения данных.

Например, если я отслеживаю запрос / ответ через Azure Portal для проверки размера хранилища моей базы данных я заметил, что отправляется следующий запрос:

https://management.azure.com/subscriptions/<my-subscription-id>/resourceGroups/<my-resource-group>/providers/Microsoft.DocumentDb/databaseAccounts/<my-cosmosdb-account-name>/databases/<my database rid e.g 2942BA==>/metrics?
api-version=2014-04-01&
$filter=(name.value eq 'Available Storage' or name.value eq 'Data Size' or name.value eq 'Index Size') 
and endTime eq 2020-04-10T09%3A10%3A00.000Z 
and startTime eq 2020-04-10T08%3A10%3A00.000Z and timeGrain eq duration'PT5M'

Вы можете сделать то же самое и узнать точный выполняемый вызов API REST.

1 голос
/ 10 апреля 2020

Остальные API предоставляются Gaurav, и вы можете получить метрики монитора и определения метри c, используя Azure. NET SDK релизы 0.16.0-preview и 0.16.1-preview.

Следующий код это получить Azure Размер базы данных Cosmos DB. Более подробную информацию вы можете найти в этой статье .

var tenantId = "xxxxxxxx";
var clientSecret = "xxxxxxxx";
var clientId = "xxxxxxxx";
var subscriptionId = "xxxxxxxx";
var serviceCreds = ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret).GetAwaiter().GetResult();
var monitorClient = new MonitorClient(serviceCreds);
monitorClient.SubscriptionId = subscriptionId;
var resourceUrl = $"subscriptions/xxxxxxxx/resourceGroups/xxxxxxxx/providers/Microsoft.DocumentDB/databaseAccounts/xxxxxxxx/databases/xxxxxx/metrics";
var metricNames = "name.value eq 'Data Size'"; 
string timeGrain = " and timeGrain eq duration'PT5M'";
string startDate = string.Format(" and startTime eq {0}", DateTime.Now.AddHours(-3).ToString("o"));
string endDate = string.Format(" and endTime eq {0}", DateTime.Now.ToString("o"));
var odataFilterMetrics = new ODataQuery<Metric>(
    string.Format(
      "{0}{1}{2}{3}",
      metricNames,
      timeGrain,
      startDate,
      endDate));
var metrics = monitorClient.Metrics.ListAsync(resourceUrl, odataFilterMetrics).Result;
.
...