Hyper-V Reporting Script v1.0

06.01.2015
12

ⓘ   Dikkat: Bu araç uzun süre önce sonlanmıştır / This script is no longer available

Üzerinde çok sayıda iş yükü barındıran ve giderek karmaşıklaşan kurum içi sanallaştırma yapılarının izlenmesi ortam ölçeği genişledikçe zorlaşır. İşlemci gücü, bellek kapasiteleri, depolama kaynağı, sanal makine kopyaları gibi çeşitli platform bileşenlerinde beklenmedik sorunlar ortaya çıktığında büyümeden anlamak veya sorun oluşmadan hemen önce yakalamak, platform ve servis erişilebilirliğini sürekli kılmak adına oldukça önemlidir. Öte yandan sanallaştırma envanterini çıkartmak, atanmış veya bekleyen kaynak miktarları gibi bilgilere ulaşmak, altyapı yatırımının daha verimli kullanımı ve kapasite planlama hususlarında destek olabilmektedir. Günümüzde bu gibi işleri ve aslında çok daha fazlasını yapmaya aday uygulamalar mevcut. Kimisi düşük maliyetli ama eh işte, kimisi oldukça kapsamlı ancak aradığını bulmak zor, kimisi istenen sonucu veremiyorken kimisi tamam ama gerçekten pahalı, kurması işletmesi meşakkatli… Ama yine de gerekliler çünkü ortamda özellikle geriye dönük raporlama yapabilen, geçmişte yaşanmış olayları ve değerleri kayıt altına alıp bunları gerektiğinde gösterebilen bir izleme uygulaması belirli ölçeğin üzerindeki yapılarda mutlaka çalışıyor olmalı. Ama bazen de izleme uygulamasının sorunlarıyla boğuşmadan, belirli bir bilgiye ulaşmak için menüler/pencereler arasında kaybolmadan hemen o an neler olup bittiğini bir bakışta anlamak istemez miyiz? İşte tam olarak bu fikirle yola çıktım ve “Hyper-V Reporting Script” isimli bir raporlama aracı hazırladım. Windows Powershell tabanlı olan Get-HyperVReport.ps1 tam olarak Hyper-V sanallaştırma ortamlarını raporlamak ve durumun anlık fotoğrafını çekmek üzere kullanabileceğiniz bir araç.

Hyper-V Reporting Script v1.0

Get-HyperVReport.ps1 aracı Clustered veya Standalone durumda çalışan Hyper-V ortamlarını aşağıdaki üçün farklı açıdan hızlı ve kolay bir şekilde raporlar.

  • Fiziksel sunucular (node/host)
  • Depolama alanları (storage)
  • Sanal makineler (vm)

Belirttiğiniz Hyper-V Cluster yapısı veya Standalone Hyper-V sunucu gurubuyla ilgili o anki duruma ait çeşitli bilgileri toplar, topladığı verileri ekrana yazmak yerine in-line CSS ile biçimlendirilmiş ve tüm modern tarayıcılar ile uyumlu bir HTML dosyasına doldurur, disk üzerinde belirtilen alana kayıt eder ve eğer gerekiyor ise SMTP sunucunuza bağlanarak e-posta ile adresinize gönderir. Ayrıca belirli anlarda periyodik olarak çalışmak ve rapor göndermek üzere zamanlanmamayı da destekler. (Windows scheduled tasks)

get-hypervreport-flow

Get-HyperVReport.ps1 Windows Powershell tabanlıdır ve doğrudan bir Windows Server üzerinde çalıştırılabilir. İlerleyiş aşamalarını ekranda gösterir ve HTML rapor oluştuğunda herhangi bir tarayıcıyla rahatlıkla incelenebilir. HTML raporda yer alan tablo alanları görsel açıdan sade ve aradığınızı hızlıca bulabileceğiniz bir tasarıma sahiptir. Cluster üyesi Hyper-V Node’ların listelendiği örnek bir tablo:

get-hypervreport-clustered-nodes

Hyper-V Cluster içerisindeki depolama alanı kaynaklarının raporlandığı örnek bir tablo:

get-hypervreport-clustered-disk-volume

Ortamdaki sanal makinelerin raporlandığı örnek bir tablo:

get-hypervreport-html-vms

Öne Çıkanlar

