7 Mart 2012 Çarşamba

Logparser Sorgu Sonuçlarının Veritabanına Yazılması


Logparser Sorgu Sonuçlarının Veritabanına Yazılması

Logparser uygulaması ile birçok farklı tipteki log dosyaları üzerinde sql dili ile sorgulama yapmak mümkün. Buna file sistem üzerindeki dosya özellikleri ve standart olmayan csv dosyaları da dahil. Elde edilen sorgu sonuçları üzerinden farklı çıktılar üretmek mümkün. Sorgu sonuçlarını csv,xml veya w3c formatlarında dosyaya yazdırabiliriz. Bunun yanında sorgu sonuçları bir veritabanına aktarılabilir. Şimdi bununla ilgili basit bir örnek yapalım ve püf noktalarını görelim.

Örnek olarak logparser ile windows event logları üzerinde bir sorgu çalıştırdığımız ve sonucu sql sunucuya atmak istediğimizi varsayalım. Adım adım gidelim.


Öncelikle sorgumuzu oluşturalım. Sonucun istediğimiz gibi görünüp görünmediğine bakalım. Aşağıdaki sorgu windows event logları üzerinden EventID = 4624 (başarılı login) sahip logları filtreler. Aşağıdaki sorguyu query.sql isimli bir dosyaya kayıt edelim.

select top 10 TimeGenerated, EventID, EventTypeName, ComputerName, SourceName, Strings
into result.txt
from security where eventid = 4624



Aşağıdaki komutu çalıştırdığımızda sorgu sonucu bir text dosyasına yazılır. Bu sorguyu log dosyasını okuma yetkisine sahip bir kullanıcı ile çalıştırmalısınız. Bir de logparser uygulamasını kurduktan sonra kurulum dizininden alıp system32 altına kopyalamaslısınız. Yoksa cmd de doğrudan çalışmaz. Önce

           C:\>Logparser file:query.sql –i:evt –o:nat –rtp:-1

Şimdi bu sorgu sonucumuzu bir veritabanına atalım. 

İlk adım sunucuya bağlanmak için bir DSN oluşturmak. Administrative Tools > Data Sources (ODBC) uygulamasını açıyoruz.

Windows un 64 bitlik işletim sistemine sahipseniz bu path altında oluşturduğunuz DSN Logparser uygulaması tarafından kullanılamıyor olacak. C:\Windows\SysWOW64\ dizini altındaki odbcad32.exe uygulamasını kullanmanız gerekiyor.

“System DSN” tabı altında Add seçeneğini seçiyoruz. Driver olarak “SQL Server” seçiyoruz ve Finish diyoruz.




Name kısmına bir isim veriyoruz. (testdsn) Server kısmına ise sunucu ismini veriyoruz. (testserver)




Şimdi veritabanına erişmek için bir kullanıcı seçiyoruz. Eğer sorguyu çalıştıracağımız windows kullanıcısının
veritabanına erişme yetkisi varsa “NT authentication” metodunu seçebiliriz. Veya bunun yerine bir sql kullanıcısı da seçilebilir. (Bu seçeneği seçebilmek için veritabanının Mixed modda olması gerekiyor) Burada dikkat edilmesi gereken nokta seçeceğimiz kullanıcının ilgili veritabanı ve tablo üzerinde yetkisi olması.



Bu ekranda verileri yazacağımız veritabanı ismini yazıyoruz. (TestDB)




Bir sonraki adımda herhangi bir değişiklik yapmıyoruz. Son olarak Finish diyoruz ve “Test Data Source” kısmından erişimimiz başarılı mı kontrol ediyoruz.






Şimdi sorgumuzu değiştirelim. Sorgu sonuçlarını veritabanına atarken INTO kısmında belirtilen kısım tablo ismi olmalıdır. Yeni sorgumuz:

select TimeGenerated, EventID, EventTypeName, ComputerName, SourceName, Strings
into windows_logs
from security where eventid = 4624


Şimdi aşağıdaki sorguyu çalıştırdığımızda verilerimiz windows_logs tablosuna yazılacaktır. –createTable seçeneğini ON yapmakla eğer aynı isimde bir tablo yoksa logparser uygulamasının bu tabloyu oluşturmasına izin vermiş oluyoruz. Ancak yine burada sorguyu çalıştırdığımız kullanıcının yetkilerini kontrol etmek gerekiyor.

C:\>Logparser file:query.sql –i:evt –o:sql –dsn:testdsn –server:testserver –database:TestDB -createTable:ON

Öncesinde tabloyu sizin oluşturmanız da mümkün. Ancak veri tiplerinin birebir uyuşması gerekiyor. Burada benim seçtiğim yöntem öncelikle logparser uygulamasına tabloyu create etmesine izin vermek. Sonrasında veritabanı üzerinde tabloyu DROP – CREATE seçeneği ile düzenleyerek yeniden oluşturmak.

Son olarak –ignoreIdCols seçeneğini de açıklamak istiyorum. Verileri sql veritabanına atarken tablodaki ve sorgu sonucundaki alan sayısının ve veri tiplerinin bire bir eş olması gerekiyor. Bu seçeneği ON yaptığınız zaman eğer tablo içersinde bir identity kolon varsa sizin yine de hatasız bir şekilde verileri atabilmenize olanak tanıyor.

C:\>Logparser file:query.sql –i:evt –o:sql –dsn:testdsn –server:testserver –database:TestDB -createTable:ON ignoreIdCols:ON

Yukarıda anlatıldığı gibi bir çok farklı kaynaktan toplanan loglar veritabanına aktarılır. Veritabanı üzerinden logları hem sorgulamak hem de raporlamak çok daha kolay olacaktır. Örneğin verileri attığınız tabloya özel indexler oluşturmak raporlama ve sorgulama sürelerini çok düşürecektir. (Windows Event Logları için EventID veya TimeGenerated alanları indexlenebilir.) Aynı zamanda logları farklı kaynaktan gelecek bilgilerle besleyebilirsiniz. Örneğin bir IPS logunun üzerinde yer alan atak IP adresleri geolocation bilgisi ile eşleştirilebilir. Loglar veritabanına aktarıldıktan sonra ne yapılacağı tamamen size kalmış. 

Hiç yorum yok:

Yorum Gönder