Buenas, tras el post anterior en el cual veíamos cómo obtener un reporte de capacidad de datastores mediante un script de PowerCLI, en este post vamos a ver como obtener un reporte de capacidad y consumo sobre nuestro cómputo.
El script que vamos a ver puede ser de utilidad de cara a analizar si nuestro entorno está bien dimensionado, si estamos consumiendo por encima de lo establecido, si podemos cumplir HA Admission Control, si nuestra infraestructura soportaría caída de hosts, etc.
Esta visión te la puede dar vRealize Operations Manager, pero para quien no disponga de ello en su infraestructura, os dejo el script que de manera muy sencilla y rápida, puede obtener un reporte similar.
Bueno, habiendo analizado el fin del script. Vamos a ver que valores vamos a obtener.
Por cada Datacenter, obtendremos los datos de cada Cluster. Sobre la información del cluster que recogeremos:
- Nº de Host ESXi
- Nº de Virtual Machines del Cluster
- Nº de Virtual Machines por Host
- Nº de Cores Físicos sin tener en cuenta HT
- Nº Total de Cores Virtuales
- Ratio de Cores Virtuales vs Cores Físicos
- Capacidad RAM Física
- Capacidad RAM Virtual
- Demanda CPU en GHz (Valor obtenido cogiendo los valores de 1 mes atrás, no es un valor en tiempo real, sino una media de los valores obtenidos en los últimos 30 días)
- Capacidad Total CPU de nuestro Cluster en GHz
- Average Demand (Lo mismo que la Demanda de CPU, es una media de los últimos 30 días)
############################################################################## ## Realizar un reporte sobre el Cómputo ## ------------------------------------------------------------------------### ## V. 1.0 Mario Gómez - Just2Kloud ## ------------------------------------------------------------------------### ## Sintaxis: Indicador_Performance.ps1 ## -------------------------------------------------------------------------- ############################################################################## # Obtenemos la instancia de vCenter para obtener el reporte y las credenciales. $VCENTER = Read-Host -Prompt “Introducir instancia vCenter Server” $Credential = Get-Credential -Message “Introducir Credenciales para acceder a vCenter Server [$VCENTER]” # Inicializamos la tabla que volcaremos sobre el fichero csv $Object_tabla = @() ## Connect vCenter Connect-VIServer -Server $VCENTER -Credential $Credential $datacenter = Get-Datacenter # Iteracción para cada Datacenter foreach ($dat in $datacenter) { $list_cluster = Get-Datacenter -Name $dat | Get-Cluster # Iteracción para cada cluster foreach ($cluster in $list_cluster) { Write-Host "Inventariando el Cluster [$cluster] en el Datacenter [$dat]" -ForegroundColor Green # Recogemos el listado de máquinas de cada cluster, excluyendo las protegidas, para no tenerlas en cuenta en el cómputo $vms = Get-Cluster -Name $cluster | Get-Datastore | where {$_.Name -notlike "*PLACEHOLDER*"} | Get-VM # Recogemos el listado de ESXi para cada cluster $list_esxi = Get-Cluster -Name $cluster | Get-VMHost # Inicializamos variables necesarias para rellenar la tabla $PhyRAM = 0 $PhyCPU = 0 $vCores = 0 $vRAM = 0 $NumVMs = 0 $NumHost = 0 $NumVMperHost = 0 $suma_mhz = 0 $media_usage_mhz = 0 $demand_ghz = 0 $capacity_ghz = 0 $total_host_ghz = 0 $average_demand = 0 # Recorremos el listado de ESXi y recogeremos los valores necesarios foreach ($esxi in $list_esxi) { $suma_mhz = 0 # Sumamos las CPU Físicas de cada ESXi para obtener un total del CLuster $PhyCPU = $PhyCPU + $esxi.NumCpu # Sumamos la RAM física de cada ESXi para obtener un total del CLuster $PhyRAM = $PhyRAM + $esxi.MemoryTotalGB # Obtenemos una suma de la capacidad total en Ghz $capacity_ghz = $capacity_ghz + (($esxi.CpuTotalMhz)/1024) $capacity_ghz = [math]::Round($capacity_ghz,2) # Obtenemos la demanda de cpu en Mhz con un intervalo de un mes atrás y posteriormente sacamos la media diaria y sumamos la demanda total del Cluster. $list_usage_mhz = Get-Stat -Entity (get-vmhost -name $esxi) -Stat cpu.usagemhz.average -start (get-date).adddays(-31) -finish (get-date) -interval 1440 -instance "" -ea silentlycontinue; foreach ($mhz in $list_usage_mhz.Value) { $suma_mhz = $suma_mhz + $mhz } $media_usage_mhz = $suma_mhz/30 $media_usage_mhz = $media_usage_mhz/1024 $media_usage_mhz = [math]::Round($media_usage_mhz,2) $demand_ghz = $demand_ghz + $media_usage_mhz } $total_host_ghz = (($list_esxi[0].CpuTotalMhz)/1024) $total_host_ghz = [math]::Round($total_host_ghz,2) $capacity_ghz = $capacity_ghz - $total_host_ghz $average_demand = (($demand_ghz/$capacity_ghz)*100) $average_demand = [math]::Round($average_demand,2) foreach ($vm in $vms) { $vCores = $vCores + $vm.NumCPU $vRAM = $vRAM + $vm.MemoryGB } $NumVMs = $vms.count $NumHost = $list_esxi.count $NumVMperHost = $NumVMs/$NumHost $NumVMperHost = [math]::Round($NumVMperHost,2) $RatiovCPUtoPhyCPU = $vCores/$PhyCPU $RatiovCPUtoPhyCPU = [math]::Round($RatiovCPUtoPhyCPU,2) [string]$StrRatiovCPUtoPhyCPU = $RatiovCPUtoPhyCPU.ToString() + ":1" $vRAM = $vRAM/1024 $vRAM = [math]::Round($vRAM,2) $PhyRAM = $PhyRAM/1024 $PhyRAM = [math]::Round($PhyRAM,2) # Rellenamos línea a línea la tabla $hash_temp = @{ Datacenter = $dat.Name Cluster = $cluster.Name TotalNumVMs = $NumVMs NumHost = $NumHost NumVMperHost = $NumVMperHost PhysicalCores = $PhyCPU TotalvCPU = $vCores RatiovCPUperPhysicalCPU = $StrRatiovCPUtoPhyCPU PhysicalRAM = $PhyRAM vRAM = $vRAM DemandGhz = $demand_ghz CapacityGhz = $capacity_ghz AverageDemand = $average_demand } $obj= New-Object PSObject -Property $hash_temp $Object_tabla += $obj } } Disconnect-VIServer -Server $VCENTER -Confirm:$false
Si queremos obtenerlo en una Hoja Excel, como ya hicimos en el anterior post, podemos exportar nuestra tabla obtenida a una Hoja Excel, de la siguiente manera
$Object_tabla | Select Datacenter,Cluster,TotalNumVMs, NumHost, NumVMperHost,PhysicalCores,TotalvCPU,RatiovCPUperPhysicalCPU,PhysicalRAM,vRAM,DemandGhz,CapacityGhz,AverageDemand | Export-Excel -Path C:\Just2Kloud\Report.xlsx -AutoSize -BoldTopRow -TableStyle Light19 -WorksheetName $VCENTER"_Performance" -Append
Espero que os haya sido de utilidad y que os haya gustado.
Muchas gracias por compartir 😉