Get-HyperVReport.ps1 1.0 sürümünde altını çizmek istediğim başlıklar aşağıdaki gibi.

  • Windows Server 2012 Hyper-V ve Windows Server 2012 R2 Hyper-V ortamlarıyla uyumludur.
  • Çalışması için gerekli ön koşulları (runtime environment) kontrol eder ve eğer eksik varsa bazılarını otomatik olarak tamamlar. Tamamlayamadıkları konusunda ise bilgi verir.
  • Ortamdaki verileri toplarken standart Powershell cmdlet’lerinin yanı sıra WMI query’leri de kullanır.
  • Topladığı verileri düzgün ve okunabilir tablolara yerleştirir, anlamlandırır, gerekiyor ise belirli eşik değerlerine göre renklendirir ve tamamını CSS ile biçimlendirilmiş tek bir HTML dosyasına kayıt eder.
  • Tablo hücrelerindeki tüm yıldız karakterli (*) alanlar ile bazı highlighted alanlar üzerine geldiğinizde açılan tooltip içerisinde o durumla ilgili bir miktar daha bilgi sağlanır.
  • Doğrudan komut satırından veya zamanlanmış işletim sistemi görevi şeklinde periyodik olarak çalışabilir.
  • Oluşan HTML rapor dosyasını diske kayıt edebildiği gibi eğer isterseniz SMTP sunucunuza bağlanıp belirlediğiniz adreslere e-posta olarak da gönderebilir. Üstelik bunu yaparken SMTP authentication veya TLS/SSL gibi gelişmiş yöntemleri de destekler. Bu sayede eğer isterseniz Gmail, Hotmail veya diğer servis sağlayıcıları da e-posta göndermek için kullanabilirsiniz.
  • Gerektiğinde rapor dosyası ismini değiştirmenize ve kayıt edileceği dizini belirlemenize izin verir.
  • Sahip olduğu HighlightsOnly Mode sayesinde, tüm altyapıyı raporlamak yerine sadece problemli olan kayıtları listeleyebilir. Bu modu aktif eden -HighlightsOnly parametresini kullanarak özellikle çok sayıda sunucu ve sanal makine bulunan ortamlarda uzun raporlar incelemek durumunda kalmadan doğrudan üzerinde uyarı bulunan satırları filtrelemeniz mümkün.

Neleri Raporlayabilir?

Belirttiğiniz Hyper-V ortamından toplanan bilgiler, oluşan HTML tabanlı rapor dosyasında 3 ana tablo altında yer alır.

Hyper-V Sunucular (Clustered veya Standalone)

  • Hostname
  • İşletim sistemi sürümü
  • Durumu (up, down, paused, joined, vs..)
  • Açık kalma süresi (Uptime)
  • Domain üyeliği
  • Toplam sanal makine sayısı ve kapalı/açık oranı
  • İşlemci sayısı (mantıksal işlemciler, fiziksel soket ve çekirdekler, hyper-threading durumu)
  • Bellek için kapasite bilgileri: kullanılan, müsait ve toplam bellek

Depolama Alanları (Clustered veya Local)

  • Volume
    • İsim (Local Volume, Clustered Volume, Cluster Shared Volume)
    • Etiket veya CSV ise path (tooltip olarak)
    • Fiziksel disk ismi (Clustered dahil)
    • Fiziksel disk için toplam, atanmış ve henüz atanmamış depolama alanı miktarları (tooltip olarak)
  • Disk/Volume durumu (online, failed, maintenance)
  • Kullanım amacı (Logical Partition, Cluster Volume, Cluster Shared Volume, Quorum, System Volume)
  • Sahibi
  • Fiziksel disk için Bus Type (SAS, iSCSI, FC, vb..)
  • Volume için dosya sistemi
  • Volume için kapasite bilgileri: kullanılan, müsait ve toplam depolama alanı

