Başlangıç > VMware > 148: PowerCLI ile raporlama

148: PowerCLI ile raporlama

Çoğu zaman sistem adminlerinin tek görevi projeler geliştirmek veya ortamların sağlıklı çalışmalarını sağlamak olmuyor, belirli zaman aralıklarında sistemlerin kullanım oranları üst yönetim tarafından istenebiliyor. Bu tip talepler genelde sıkıcı olarak yorumlandığından ve elinizde bunu yapacak ücretli ve yetenekli bir yazılım yoksa, ne kadarını otomatize etsek kardır.

Aşağıda vereceğim script benzer bir ihtiyaçdan doğdu; her ayın başında, tüm ESXi sunucuların, bir önceki ayda ortalama kullandıkları CPU ve Bellek kaynaklarının raporlanması. Aslında PowerCLI ile bu değerler birkaç satırlık kod ile alınabilir ama hazır elimiz değmişken neden bir excel dosyası içerisine yazdırıp göze hoş gelen bir şekilde de formatlamayalım. Hatta aylık çalışan bir scheduled task ile de bu operasyonu tamamen unutabiliriz. İşte tüm bunları yapan script:


#################### Constants & Variables #####################

$xlContinuous = 1
$xlThin = 2
$xlColorIndexBlack = 1
$xlInsideHorizontal = 12
$xlInsideVertical = 11

$VMHosts = Get-VMHost | Sort-Object Name

$Today = Get-Date
$TargetMonth = $Today.Month - 1
$TargetYear = $Today.Year
if ($TargetMonth -eq 0) {
 $TargetMonth = 12
 $TargetYear = $TargetYear - 1
}

$TargetStartDate = [DateTime]"$TargetMonth/1/$TargetYear"
$TargetEndDate = $TargetStartDate.AddMonths(1)

################### Create Excel Components ####################

$EXCEL = New-Object -ComObject Excel.Application
$EXCEL.Visible = $true
$Workbook = $EXCEL.Workbooks.Add()
$Worksheet = $Workbook.ActiveSheet
$Worksheet.Name = "VMwareHosts"
$Cells = $Worksheet.Cells

$Row = 2
foreach ($VMHost in $VMHosts) {

 $Cells.Item($Row,1) = $VMHost.Name

 $TotalCPUUsage = 0
 $TotalMEMUsage = 0
 $CPUStats = Get-Stat -Entity $VMHost -Stat cpu.usage.average -Start $TargetStartDate -Finish $TargetEndDate | Where { $_.Instance-eq "" }
 $MEMStats = Get-Stat -Entity $VMHost -Stat mem.consumed.average -Start $TargetStartDate -Finish $TargetEndDate
 foreach ($CPUStat in $CPUStats) { $TotalCPUUsage += $CPUStat.Value }
 foreach ($MEMStat in $MEMStats) { $TotalMEMUsage += $MEMStat.Value }
 $VMCPUUsage = [math]::Round(($TotalCPUUsage / $CPUStats.Count) / 100, 2)
 $VMMEMUsage = [math]::Round(($TotalMEMUsage / $MEMStats.Count) / 1048576, 2)

 $Cells.Item($Row,2) = $VMCPUUsage
 $Cells.Item($Row,3) = $VMMEMUsage
 $Row++
}

################### Cell Formatting ####################

$Row = 1; $Col = 1;

"VMHost Name","CPU Average","Memory Average" | foreach {
 $Cells.Item($Row,$Col) = $_
 $Cells.Item($Row,$Col).Font.Bold = $True
 $Cells.Item($Row,$Col).Font.Size = 12
 $Col++
}

$Cells.Columns.Item("A:C").AutoFit() | Out-Null
$Range = $Worksheet.Range("C2:C" + $Worksheet.UsedRange.Rows.Count)
$Range.NumberFormat = '#,00 "GB"'
$Range = $Worksheet.Range("B2:B" + $Worksheet.UsedRange.Rows.Count)
$Range.NumberFormat = '0%'
$Worksheet.UsedRange.Borders.Weight = $xlThin
$Worksheet.UsedRange.Borders.LineStyle = $xlContinuous
$Worksheet.UsedRange.Borders.ColorIndex = $xlColorIndexBlack

$LObject = $Worksheet.ListObjects.Add([Microsoft.Office.Interop.Excel.XlListObjectSourceType]::xlSrcRange, $Worksheet.UsedRange, $null ,[Microsoft.Office.Interop.Excel.XlYesNoGuess]::xlYes,$null)

################### Save Worksheet & Quit ####################

$FilePath = "C:\ESX_Monthly_Usage_" + $TargetYear + "_" + $TargetMonth + ".xlsx"
$Workbook.SaveAs($FilePath)
$Workbook.Close()
$EXCEL.Quit()

PowerCLI ile vCenter sunucunuza bağlanıp scripti çalıştırdığınızda, bir excel dosyası açılacak, tüm ESXi hostlarınız aylık kullanım değerleri ile listelenecek, tablo ve hücreler aşağıdaki resimde görüldüğü gibi biçimlendirilecek ve excel dosyası C:’nin altına kayıt edilecektir.

Güncelleme: Zaman zaman scriptin bazı hücreleri boş yada yanlış getirdiğine şahit oldum. Eğer $EXCEL.Visible değerini $false olarak değiştirirseniz sorun giderilecektir.

Bu PowerCLI ve Excel ile neler yapabileceğimize dair basit bir uygulama. Gerçek anlamda ise tamamen bizim hayal gücümüze kalmış.

Kategoriler:VMware Etiketler:
  1. 06.07.2012, 21:09

    hocam,

    bunu olduğu gibi kopyala yapmıştır dersek çalışırmi. iceriginde değiştirmemiz gereken yerler nereleri

  2. 09.07.2012, 18:28

    Çalışacaktır, ancak PowerCLI’ı çalıştırdığınız kullanıcının regional settings tanımı “english” olmalı. Aksi taktirde hata verecektir.

  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

w

Connecting to %s

%d blogcu bunu beğendi: