2015-02-04 4 views
1

Я пытаюсь метрики доступа для данного cloudServiceДоступ к Azure Метрика

У меня есть следующий код:

var metricsClient = new MetricsClient(new CertificateCloudCredentials(SubscriptionId, Certificate)); 

var resourceid = ResourceIdBuilder.BuildCloudServiceResourceId(cloudServiceName, deploymentName); 

var metricsDefinisions = metricsClient.MetricDefinitions.List(resourceid, null, null); 


// timeGrain must be 5, 60 or 720 minutes. 
TimeSpan timeGrain = TimeSpan.FromMinutes(60); 
DateTime startTime = DateTime.UtcNow.AddDays(-1); 
DateTime endTime = DateTime.UtcNow; 

var name = metricsDefinisions.MetricDefinitionCollection.Value.First().Name; 

var response = metricsClient.MetricValues.List(resourceid, new string[] { name }, String.Empty, timeGrain, startTime, endTime); 

Последняя строка возвращается с ошибкой -

{» Код ":" InvalidRequest "," Сообщение ":" Не удалось не получать показатели. "}

Что я могу делать неправильно?

ответ

1

из билета MSDN я уже открыт:

Проблема является resourceId используется для запроса метрики. Хотя вы можете запросить определения метрик на уровне развертывания (это позволяет обнаруживать, какие показатели доступны), вы не можете запрашивать метрики при развертывании.

Метрики доступны на уровне ролей и ролей.

Если вы посмотрите на каждый из metricDefinitions возвращенного вызова:

var metricsDefinisions = metricsClient.MetricDefinitions.List(resourceId, null, null); 

они должны иметь свойство ResourceIdSuffix для каждой метрики в списке. Это предоставляет информацию, необходимую для обнаружения местоположения метрики.

В основном они будут содержать значения, как роли \ RoleName и роли/RoleName/roleinstance/roleinstancename Если добавить это к RESOURCEID у вас уже есть (в качестве действительного URI), то вы должны получить метрические значения, связанные с этим определением. В вашем случае вам, вероятно, просто нужно добавить роль/roleinstance для вашего конкретного приложения.

Я смог изменить свой репродукт, где я смог воспроизвести проблему следующим образом и заставить ее работать. От:

var resourceId = ResourceIdBuilder.BuildCloudServiceResourceId("imtiazhclientcerttest", "3d2975a038db48d1bd9f40c3b14de459"); 

To:

var resourceId = ResourceIdBuilder.BuildCloudServiceResourceId("imtiazhclientcerttest", "3d2975a038db48d1bd9f40c3b14de459","WebRole1", "WebRole1_IN_0"); 
Смежные вопросы