Sanal Makineler

  • Sanal Makine
    • İsim
    • Yapılandırma dosyasının yer aldığı dizin (XML)
    • Jenerasyon
    • Versiyon
  • Durumu (running, off, saved, failed, offline, vb..)
  • Açık kalma süresi (Uptime)
  • Sahibi
  • Atanmış sanal işlemci sayısı
  • Atanmış sanal bellek değerleri (startup, minimum, maksimum, assigned)
  • Yüklü Integration Services sürümü ve güncellik durumu
  • Checkpoint (snapshot) durumu, sayısı ve tüm zincir diskler
  • Çoğaltma (Hyper-V Replica) durumu, sağlığı, çoğaltma sıklığı ve çoğaltılan sunucu bilgisi
  • Tüm sanal diskler
    • VHD isimleri ve bulundukları dizinler
    • VHD dosya boyutları ve maksimum genişleme değerleri
    • VHD türü
    • Varsa VHD zincir yapısı (differencing)
    • VHD fragmentation oranı
    • Sanal disklerin bağlı olduğu sanal controller türü
    • Pass-through diskler (eğer varsa)
    • Bağlı ama kayıp VHD dosyaları (eğer varsa)
  • Clustered sanal makinelerde yaşanabilen offline configuration resource problemlerinin tespiti ve raporlanması
  • Clustered sanal makinelerde yaşanabilen failed durumlarının tespiti ve raporlanması

Nasıl Kullanılır?

Get-HyperVReport.ps1’in kullanımı oldukça basit. Öncelikle aşağıdaki ön gereksinimlere göz atın.

Hyper-V Ortamı (Raporlanacak Hyper-V sunucular)

  • Clustered veya Standalone olabilir
  • Active Directory üyeliği
  • Desteklenen Hyper-V Sürümleri
    • Windows Server 2012 Hyper-V
    • Windows Server 2012 R2 Hyper-V
    • Hyper-V Server 2012
    • Hyper-V Server 2012 R2

Script Çalışma Ortamı (Script’in çalışacağı sunucu)

  • Bir uzak Windows Server olabileceği gibi doğrudan ortam içerisindeki herhangi bir Hyper-V sunucusu da olabilir
  • Hyper-V ile aynı veya güvenilen Active Directory üyeliği
  • Desteklenen Windows Server Sürümleri
    • Windows Server 2012
    • Windows Server 2012 R2 (Önerilir)
  • Windows PowerShell (Desteklenen Windows Server sürümlerinde varsayılan olarak yüklü gelir)
    • 3.0
    • 4.0 (Önerilir)
  • Windows Powershell Execution Policy için RemoteSigned veya Unrestircted ataması (Set-ExecutionPolicy)
  • Hyper-V Powershell (Eğer yüklü değilse tespit edilir ve otomatik olarak yüklenir)
  • Clustering Powershell (Eğer yüklü değilse tespit edilir ve otomatik olarak yüklenir)
  • Hyper-V sunucularında yerel yönetici hakkı. Özellikle WMI query’lerin çalışabilmesi için script’in çalıştırıldığı oturum/hesap, raporlanacak sunucular üzerinde yerel yönetici haklarına sahip olmalı.

Get-HyperVReport.ps1’i indirip bir dizine koyun. Ortamda yetkili hesap ile oturum açın, Powershell aracını başlatın ve script’in bulunduğu dizine geçin.

windows-powershell

Komut string’ini oluştururken kullanabileceğiniz parametreler, alabilecekleri değerler ve kullanım örnekleri script dosyası içerisindeki Help bölümünde detaylı olarak yer alıyor. Yine de kısaca bahsetmek gerekirse;

-Cluster Bir Hyper-V Cluster ortamını raporlarken cluster name’i belirtmek için kullanılır.

-VMHost Bir veya birden fazla Standalone Hyper-V sunucusunu raporlarken sunucu isimlerini belirtmek için kullanılır.

-HighlightsOnly Raporda tüm sonuçlara yer vermek yerine sadece üzerinde uyarı olan kaynakları listeler. Özellikle çok sayıda sanal makine ve sunucu bulunan ortamlarda raporu incelemeyi kolaylaştırır. (Opsiyonel)

-ReportFilePath HTML rapor dosyasının kayıt edileceği dizini değiştirmek için kullanılır. (Opsiyonel)

-ReportFileNamePrefix HTML rapor dosyasının isim ön ekini değiştirmek için kullanılır. (Opsiyonel)

-SendMail HTML raporu e-posta şeklinde göndermek için e-posta özelliğini aktif eder.

-SMTPServer E-posta sunucusu adresi. (Eğer -SendMail aktif ise zorunludur)

-SMTPPort E-posta sunucu portu. (Varsayılan olarak 25 değerindedir)

-MailTo E-posta alıcı adresleri. (Eğer -SendMail aktif ise zorunludur ve virgül ile ayrılarak birden fazla adres belirtilebilir)

