访问 Azure 指标
Accessing Azure Metrics
我正在尝试访问给定 cloudService
的指标
我有以下代码:
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);
最后一行 returns 有错误 -
{"Code":"InvalidRequest","Message":"Could
not retrieve metrics."}
我可能做错了什么?
来自我打开的 MSDN 票证:
问题是 resourceId
用于查询指标。虽然您可以在部署级别请求指标定义(这允许发现可用的指标),但您不能在部署中查询指标。
指标在角色和角色实例级别可用。
如果您查看调用返回的每个 metricDefinitions
:
var metricsDefinisions = metricsClient.MetricDefinitions.List(resourceId, null, null);
他们应该为列表中的每个指标设置一个 ResourceIdSuffix 属性。这提供了发现指标所在位置所需的信息。
基本上它们将包含 roles\roleName 和 roles/rolename/roleinstance/roleinstancename 这样的值
如果将此添加到您已有的 resourceId(作为有效的 uri),它应该会为您提供与该定义关联的指标值。
在您的情况下,您可能只需要为您的特定应用程序添加 role/roleinstance。
我能够更改我的重现,我能够重现以下问题并使其正常工作。
来自:
var resourceId = ResourceIdBuilder.BuildCloudServiceResourceId("imtiazhclientcerttest", "3d2975a038db48d1bd9f40c3b14de459");
收件人:
var resourceId = ResourceIdBuilder.BuildCloudServiceResourceId("imtiazhclientcerttest", "3d2975a038db48d1bd9f40c3b14de459","WebRole1", "WebRole1_IN_0");
我正在尝试访问给定 cloudService
我有以下代码:
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);
最后一行 returns 有错误 -
{"Code":"InvalidRequest","Message":"Could not retrieve metrics."}
我可能做错了什么?
来自我打开的 MSDN 票证:
问题是 resourceId
用于查询指标。虽然您可以在部署级别请求指标定义(这允许发现可用的指标),但您不能在部署中查询指标。
指标在角色和角色实例级别可用。
如果您查看调用返回的每个 metricDefinitions
:
var metricsDefinisions = metricsClient.MetricDefinitions.List(resourceId, null, null);
他们应该为列表中的每个指标设置一个 ResourceIdSuffix 属性。这提供了发现指标所在位置所需的信息。
基本上它们将包含 roles\roleName 和 roles/rolename/roleinstance/roleinstancename 这样的值 如果将此添加到您已有的 resourceId(作为有效的 uri),它应该会为您提供与该定义关联的指标值。 在您的情况下,您可能只需要为您的特定应用程序添加 role/roleinstance。
我能够更改我的重现,我能够重现以下问题并使其正常工作。 来自:
var resourceId = ResourceIdBuilder.BuildCloudServiceResourceId("imtiazhclientcerttest", "3d2975a038db48d1bd9f40c3b14de459");
收件人:
var resourceId = ResourceIdBuilder.BuildCloudServiceResourceId("imtiazhclientcerttest", "3d2975a038db48d1bd9f40c3b14de459","WebRole1", "WebRole1_IN_0");