Azure Fluent API — AppServicePlanOperations.ListMetricsWithHttpMessagesAsync возвращает InternalServerError

Документацию по этому методу можно найти по адресу здесь

Вот мой код:

        var appServiceManager = AppServiceManager.Authenticate(credentials, subscriptionId);
        var filter = "(name.value eq 'CpuPercentage') and startTime eq '2017-10-06T08:00:00Z' and endTime eq '2017-10-06T09:00:00Z' and timeGrain eq duration'PT1H'";
        var metrics = appServiceManager.AppServicePlans.Inner.ListMetricsWithHttpMessagesAsync("myResourceGroupName", "myAppServicePlanName", false, filter).Result;    

Это единственное подробное исключение, которое я получаю:

Произошла одна или несколько ошибок. (Операция вернула недопустимый код состояния "InternalServerError") ---> Microsoft.Rest.Azure.CloudException: Операция вернула недопустимый код состояния "InternalServerError"

В документации сказано, что filter является необязательным, а это не так (я получаю BadRequest, если передаю null). Я сейчас предоставляю один, и теперь он выдает внутреннюю ошибку сервера.

Я открыл вопрос в репозитории azure-sdk-for-net, но я надеюсь, что кто-то еще увидит, делаю ли я какие-либо ошибки в моей строке filter.


person AMoghrabi    schedule 09.10.2017    source источник


Ответы (1)


Я также могу воспроизвести эту проблему на своей стороне при использовании кода, который вы упомянули. Я нашел другой Microsoft.Azure.Management.Monitor .Fluent SDK можно использовать для отображения показателей ресурса, это бета-версия. Делаю демо на своей стороне, у меня работает корректно.

using Microsoft.Azure.Management.Fluent.ServiceBus;
using Microsoft.Azure.Management.Fluent.ServiceBus.Models;
using Microsoft.Rest.Azure.Authentication;
using Microsoft.Rest.Azure.OData;

namespace MonitorDemo
{
    class Program
    {
        static void Main(string[] args)
        {

            var azureTenantId = "tenant Id";
            var azureSecretKey = "secret key";
            var azureAppId = "azure AD application Id";
            var subscriptionId = "subscription Id";
            var resourceGroup = "resource group name";
            var servicePlanName = "service plan name";
            var serviceCreds = ApplicationTokenProvider.LoginSilentAsync(azureTenantId, azureAppId, azureSecretKey).Result;
            MonitorClient monitorClient = new MonitorClient(serviceCreds) { SubscriptionId = subscriptionId };
            var resourceUri = $"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/serverfarms/{servicePlanName}"; // resource id
            var metricNames = "name.value eq 'CpuPercentage'"; // could be concatenated with " or name.value eq '<another name>'" ... inside parentheses for more than one name.

            // The $filter can include time grain, which is optional when metricNames is present. The is forms a conjunction with the list of metric names described above.
            string timeGrain = " and timeGrain eq duration'PT5M'";

            // The $filter can also include a time range for the query; also a conjunction with the list of metrics and/or the time grain. Defaulting to 3 hours before the time of execution for these datetimes
            string startDate = " and startTime eq 2017-10-06T08:00:00Z";
            string endDate = " and endTime eq 2017-10-06T09:00:00Z";

            var odataFilterMetrics = new ODataQuery<MetricInner>(
                $"{metricNames}{timeGrain}{startDate}{endDate}");

            var metrics = monitorClient.Metrics.ListWithHttpMessagesAsync(resourceUri, odataFilterMetrics).Result;
        }
    }
}

введите здесь описание изображения

packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Azure.Management.Monitor.Fluent" version="1.3.0-beta" targetFramework="net47" />
  <package id="Microsoft.Azure.Management.ResourceManager.Fluent" version="1.3.0" targetFramework="net47" />
  <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.28.3" targetFramework="net47" />
  <package id="Microsoft.Rest.ClientRuntime" version="2.3.9" targetFramework="net47" />
  <package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.10" targetFramework="net47" />
  <package id="Microsoft.Rest.ClientRuntime.Azure.Authentication" version="2.3.1" targetFramework="net47" />
  <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net47" />
</packages>
person Tom Sun - MSFT    schedule 09.10.2017
comment
Спасибо, Том, что нашли время ответить. Я собираюсь поиграть с вашими выводами, и если они удовлетворят мои потребности, я приму ваш ответ. - person AMoghrabi; 11.10.2017
comment
Может быть, я упускаю что-то глупое, но я не могу разрешить пространство имен для MonitorClient - person Rahul Patel; 02.08.2018
comment
@RahulPatel У меня такая же проблема, вам удалось ее решить? - person user2088807; 27.08.2019