[PowerCLI] Getting the Usage of a cluster
Our customers sometimes call us in to check their environment. Because this happens quite often we created a basic checklist on what checks we do when we start. One of those checks is a cluster-usage assessment. This helps us further down the road when advising the customer in ways to improve the resilience of his infrastructure.
Now, I know the following script is a “snapshot” of the current usage and does not account for history or even query the vCenter’s statistics on a given cluster. But that is okay, because a lot of the time the vCenter does not provide accurate information anyways.
What is still missing from the script is a balancing of host resources. This script basically assumes that all hosts in a cluster are equal in terms of CPU and RAM resources. If they are not the percentage at the end of the script is not very accurate. A big thanks to LucD for pointing that out to me. You can see our discussion on the matter in the VMware communities here.
Update: this script is now published at GitHub.
If I can get around to it I will put some thought into how to address this in the script but in the meantime here it is with the mentioned caveats:
$clusters = get-cluster
$myClusters = @()
foreach ($cluster in $clusters) {
$hosts = $cluster |get-vmhost
[double]$cpuAverage = 0
[double]$memAverage = 0
Write-Host $cluster
foreach ($esx in $hosts) {
Write-Host $esx
[double]$esxiCPUavg = [double]($esx | Select-Object @{N = 'cpuAvg'; E = {[double]([math]::Round(($_.CpuUsageMhz) / ($_.CpuTotalMhz) * 100, 2))}} |Select-Object -ExpandProperty cpuAvg)
$cpuAverage = $cpuAverage + $esxiCPUavg
[double]$esxiMEMavg = [double]($esx | Select-Object @{N = 'memAvg'; E = {[double]([math]::Round(($_.MemoryUsageMB) / ($_.MemoryTotalMB) * 100, 2))}} |select-object -ExpandProperty memAvg)
$memAverage = $memAverage + $esxiMEMavg
}
$cpuAverage = [math]::Round(($cpuAverage / ($hosts.count) ), 1)
$memAverage = [math]::Round(($memAverage / ($hosts.count) ), 1)
$ClusterInfo = "" | Select-Object Name, CPUAvg, MEMAvg
$ClusterInfo.Name = $cluster.Name
$ClusterInfo.CPUAvg = $cpuAverage
$ClusterInfo.MEMAvg = $memAverage
$myClusters += $ClusterInfo
}
$myClusters
Here is a picture of the expected output:

Leave a Reply