【问题标题】:Get metrics of an Azure vm in c#在 C# 中获取 Azure 虚拟机的指标
【发布时间】:2018-01-04 16:38:30
【问题描述】:

下面的代码可以检索 Azure 虚拟机的 CPU 百分比。 我想要网络输入、网络输出、磁盘读取字节、磁盘写入字节、磁盘读取操作、磁盘写入操作的指​​标。我为queryString输入了什么似乎并不重要,我总是得到cpu百分比。如何获取其他指标?

private void test()
{
    string vmName = "myVM";
    string resourceId = "/subscriptions/{subscriptionId}/resourceGroups/ResourceGroupWest/providers/Microsoft.Compute/virtualMachines/" + vmName;
    var subscriptionId = "mySubscriptionID";
    var clientId = "myClientID";
    var secret = "myKey";
    var tenantId = "myTenantID";
    resourceId = resourceId.Replace("{subscriptionId}", subscriptionId);

    MonitorClient readOnlyClient = AuthenticateWithReadOnlyClient(tenantId, clientId, secret, subscriptionId).Result;

    string queryString = "name.value eq 'CpuPercentage'";
    ODataQuery<MetadataValue> odataQuery = new ODataQuery<MetadataValue>(queryString);
    var vals = readOnlyClient.Metrics.List(resourceId, odataQuery );
    foreach (MetricValue v in vals.Value[0].Timeseries[0].Data)
    {
        if (v.Average != null)
        {
            totalAverage += v.Average.Value;
        }
    }
    totalAverage = totalAverage / vals.Value[0].Timeseries[0].Data.Count;
}

private static async Task<MonitorClient> AuthenticateWithReadOnlyClient(string tenantId, string clientId, string secret, string subscriptionId)
{
    // Build the service credentials and Monitor client            
    var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, secret);            
    var monitorClient = new MonitorClient(serviceCreds);           
    monitorClient.SubscriptionId = subscriptionId;            
    return monitorClient;        
}

【问题讨论】:

  • 您是否了解过 Azure 本身提供的功能?有很多资源可以为您提供所描述的内容。
  • 你能发个链接吗?我真的不在乎我是如何获得这些数据的。我很难找到示例代码。
  • 好吧,我不能给你一个具体的起点,因为我已经有一段时间没有做过类似的事情了。但是我做了一些小的谷歌搜索,发现了这样的东西:docs.microsoft.com/en-us/azure/virtual-machines/windows/…。如果这不是您要寻找的东西,请在重新发明轮子之前进行更多研究。
  • 不要忘记关闭或删除您的问题;)
  • 我希望能得到更多回复。我不会忘记关闭它。

标签: c# azure virtual-machine metrics


【解决方案1】:

我为 queryString 输入什么似乎并不重要,我总是得到 cpu 百分比。如何获取其他指标?

您可以从Supported metrics with Azure Monitor 获取其他指标名称。 如果您想获得多个指标,您可以使用 来附加指标。 CPU 指标是 Azure VM 的默认指标

 var queryString = "(name.value eq 'Disk Write Operations/Sec' or  name.value eq 'Percentage CPU' or  name.value eq 'Network In' or  name.value eq 'Network Out' or  name.value eq 'Disk Read Operations/Sec' or  name.value eq 'Disk Read Bytes' or  name.value eq 'Disk Write Bytes')";

我之前也做过demo,更详细的可以参考另一个SO thread

var azureTenantId = "tenant id";
var azureSecretKey = "secret key";
var azureAppId = "client id";
var subscriptionId = "subscription id";
var resourceGroup = "resource group";
var machineName = "machine name";
var serviceCreds = ApplicationTokenProvider.LoginSilentAsync(azureTenantId, azureAppId, azureSecretKey).Result;
MonitorClient monitorClient = new MonitorClient(serviceCreds) { SubscriptionId = subscriptionId };
 var resourceUrl = $"subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{machineName}";
 var metricNames = "(name.value eq 'Disk Write Operations/Sec' or  name.value eq 'Percentage CPU' or  name.value eq 'Network In' or  name.value eq 'Network Out' or  name.value eq 'Disk Read Operations/Sec' or  name.value eq 'Disk Read Bytes' or  name.value eq 'Disk Write Bytes')"; 
 string timeGrain = " and timeGrain eq duration'PT5M'";
 string startDate = " and startTime eq 2017-10-26T05:28:34.919Z";
 string endDate = " and endTime eq 2017-10-26T05:33:34.919Z";
 var odataFilterMetrics = new ODataQuery<MetricInner>(
                $"{metricNames}{timeGrain}{startDate}{endDate}");

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

【讨论】:

  • 谢谢。我仍然只得到 cpu 百分比,但至少我现在知道要放什么来获得其他值。我现在必须排除故障。
  • 你有关于这个线程的任何更新吗?你可以参考这个SO thread来得到我的测试结果。
  • 是的,我得到了它,就像你在你的答案中所说的那样。我不得不解决一些用户错误问题。我是关闭它还是只留下上面的答案?我没有看到关闭它的按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-02
  • 2020-08-24
  • 2014-05-30
  • 1970-01-01
  • 2021-07-15
  • 2019-10-20
  • 1970-01-01
相关资源
最近更新 更多