-MailFrom E-posta gönderici adresi. (Eğer -SendMail aktif ise zorunludur)

-MailFromPassword E-posta gönderici adresi parola bilgisi (Sadece SMTP Authentication gerekliyse kullanılır)

-SMTPServerTLSorSSL E-posta gönderimi için TLS/SSL desteğini aktif eder. (Sadece e-posta sunucusu tarafından isteniyorsa kullanılır)

Aşağıda ise birkaç komut örneği bulabilirsiniz.

1) Hvcluster1 isimli bir Hyper-V Cluster ortamını raporlamak için.

.\Get-HyperVReport.ps1 -Cluster Hvcluster1

2) Hvcluster1 isimli Hyper-V Cluster ortamında çok sayıda sanal makine ve sunucu var, bu yüzden sadece üzerinde uyarı olan kayıtları raporlamak için. Yani HighlightsOnly mode.

.\Get-HyperVReport.ps1 -Cluster Hvcluster1 -HighlightsOnly $true

3) Birkaç Standalone Hyper-V sunucusunu raporlamak için

.\Get-HyperVReport.ps1 -VMHost Host1,Host2,Host3

4) Bir Hyper-V Cluster’ı raporlamak ama oluşan rapor dosyasını farklı bir ön ekle farklı bir dizine kayıt etmek için.

.\Get-HyperVReport.ps1 -Cluster Hvcluster1 -ReportFileNamePrefix YeniOnEk -ReportFilePath c:\yeni-raporlar

5) Bir Hyper-V Cluster’ı raporlamak ve oluşan HTML dosyayı aynı zamanda SMTP Authentication istemeyen bir e-posta sunucusu üzerinden birkaç alıcıya göndermek için.

.\Get-HyperVReport.ps1 -Cluster Hvcluster1 -SendMail $true -SMTPServer 10.20.30.5 -MailFrom sender@hyperv.corp -MailTo recepient1@hyperv.corp,recepient2@hyperv.corp,recepient2@hyperv.corp

6) Bir Hyper-V Cluster’ı raporlamak ve oluşan HTML dosyayı aynı zamanda SMTP Authentication ve TLS isteyen bir e-posta sunucusu üzerinden alıcılara göndermek için. Örneğin Gmail üzerinden.

.\Get-HyperVReport.ps1 -Cluster Hvcluster1 -SendMail $true -SMTPServer smtp.gmail.com -SMTPPort 587 -MailFrom sender@gmail.com -MailFromPassword P@ssw0rd -SMTPServerTLSorSSL $true -MailTo sakinci@inprowise.com

Önemli Notlar

  • Script tek bir noktadan çalıştırılır; doğrudan bir Cluster üyesi, Standalone Hyper-V Host veya tamamen farklı bir görevdeki uzak Windows Server üzerinden çalıştırabilirsiniz.
  • -Cluster ve -VMHost parametreleri aynı anda kullanılamaz. Yani ya Cluster ortamınızı ya da Standalone Hyper-V sunucu grubunu raporlayabilirsiniz. Eğer her ikisini de raporlamanız gerekiyorsa yine ayrı ayrı olmak koşuluyla iki farklı pencerede (veya zamanlanmış görevde) veya sırayla raporlamanız mümkün.
  • Bir Hyper-V sunucu eğer Cluster üyesi ise sadece -Cluster parametresi kullanılarak diğer Cluster Node’ları ile birlikte raporlanabilir çünkü ortam bilgileri aynı Cluster içerisindeki diğer kaynaklarla birlikte değerlendirildiğinde anlamlıdır.
  • Raporlama için -Cluster parametresine aynı anda sadece tek bir cluster ismi verilebilir. Birden fazla Cluster’ın aynı rapor içerisinde gösterilmesi desteklenmez.
  • Bir Hyper-V sunucu eğer Cluster üyesi değil ise sadece -VMHost parametresi kullanılarak raporlanabilir.

Get-HyperVReport.ps1 İndirme Bağlantısı

İndirme ve versiyon takibini tek noktadan yapabilmek için script’in bu 1.0 sürümünü ve önümüzdeki günlerde yayınlanacak sonraki sürümlerini Technet Gallery üzerinde host etmeye karar verdim. Blog’da sürümler ve özellikler hakkında yazılara yer vermeye devam edeceğim tabii ki, ama yeni sürümler de dahil indirme kaynağı Technet Gallery olacak. Aşağıdaki bağlantıyı kullanarak Get-HyperVReport.ps1’in 1.0 sürümünü indirip kullanmaya başlayabilirsiniz.

