Reporte de cómputo con PowerCLI

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 😉

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.