2016. január 22., péntek

Egy kis PowerCLI - VMware infrastruktúra KPI adatok lekérdezése

Lehet hogy túlzás KPI-nek nevezni, mi mindenesetre így hívjuk. A lényeg úgyis a tartalom. Arról van szó, hogy minden hónap elején kérnek tőlem bizonyos számszerűsíthető információt a VMware infrastruktúráról.
Mivel a mondás szerint ha már valamit kétszer meg kell csinálni, akkor arra írjunk scriptet, ezért én is így tettem.
Nem nagy dolgokról van szó, de ha valaki még esetleg most ismerkedik a PowerCLI használatával, akár még hasznos dolgot is találhat benne.

Az itt található kód egy kicsit egyszerűsített változata annak amit használok, mivel nálunk több datacenter van, és az adatokat megosztva kérik. A lenti viszont egyben kezeli a vCenteren lévő összes hostot, virtuális gépet valamint datastore-t. De a Location paraméter megadásával könnyen lehet szűkíteni a lekérdezéseket egy bizonyos csoportra.

Ha csak a Datacenter1-ben lévő dolgokkal akarunk foglalkozni, akkor egyszerűen ki kell bővíteni a parancsokat. Pl. 

$Host_ALL=Get-VMHost -Location DataCenter1|?{$_.ConnectionState -ne "Maintenance"}

Megjegyzések a scriptben, bár a nagy része nem szorul magyarázatra.




#Induló értékek meghatározása (dátum, hostok,virtuális gépek, datastore-ok)
#ha szükésges, akkor különböző szűréseket beállíthatunk, pl. csak bekapcsolt gépek,
#csak olyan datastore-ok, amikben nem szerepel az "internal" szó, stb

$Date=Get-Date
$Host_ALL=Get-VMHost |?{$_.ConnectionState -ne "Maintenance"}
$VM_ALL=get-vm |?{$_.Powerstate -eq "PoweredOn"}
$DS_ALL=get-datastore  |?{$_.Name -notlike "*internal*"}

#Host mennyiségi értékek számítása (összes mamória, CPU-k száma, és a hostok száma)

$Host_Mem_osszes_ALL=($Host_ALL|Measure-Object -Property MemoryTotalGB -sum).Sum
$Host_CPU_osszes_ALL=($Host_ALL|Measure-Object -Property NumCPU -sum).Sum
$Host_darab_ALL=($Host_ALL|measure-object).Count

#Datastore szabad és full kapacitások számítása

$DS_Free_Space_ALL=($DS_ALL|Measure-Object -Property FreespaceGB -sum).Sum
$DS_Full_Space_ALL=($DS_ALL|Measure-Object -Property CapacityGB -sum).Sum

#VM mennyiségi adatok (összes vCPU,számosság, abból mennyi a Windows és nem Windows gép)

$VM_CPU_ALL=($VM_ALL|Measure-Object -Property NumCPU -sum).sum
$VM_COUNT_ALL=($VM_ALL|Measure-Object).Count
$VM_COUNT_Windows_ALL=($VM_ALL|?{$_.GuestId -like "*win*"}|Measure-Object).Count
$VM_COUNT_NonWindows_ALL=($VM_ALL|?{$_.GuestId -notlike "*win*"}|Measure-Object).Count

#Provisioned Datastore számítás. Egy kicsit trükkös, mert ezt már csak az extensiondata #felhasználásával lehet lekérdezni, mivel a Get-DataStore ezt az értéket direktben nem
#tartalmazza

$ProvisionedSpace_ALL=(Get-Datastore | ?{$_.Name -notlike "*internal*"}|
Select-Object -Property Name,
CapacityGB,FreeSpaceGB,
@{ Name = "ProvisionedSpaceGB"
   Expression = {($_.ExtensionData.Summary.Capacity - $_.Extensiondata.Summary.FreeSpace + $_.ExtensionData.Summary.Uncommitted)/1GB}
 }|Measure-Object -Property ProvisionedSpaceGB -sum).sum

#Host memória és CPU szabad kapacitások számítása
#Nem bonyolítottam túl, egyszerűen az elmúlt egy hét értékeit lekértem, és abból az összes #hostra számoltam egy átlagot. Így utólag megnézve, lehetne egyszerűsíteni a következő pár
#sort (nem kéne számolgatni a hostokat, mivel tudom mennyi van...), de ez már így marad :)

$Host_ALL_CPU_Percent=0
$Host_ALL_MEM_Percent=0
$Host_Count=0

foreach ($h in $Host_ALL) {
  $HostCpuUsage = (get-stat -entity $h.Name -stat cpu.usagemhz.average -Start ($Date).adddays(-7) -Finish ($Date)|Measure-Object -Property Value -Average).Average
  $HostMemUsage = (get-stat -entity $h.Name -stat mem.consumed.average -Start ($Date).adddays(-7) -Finish ($Date)|Measure-Object -Property Value -Average).Average
  $HostallCPU=$h.CpuTotalMhz
  $HostallMem=$h.MemoryTotalMB
  $Host_ALL_CPU_Percent=$Host_ALL_CPU_Percent+(($HostCPUUsage/$HostallCPU)*100)
  $Host_ALL_MEM_Percent=$Host_ALL_MEM_Percent+((($HostMemUsage/1024)/$HostallMem)*100)
  $Host_Count=$Host_Count+1

  }
$Host_ALL_CPU_Percent=$Host_ALL_CPU_Percent/$Host_Count
$Host_ALL_MEM_Percent=$Host_ALL_MEM_Percent/$Host_Count

#Már csak az értékek kiíratása van hátra

Write-Host "összes CPU core" $Host_CPU_osszes_ALL
Write-Host "fizikia memória mérete" $Host_Mem_osszes_ALL
Write-Host "hostok szám" $Host_darab_ALL
Write-Host "provisioned tárhely" $ProvisionedSpace_ALL
Write-Host "szabad CPU kapacitás: " (100-$Host_ALL_CPU_Percent)
Write-Host "szabad datastore kapacitás" $DS_Free_Space_ALL
Write-Host "szabad Memória kapacitás: " (100-$Host_ALL_MEM_Percent)
Write-Host "teljes datastore kapacitás" $DS_Full_Space_ALL
Write-Host "vCPU szám" $VM_CPU_ALL
Write-Host "vCPU/core" ($VM_CPU_ALL/$Host_CPU_osszes_ALL)
Write-Host "vCPU/VM" ($VM_CPU_ALL/$VM_COUNT_ALL)
Write-Host "virtuális gépek száma" $VM_COUNT_ALL
Write-Host "Virtuális gépek száma (nem Windows)" $VM_COUNT_NonWindows_ALL
Write-Host "Virtuális gépek száma (Windows)" $VM_COUNT_Windows_ALL


A lista sok minden mással kiegészíthető, de pillanatnyilag nekem ennyi információra van szükségem.

Nincsenek megjegyzések:

Megjegyzés küldése