Yorumlar (12)

  1. Mesut GUVEN

    Merhaba Serhat Hocam,

    Ellerine ve fikrine sağlık. RSS üzerinden yeni makalenden hemen haberim oldu ve keyifle okudum.
    Fakat production ortamında demek için kaygılarım oldu ve diğer kullanıcılarında olabilir diye belirtmek istedim. Çalıştırdığın ortamda ne gibi sorunlar oldu yada olabilir, çalışan sistemleri performans olarak etkileyici tarafları veya kilitlenme ve reset atma gibi durumları söz konusu olabilir mi?

    Yukarıdaki konularda da bilgi verebilmen durumunda bu makalende zevkli olduğu kadar güven vericide olacaktır.

    Teşekkürler,

  2. Serhat AKINCI

    Merhaba, bu vesileyle bilgi vermiş olayım;

    Get-HyperVReport.ps1 kodu sadece ve sadece “Get” işi yapıyor. Yani script içerisinde New, Set, Start gibi mevcut durumu değiştirebilecek herhangi bir komut yer almıyor. Ortamdaki verileri toplarken Get-VM, Get-Cluster, Get-VHD gibi yerleşik cmdlet’leri kullanıyor veya Get-WmiObject ile özel WMI sorguları çalıştırıyor. PowerShell komut satırında Get-VM yapmak ile ortamda bu script’i çalıştırmak aynı seviyede riskli.

    Get-HyperVReport.ps1’i örneğin 3 Node’lu yaklaşık 30 VM’li bir ortamda çalıştırdığınızda, script’in çalıştığı sunucu üzerinde (runtime environment) 50mb memory PowerShell konsolu için, yaklaşık 30mb memory ise veri toplama işi için kullanılıyor. Bu yük sadece script’in çalıştığı sunucu için geçerli. Beraberinde %1’e ulaşmayan bir işlemci kullanımı söz konusu. Ortam genişliğinize göre 8-10 sn içerisinde raporlama tamamlandıktan sonra bu kaynaklar da boşa çıkıyor. Raporlanan Hyper-V sunucularında ise ölçülebilir bir yük oluşmuyor diyebiliriz çünkü sorgulara zaten çalışır durumda olan WinRM/WMI uygulamaları yanıt dönüyor.

    Production ortamlarda güvenle kullanabilirsiniz :)

  3. Aydın

    Çok yararlı bir çalışma olmuş , teşekkür ederim.

  4. Koli

    Başarılı bir çalışma olmuş . Umarım ilgili kişiler istifade ederler. Çalışmalarınızın devamını diliyorum .

  5. ismail

    Gerçekten çok faydalı olmuş, Hyper-v ortamları için büyük bir eksikliği giderdiğine inanıyorum,

    Teşekkürler emeklerin için

  6. Hyper-V Reporting Script (Get-HyperVReport.ps1) | Ismail Aksoy Blog

    […] http://www.serhatakinci.com/index.php/hyper-v-raporlama-araci-get-hypervreport-ps1.html […]

  7. Onur

    Eline sağlık Serhat hocam. Çok faydalı bir script yazmışsın. Başarılarının devamını diliyorum.

  8. Steve

    You have made many people happy! Thank you for your work – http://www.reddit.com/r/sysadmin/comments/2t43zk/awesome_hyperv_reporting_script/

  9. Hüseyin ERTUGRUL

    Oldukça faydalı sonuçları bu kadar basit alabilmemiz sayenizde serhat bey. Emeğinize sağlık, çalışmanızın devamını dileriz.

  10. Fikret Polat

    Serhat Bey öncelikle emeğinize sağlık.Bu scripti hyper-v v2 ortamı içinde kullanabilir miyiz.

  11. Serhat AKINCI

    Hayır, sadece Windows Server 2012 Hyper-V ve 2012 R2 Hyper-V için kullanılabilir.

  12. Mustafa Çelebi

    Serhat hocam ellerinize sağlık, scripti kurdum ve çalışıyor, fakat scripti Task Schedulera ekleyince çalıştıramadım, yardımcı olursanız sevinirim.

Yorum Ekle

* Gerekli

* Gerekli

* Tercihen