尝试获取CPU利用率(最好也获取网络利用率。我也想获取RAM,但是据我所知,这需要安装guest虚拟机模块来获取这些指标。因此,在这一点上,我只需要“主机”级别。
想法是针对预订中的所有VM运行此操作,以获取VM名称,VM资源组,最近x天的CPU利用率,最近x天的网络以及最近x天的网络。 / p>
我尝试使用“ Get-AzureRMMetric”进行的第一件事开始出现错误。
我键入“ get-azurermmetric”,并被提示输入资源ID。输入虚拟机的资源ID,得到的响应是一长串警告和异常类型,表明返回了无效的状态码“未找到”。
有什么想法吗?
答案 0 :(得分:0)
首先,您需要确定虚拟机支持哪些指标,请使用以下代码:
(Get-AzureRmMetricDefinition -ResourceId "vm resource id").name
然后您可以查看受支持的指标(只需忽略警告消息):
根据您的问题,我认为您需要“ 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
测试结果:
答案 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
}