Charge des clusters en PowerCLI

Edit 01.04.2013 : Quelques modifications sur le script suite à une très bonne remarque d’hypervisor (as usual :p)

Ca faisait un moment que l’on voulait faire une représentation « graphique » en PowerCLI de la charge des clusters vSphere, un peu à la sauce de ce que propose le VIClient pour les serveurs :

Au final, voici un script PowerCLI qui va permettre d’afficher en console une représentation de la charge des clusters de votre infra :

On s’est autant amusé à réaliser la représentation graphique en ascii art qu’à récupérer les statistiques (notamment avec la recherche du charactère parfait pour simuler les barres ^^). Ce script PowerCLI contient une fonction Get-ClusterLoad qui prend les paramètres facultatifs suivants :

.PARAMETER ClusterName
The cluster name or names separated by coma
.PARAMETER Quickstat
 Switch, when true the method to get stats is based on quickstats through summary child properties. If not, the method will use PerfManager instance with QueryPerf method in order to get non computed stats. The default for this switch is $true.

La fonction peut donc être utilisée pour afficher la charge de tous les clusters (comportement de base sans argument) :

Get-ClusterLoad

Vous pouvez aussi afficher la charge que de certains clusters (en séparant leur nom avec des virgules) :

Get-ClusterLoad -ClusterName vCluster01,vCluster02

Vous pouvez aussi forcer l’utilisation des statistiques réelles plutôt que les quickstats :

Get-ClusterLoad -Quickstat:$false

Les 2 manières de récupérer les statistiques sont radicalement différentes en termes de temps d’exécution. Tout d’abord, la manière par défaut va utiliser les QuickStats disponibles via les sous-propriétés runtime.memory et runtime.cpu du ResourcePool racine du cluster (Resources, objet de type ManagedObjectReference:ResourcePool) :

Cette méthode est rapide puisqu’elle va chercher des valeurs qui ont déjà été computées (non ce mot n’existe pas mais vous aurez compris :p) afin de les utiliser pour calculer la charge du cluster (quelques secondes pour près de 200 ESXi) :

La deuxième méthode (en passant par le switch -QuickStat:$false) va récupérer les  compteurs de statistiques mem.consumed.average et cpu.usagemhz.average de chaque cluster. Cette charge représentera donc une moyenne (et donc pourra être un peu différentes des résultat de la première méthode suivant le load) et sera plus longue à être calculée (un peu plus de 2 minutes pour près de 200 ESXi) :

Le script en l’état n’est pas foncièrement très utile (à part le côté fun du ascii art ^^), mais on travaille sur un plugin qui pourrait être ajouté au vCheck afin d’avoir cette représentation dans le rapport généré. Ce billet sera mis à jour une fois le plugin finalisé.

La fonction qui affiche le graphe en prenant en input un pourcentage est la sous fonction Show-PercentageGraph (ligne 37 à 50):

function Show-PercentageGraph([int]$percent, [int]$maxSize=20) {
	if ($percent -gt 100) { $percent = 100 }
	$warningThreshold = 60 # percent
	$alertThreshold = 80 # percent
	[string]$g = [char]9632 #this is the graph character, use [char]9608 for full square character
	if ($percent -lt 10) { write-host -nonewline "0$percent [ " } else { write-host -nonewline "$percent [ " }
	for ($i=1; $i -le ($barValue = ([math]::floor($percent * $maxSize / 100)));$i++) {
		if ($i -le ($warningThreshold * $maxSize / 100)) { write-host -nonewline -foregroundcolor darkgreen $g }
		elseif ($i -le ($alertThreshold * $maxSize / 100)) { write-host -nonewline -foregroundcolor yellow $g }
		else { write-host -nonewline -foregroundcolor red $g }
	}
	for ($i=1; $i -le ($traitValue = $maxSize - $barValue);$i++) { write-host -nonewline "-" }
	write-host -nonewline " ]"
}

La largeur du graphe généré peut être changé dans la sous fonction Show-PercentageGraph (ligne 37):

[int]$maxSize=20

Vous pouvez aussi modifier le seuil de modification de couleur  dans la sous fonction Show-PercentageGraph (ligne 39/40):

$warningThreshold = 60 # percent
$alertThreshold = 80 # percent

Le script est disponible au téléchargement ici (renommez l’extension en .ps1) : Get-ClusterLoad.ps1

2 comments

  1. Une autre « très bonne » remarque, ça c’est plus valable :p : « de chaque serveur ESXi afin de calculer la charge du cluster. »

  2. Pingback: Charge des VM/Hôtes/Cluster en PowerCLI | vmdude

Laisser un commentaire

Required fields are marked *.