SCOM 2012 R2 – IIS Application Pool Performance with Powershell Grid Widget

Operations Manager üzerinde Dashboard oluşturmak istediğinizde elinizin altında birçok Widget bulunur. Bunlardan bir tanesi de Powershell Grid Widget. Bu Widget sayesinde Powershell’in gücünü kullanıp görmek istediğiniz Grid Dashboard’ları oluşturabilirsiniz.

Ben bu makalemde size IIS üzerindeki Application Pool’ların anlık olarak tükettikleri CPU ve Ram miktarlarını gösteren bir Dashboard’u Powershell kullanarak nasıl yapabileceğinizi aktaracağım. Bu sayede IIS’i izleyen operatörler kolaylıkla sunucular üzerindeki Application Pool’ları izleyebilecekler.

Konfigürasyona başlamadan önce SCOM üzerinde gerekli Dashboard şablonunu oluşturalım.

Bunu oluşturmak için aşağıdaki gibi Dashboard View seçeneğini seçelim.


Resim-1

Şekildeki gibi Grid Layouts seçeneğini seçerek devam edelim.


Resim-2

Dashboard’a bir isim verip ilerleyelim.


Resim-3

Dashboard üzerinde kaç hücre olacağını ve yapısının nasıl olacağını belirleyip ilerleyelim.


Resim-4

Dashboard’u oluşturduktan sonra oluşturduğumuz hücrelere ilgili Widget’ları ekleyerek devam edebiliriz. SCOM üzerinde bir sürü Widget bulunuyor. Biz “Powershell Grid Widget“ı seçerek devam edelim.


Resim-5

Widget’a isim vererek ilerleyelim. IIS Server’lar bu bölümde listeleneceği için isim olarak “IIS Servers” ismini verip devam edelim.


Resim-6

Bir sonraki bölümde script’imizi yazacağımız bölüm geliyor. Bu bölümde yazdığımız Powershell script’i biraz açıklayalım.

#IIS yüklü olan server’ların class’ını bir değişkene atayalım.

$class = Get-SCOMClass -Name Microsoft.Windows.InternetInformationServices.ServerRole

#Class’ı kullanıp IIS yüklü olan makinaları elde edelim

$computers = Get-SCOMClassInstance -Class $class

#Her objeye grid üzerinde bir ID atamak için bir sayı değişkeni oluşturalım.

$i=1

#Her bir computer objesini grid’e ID,HealthState,DisplayName kolonları ile ekleyelim. Bu kolonlara karşılık gelen değerleri de Objenin attribute’ları ile eşitleyelim.

foreach ($computer in $computers)

{

$dataObject = $ScriptContext.CreateFromObject($computer, “Id=Id,HealthState=HealthState,DisplayName=Path”, $null)

#Grid’deki her bir obje için custom bir kolon tanımlayalım. (Sıra numarası gibi)

$dataObject[“CustomColumn”]=$i

$ScriptContext.ReturnCollection.Add($dataObject)

$i++

}


Resim-7

Script’i kaydetmemizin ardından IIS Server’lar aşağıdaki gibi listelenecektir.


Resim-8

Şimdi ikinci hücrenin konfigürasyonuna geçelim. Burada yapacağımız işlem birinci hücreye bağlı olacak. Yani birinci hücrede seçilen IIS Server ikinci hücredeki değişkene atanacak ve o Server üzerindeki Application Pool’ların tükettikleri CPU ve RAM miktarlarını % olarak görebileceğiz. Yani birinci hücrede seçilen Server üzerindeki Application Pool bilgilerini ikinci hücrede göreceğiz.

İkinci hücre için de “Powershell Grid Widget“‘ını seçip devam edelim.


Resim-9

Seçtiğimiz Widget’a bir isim verip devam edelim.


Resim-10

Script bölümüne geldiğimizde aşağıdaki script’i script bölümüne ekleyelim. Script hakkındaki açıklamalar aşağıdaki gibidir.

#Diğer hücreden seçilen server bilgisini parametre olarak alalım.

Param($globalSelectedItems)

#Seçilen her öğe için aşağıdaki işlemleri uygulayalım.

foreach ($globalSelectedItem in $globalSelectedItems)

{

#IIS Server ismini bir değişkene atayalım.

$ServerName=$globalSelectedItem[“DisplayName”]

#Server üzerindeki “W3WP” process’lerini bir değişkene atayalım.

$proclist = Get-Process -ComputerName $ServerName -name “W3WP”

#Yine grid’deki satırlara bir sıra numarası atamak için sayı değişkeni oluşturalım.

$i=1

#Her w3wp process’i için aşağıdaki işlemleri yapalım.

foreach ($p in $proclist)

{

#Application pool ismini Add-Member parmetresini kullanarak yeni bir attribute olarak process değişkenine ekleyelim.

$p | Add-Member -type NoteProperty -name UserID -value ((Get-WmiObject -ComputerName $ServerName -class win32_process | where{$_.ProcessID -eq $p.id}).getowner()).user

#Aynı şekilde application pool’un kullandığı CPU değerini de yeni bir attibute olarak ekleyelim.

$p | Add-Member -type NoteProperty -name PercentCPU -value (get-wmiobject -ComputerName $ServerName -Class Win32_PerfFormattedData_PerfProc_Process | where{$_.IDProcess -eq $p.id}).PercentProcessorTime

#Grid kolonlarını ve kolonlara karşılık gelen data değerlerini belirleyelim.

$dataObject = $ScriptContext.CreateInstance(“xsd://foo!bar/baz”)

$dataObject[“Id”] = $i.ToString()

$dataObject[“PoolName”] = $p.UserID

$dataObject[“PID”] = $p.Id.ToString()

$dataObject[“CPU”] = “%”+” “+$p.PercentCPU.ToString()

$dataObject[“Memory (MB)”] = “{0:N0}” -f ($p.WS/1MB)+” “+”MB”

$dataObject[“NPM”] = “{0:N0}” -f ($p.NPM/1KB)+” “+”KB”

$dataObject[“Private Bytes (MB)”] = “{0:N0}” -f ($p.PM / 1MB)+” “+”MB”

$dataObject[“Virtual Memory Size”] = “{0:N0}” -f ($p.VM / 1MB)+” “+”MB”

$ScriptContext.ReturnCollection.Add($dataObject)

$i++

}

}

Script’i ilgili yere kopyalayarak devam edelim. Widget sihirbazımızı tamamlayalım.


Resim-11

Konfigürasyonun ardından IIS Servers bölümünden seçtiğiniz her IIS Server için Application Pool’lar ve tükettikleri CPU / RAM değerleri aşağıdaki gibi listelenecektir.


Resim-12

Powershell ile herşey mümkün. J

Bir sonraki makalede görüşmek üzere.

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

Yazı gezinmesi

Mobil sürümden çık