1. Ana Sayfa
  2. Microsoft PowerShell
  3. Powershell Script ile Log Otomasyonu

Powershell Script ile Log Otomasyonu

Knowledge-Management-System

Birçok firma altyapısında hizmet veren uygulama loglarının mevcut makineler üzerinde oldukça alan tuttuğunu ve disk ile ilgili yer problemlerinin yaşandığını görürüz.

Özellikle büyük ölçekli firmalarda log yönetimi third party yazılımlarla sağlanmaktayken özellikle Powershell gibi güçlü bir scripting ürünü ile bu işi yapmak gerek maliyet, gerekse yönetim açısından oldukça avantajlı hale gelmektedir.

Bu senaryomuzda şirketinizde, işletmenizde ya da en basitinden test ortamınızda kullanabileceğiniz Log Otomasonu sürecini Powershell Script kullanarak nasıl yönetebileceğinizi göreceğiz.

Birden fazla makinede disk üzerinde tutulan logları 7zip kullanarak sıkıştırıp farklı bir disk üzerine alacağımız akıllı bir yapı tasarlayacağız:

Çalışmamıza yazılan scripti parça parça açıklayarak başlayacağım:

Scriptin çalışma yapısından genel olarak bahsetmem gerekirse;

Birden fazla makinede source ve destination olarak belirlediğimiz pathleri alıp ve source alanında bulunan log dosyalarının da uzantısını kullanıp, belirli günden eski logları 7zip ile sıkıştırıp farklı bir diske taşımayı amaçlıyoruz. Buradaki kritik noktalardan biri Powershell scriptimizi birden fazla makinede çalıştıracağımız için gerekli firewall tanımlarının tam olması ve ilgili makinelere mutlaka uzak erişimlerin olması gerekmektedir.

Scriptin ilk kısmında, fonksiyon parametlerini tanımlıyoruz.

Burada SourcePath, DestinationPath, FileNameExtensions, daysBack alanlarını değişken olarak tanımlıyoruz ve logların o anki günden kaç gün eski logların arşivleneceğini belirteceğimiz bir değişken daha tanımlıyoruz:

 

 

Bu kısımda, sıkıştırma işlemini 7zip ile yapacağımız için 7zip.exe’nin sıkıştırma işleminin yapılacağı remote makinede mutlaka olması gerekmektedir. Bu kontrolü yapıp, log dosyalarının son yazılma tarihi(LastWriteTime) kontrol edilerek anlamlı bir dosya isimlendirmesi yapıyoruz. Böylece sıkıştırma işlemini yaptığımız logların hangi tarihte etiketlediğimizi görebileceğiz:

 

 

Bu kısımda; daha önce son yazılma tarihine göre topladığımız log dosyalarını, son yazılma tarihi bilgisini içeren klasörlere gruplayarak atıyoruz ve artık loglar yazılma tarihlerine göre isimlendirilmiş klasörlerde olacak. Böylece yukarda belirttiğimiz referans değerlerine göre tüm loglar klasörlere taşınmış olacak:

 

 

Sıra geldi en kritik kısma; bu aşamada sıkıştırma işlemine hazır olan log dosyalarını source path’den 7zip ile sıkıştırarak destination pathe taşıyoruz. Taşıma işlemini yapmasıyla beraber source pathde bulunan log dosyalarını tamamen silecek.

Burada kritik birkaç nokta var. İlk olarak 7zip parametlerini kullanırken sıkıştırma algoritmasının parametlerine dikkat etmek gerekir. Özellikle “mx” parametresi sıkıştırma düzeyini belirlemektedir. Biz en agresif sıkıştırma düzeyini seçiyoruz. İsteyenler 7zip algoritması olan LZMA algoritmasına bakarak detayları inceleyebilir.

İkinci nokta ise burada sıkıştırma işlemi sonrası source pathde tüm logların silineceğidir. Bu işlemi yaparken script içersine kontrol koydum fakat yine de kendi yapınızda çok dikkatli olmanız gerektiğinizi ve kontrolü yapınıza göre koymanız gerektiğini unutmayın:

 

 

Son kısımda ise hangi makinelerde bu işlemlerin yapılacağını belirtip makinelerimizi invoke olarak fonksiyonumuzu çağırıyoruz:

Kritik Nokta: Scriptin çalıştığı makine mutlaka invoke olarak erişeceği tüm makinelere SMB 445 ve TCP/HTTPS 5986 portları üzerinden erişimi olmak zorundadır. Aksi takdirde script çalışmayacaktır.

 

 

Test için script içerisindeki makinelerden birinde bu işlemleri denediğimiz aşağıdaki gibi başarıyla tüm süreci tamamladığını görürürüz:

Aşağıdaki alanda source path loglarımız olsun:

Resim-1

 

Şimdi bu logları belirttiğimiz referans değerlerine göre sıkıştırıp farklı bir diske taşıyacağız:

0 günden eski logları alıp “LastWriteTime” göre gruplayıp sıkıştırılmış halde taşımasını istiyorum:

Örnek:

Scriptimizi yukardaki referans değerlerine göre çalıştırdığımızda aşağıdaki gibi source pathde yer alan log dosyalarını başarılı bir şekilde destination pathe tarih bazında taşıdığını ve source pathden ilgili logları sildiğini görüyoruz:

Resim-2

 

Resim-3

 

Resim-4

 

Source path kontol ettiğimizde ilgili logları görmemiz gerekir. Böylece örnek bir senaryo ile bir ya da birden fazla makinede nasıl log yönetimini sağlayacağımızı görmüş olduk. Bu işlemlerin otomasyon tarafı ise farklı yöntemlerle yapılabilir. İlk ve en basit yöntem bu scriptinizi Task Scheduler koymak olabilir. Benim önerim bir önceki yazımda bahsettiğim ürün olan System Center Orchestrator ile bu işi otomatize etmeniz yönündedir. Powershell scriptinizi bir önceki yazımda bahsetttiğim şekilde Orchestrator’da “Execute PS Script” kullanarak bu işlemi birden fazla makinede yaptırıp herhangi bir zamanda çalıştırıp rahatlıkla otomatize edebilirsiniz.

Scriptin tamamını paylaşmıyorum. Parçaları birleştirip kendiniz test ederek daha efektif kullanacağınızı düşünüyorum.

Bir sonraki yazıda görüşmek üzere.

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

TAGs,

Yorum Yap

Yazar Hakkında

1989 yılında Samsun’da doğdu. Üniversite öncesi öğrenimini Samsun’da tamamladı. Ondokuz Mayıs Üniversitesi Bilgisayar Mühendisliği mezunudur. Aynı zamanda Kocaeli Üniversitesi’nde MBA yapmaktadır. IT System Administrator olarak 2014'den beri birçok firmada görev almıştır. Şu an özel bir bankada IT System Administrator olarak çalışmaktadır. MSHOWTO bünyesinde; Powershell, Python, SQL, System Center Orchestrator, Windows Server, SCOM, SCCM, Vmware, Hyper-V, Cisco UCS alanlarında yazarlık yapmaktadır.

Yorum Yap