Auslastung eines Clusters ermitteln
Unsere Kunden holen uns manchmal, um ihre Umgebung durchzusehen. Weil das oft vorkommt, haben wir eine Checkliste, was wir zu Beginn prüfen.
Dieser Beitrag ist von 2018. Er bleibt online, weil er nach wie vor nachgefragt wird, beschreibt aber einen Produktstand von damals.
Unsere Kunden holen uns manchmal, um ihre Umgebung durchzusehen. Weil das ziemlich oft vorkommt, haben wir eine Checkliste mit den Prüfungen, die wir zu Beginn machen. Eine davon ist eine Beurteilung der Cluster-Auslastung. Die hilft uns später, wenn wir den Kunden beraten, wie er seine Infrastruktur robuster macht.
Mir ist klar, dass das folgende Script eine Momentaufnahme der Auslastung liefert und weder Historie berücksichtigt noch die Statistiken des vCenters zu einem Cluster abfragt. Das ist in Ordnung, denn oft genug liefert das vCenter ohnehin keine verlässlichen Werte.
Was dem Script noch fehlt, ist eine Gewichtung der Host-Ressourcen. Es geht davon aus, dass alle Hosts eines Clusters gleich viel CPU und RAM haben. Wenn das nicht stimmt, ist der Prozentwert am Ende nicht besonders genau. Danke an LucD, der mich darauf gebracht hat. Unsere Diskussion dazu steht in den VMware Communities hier.
Update: Dieses Script liegt inzwischen auf GitHub.
Sobald ich dazu komme, überlege ich mir, wie sich das im Script lösen lässt. Bis dahin hier die Fassung mit den genannten Einschränkungen:
$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
Und so sieht die Ausgabe aus:
