build 65d0a3ad | content blog-content@c8490fa · 338 posts | profiles 20 · corpus 228 | 0 skipped |
Scripting · 2018-06-04

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.

2018-06-04Datum
Dario DörflingerAutor
1Min. Lesezeit
295words
no translation reviewed
Themen capabilities · idf weight Automation automation 1.80
Hersteller vendors · idf weight VMware vmware 0.89

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:

image003

Passt ausserdem