检索Azure订阅中所有VM的CPU利用率的最佳方法

时间:2019-01-22 16:36:40

标签: azure powershell

尝试获取CPU利用率(最好也获取网络利用率。我也想获取RAM,但是据我所知,这需要安装guest虚拟机模块来获取这些指标。因此,在这一点上,我只需要“主机”级别。

想法是针对预订中的所有VM运行此操作,以获取VM名称,VM资源组,最近x天的CPU利用率,最近x天的网络以及最近x天的网络。 / p>

我尝试使用“ Get-AzureRMMetric”进行的第一件事开始出现错误。

我键入“ get-azurermmetric”,并被提示输入资源ID。输入虚拟机的资源ID,得到的响应是一长串警告和异常类型,表明返回了无效的状态码“未找到”。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

首先,您需要确定虚拟机支持哪些指标,请使用以下代码:

(Get-AzureRmMetricDefinition -ResourceId "vm resource id").name

然后您可以查看受支持的指标(只需忽略警告消息):

enter image description here

根据您的问题,我认为您需要“ CPU百分比” /“网络输入” /“网络输出”。

然后,您可以根据需要使用以下示例代码(如果不满足需要,可以进行一些更改):

#get all vms in a resource group, but you can remove -ResourceGroupName "xxx" to get all the vms in a subscription
$vms = Get-AzureRmVM -ResourceGroupName "xxx"

 #get the last 3 days data
 #end date
 $et=Get-Date

 #start date
 $st=$et.AddDays(-3)

 #define an array to store the infomation like vm name / resource group / cpu usage / network in / networkout
 $arr =@()

 foreach($vm in $vms)
 {
 #define a string to store related infomation like vm name etc. then add the string to an array
 $s = ""


 #percentage cpu usage
$cpu = Get-AzureRmMetric -ResourceId $vm.Id -MetricName "Percentage CPU" -DetailedOutput -StartTime $st `
 -EndTime $et -TimeGrain 12:00:00  -WarningAction SilentlyContinue


 #network in
 $in = Get-AzureRmMetric -ResourceId $vm.Id -MetricName "Network In" -DetailedOutput -StartTime $st `
 -EndTime $et  -TimeGrain 12:00:00 -WarningAction SilentlyContinue


 #network out 
$out = Get-AzureRmMetric -ResourceId $vm.Id -MetricName "Network Out" -DetailedOutput -StartTime $st `
 -EndTime $et -TimeGrain 12:00:00  -WarningAction SilentlyContinue


 # 3 days == 72hours == 12*6hours

 $cpu_total=0.0
 $networkIn_total = 0.0
 $networkOut_total = 0.0

 foreach($c in $cpu.Data.Average)
 {
  #this is a average value for 12 hours, so total = $c*12 (or should be $c*12*60*60)
  $cpu_total += $c*12
 }

 foreach($i in $in.Data.total)
 {
 $networkIn_total += $i 
 }

 foreach($t in $out.Data.total)
 {
 $networkOut_total += $t
 }

 # add all the related info to the string
 $s = "VM Name: " + $vm.name + "; Resource Group: " + $vm.ResourceGroupName + "; CPU: " +$cpu_total +"; Network In: " + $networkIn_total + "; Network Out: " + $networkOut_total

 # add the above string to an array
 $arr += $s
 }

 #check the values in the array
 $arr

测试结果:

enter image description here

答案 1 :(得分:0)

空格

我们可以使用相同的脚本获取具有日期的CPU的最大使用量, 我曾经做过以下更改,例如致电Maximum……没有运气..我希望某些情况需要您对此解决方案

foreach($c in $cpu.Data.Maximum)
 {
  #this is a average value for 12 hours, so total = $c*12 (or should be $c*12*60*60)
  $cpu_total += $c*12
  #($c|measure -maximum).maximum
 }