2 Mart 2012 Cuma

Log Parser


Log yönetimi çözümünüz yoksa ve elinizde incelemeniz gereken bir log dosyanız varsa Logparser çok işinize yarayacaktır.
Log dosyalarini, dizin yapisini veya text dosyalarini hizli taramanin yollari Microsoft'un Log Parser araciyla, artik SQL dil yapisi ile log dosyalarini rahatlikla sorgulayabilirsiniz.


Yukarıdaki adresten Logparser 2.2 kurulum dosyasını indirebilirsiniz. Windows 2000, Windows Server 2003, Windows XP Professional Edition sistemlerine kurulum desteklenmektedir.
Logparser uygulaması sadece SELECT ifadesini destekliyor, yani INSERT, UPDATE veya DELETE yapamiyorsunuz. Zaten amaci da bu degil. SQL standardi olarak herhangi bir standart derdi yok. Yani ANSI, ODBC, Microsoft SQL Server uyumlulugu düsünülmemis. JOIN yapamiyorsunuz (gerek yok), matematiksel operasyonlar ADD, SUBTRACT gibi fonksiyonlar kullanilarak yapilabiliyor . Buna karsilik ek olarak pek çok eklenti fonksiyonu var, bunlari uygulamayla gelen Word dosyasindan okuyabilirsiniz. GROUP BY, ORDER BY, HAVING ifadeleri kullanilabiliyor. Aggregate (Sum, Count, Avg) fonksiyonlari kullanabiliyorsunuz. FROM ifadesi biraz degisik çalisiyor, Burada dosya adi verebiliyorsunuz (Örn: ex040412.log), dosya adlarinda maskeleme kullanabilirsiniz. Yani (ex*.log) yazdiginizda o dizindeki bütün "ex" ile baslayan, tipi "log" olan dosyalar incelenebilir. "<n>" ifadesi IIS'in "n"inci applikasyonunun o anki aktif loglarini inceler. Dosya adlarinda bosluk kullanmaniz gerekirse, bosluk yerine \u0020 yazin. Bu UNICODE'da bosluk demektir. Örnek vermek gerekirse "C:\Program Files\a.log" yerine "C:\Program\u0020Files\xxx.log", C#'ta ise söyle yazilmali @"C:\Program\u0020Files\a.log" veya "C:\\Program\\u0020Files\\a.log".





Uygulamanin okuyabildigi formatlar;
1.  Dizin yapisi: Bir dizindeki folderlari bu uygulama sayesinde sorgulayabilirsiniz. Yani dosya adlarini, tarihlerini, boyutlarini sorgulayabilirsiniz.
2.  Text dosyalari: Bir dizinde içinde belirli text geçen dosyalari sorgulayabilirsiniz.
3.  Loglar: Makinanizdaki loglari sorgulayabilirsiniz. Desteklenen formatlar:
IIS W3C uyumlu loglar,
IIS NCSA uyumlu loglar,
IIS IIS uyumlu loglar,
IIS ODBC uyumlu loglar,
IIS BIN uyumlu loglar
URLScan Log formati
System Event Loglari
CSV dosyalari (Virgülle ayrilmis dosyalar)

Ayrica SELECT ifadesinde FROM ifadesinden sonra TO komutu da eklenmistir. Bu komutla çiktinin nereye yapilacagi belirlenir:
1.  Ekran
2.    IIS logu (Bir logdan sorgulama yaparak (FROM ile), baska bir log dosyasina çikti üretebilirisiniz)
3.    W3C logu (amaci 2. madde ile aynidir sadece dosya alan adlari farklidir)
4.    SQL çiktisi. Bu çok hos bir özellik. Sonuçlari bu özellik sayesinde bir veritabanina yazdirabilirsiniz.
5.    CSV formatinda çikti,
6.    XML dosyasina
7.  Template ile belirlenen sekilde. Bu özellik sayesinde template dosyalari olusturup belirlenen formata uygun dosyalar üretebilirsiniz.

Uygulamayla beraber, detayli bir Word dokümani ve hem Scriptler için, hem de SQL ifadelerini açiklayan pek çok örnek dosya geliyor. Mesela IIS saldirilarini listeleyen script kodu var.



Kullanirken her makinaya tüm uygulamayi koymaniza gerek yok. Bir web farm'da çalisiyorsaniz sadece exe versiyonu kurabilir veya sadece dll versiyonu register edebilirsiniz. İki uygulama birbirinden bagimsiz çalismaktadir.

Log parser çalışma prensibi yukarıdaki ekran görüntüsünde aktarılmaktadır. Logparser programı kurulduğunda Help dosyası birlikte gelmektedir. Bütün bileşenlerini çeşitli örneklerle öğrenebileceğiniz en iyi dökümandır. Logparser kullanacak olan kişinin bu dökümanı iyice okuması gerekmektedir.

Logparser Query Syntax
Select
Çıktı sonucunda görülmesini istediğimiz alanları belirlememizi sağlamaktadır.
SELECT TimeGenerated, SourceName
FROM System
Yukarıdaki select cümleciğinde System loglarından TimeGenerated ve SourceName in çıktıda görülmesini sağlayacaktır.
Using
Çıktı sonucunda gözükecek alanların yeniden adlandırılması ve fonksiyonlar kullanalarak alanlar için özelleştirme yapmayı sağlamaktadır.
SELECT Username
USING TO_LOWERCASE( RESOLVE_SID(Sid) ) AS FQAccount, 
      EXTRACT_TOKEN( FQAccount, 1, '\\') AS Username
FROM Security

Yukarıdaki sorguda normalde Security loglarında Username diye bir bilgi bulunmamaktadır. Ancak USING kullanarak Security loglarındaki Sid bilgisinden Username bilgisine ulaşılıp çıktıda bu bilginin verilmesi sağlanabilmektedir. USING syntaxı effektif biçimde kullanılmaktadır.
INTO
Çıktı olarak nereye verinin ve ne tür şekilde oluşturulacağının belirlendiği kısım olarak kullanılmaktadır.
SELECT *
INTO MyOutput.csv
FROM System

Yukarıdaki örnekten görüleceği üzere System loglarındaki herşey (*) MyOutput.csv dosyasına yazdırılacaktır. Bu dosya sorgu hangi dizinde çalıştırılıyorsa orada oluşturulacaktır.
FROM
Logparser a girdi olarak verilecek olan log dosyamızı FROM ile gösterebilmekteyiz.
SELECT *
FROM System, Security
SELECT *
FROM \HKLM\SOFTWARE

WHERE
Where ile log dosyasında aradığımız alanlar için spesifik bir veriyi arayıp bize sonuç olarak dönmesini sağlayabilmekteyiz.
WHERE EventID = 501
WHERE EXTRACT_TOKEN(Strings, 1, '|') LIKE '%logon&' AND
      (   TimeGenerated > SUB( TO_LOCALTIME(SYSTEM_TIMESTAMP()), TIMESTAMP( '10', 'mm' ) )  OR
          SID IS NOT NULL
      )

GROUP BY
GROUP BY ile oluşacak sonuçların gruplanması sağlanmaktadır.
SELECT date, cs-uri-stem, COUNT(*)
FROM LogFiles\ex040528.log
GROUP BY date, cs-uri-stem

Örnek Sonuç;
date       cs-uri-stem         COUNT(ALL *)
---------- ------------------- ------------
2003-11-18 /Default.htm        1
2003-11-18 /style.css          1
2003-11-18 /images/address.gif 1
2003-11-18 /cgi-bin/counts.exe 1
2003-11-18 /data/rulesinfo.nsf 2
2003-11-19 /data/rulesinfo.nsf 6
2003-11-20 /data/rulesinfo.nsf 5
2003-11-20 /maindefault.htm    1
2003-11-20 /top2.htm           1
2003-11-20 /homelog.swf        1

HAVING
HAVING ile bir sorguda belirli bir değeri barındıran sonuçların oluşturulması sağlanabilmektedir.
SELECT SourceName
FROM System
GROUP BY SourceName
HAVING COUNT(*) > 10

Yukarıdaki sorguda SourceName gruplanmakta ve count değeri 10 dan büyük olanlar çıktı olarak gösterilmektedir.
ORDER BY
ORDER BY ile belirlediğimiz bir sonucu göre çıktıların sıralanması sağlanmaktadır.
SELECT date, cs-uri-stem, cs-uri-query, sc-bytes
FROM LogFiles\ex040528.log
ORDER BY sc-bytes DESC


EXPRESSION
ALL
Verilen alan ifadeleriyle değerlerin hepsinin karşılaştırılmasını sağlamaktadır.
Year > ALL (1999; 2000; 2001)
(Year, Age) < ALL (1999, 30; 2001, 40; 2002, 10)

ANY
Year > ANY (1999; 2000; 2001)
(Year, Age) < ANY (1999, 30; 2001, 40; 2002, 10)

BETWEEN
Verilen değerler arasındaki durumlar için sorgu çalıştırılır.
Year BETWEEN 1999 AND 2004
SELECT Path
FROM C:\MyDir\*.*
WHERE TO_UTCTIME(CreationTime) BETWEEN SUB(SYSTEM_TIMESTAMP(), TIMESTAMP('4', 'h')) AND SUB(SYSTEM_TIMESTAMP(), TIMESTAMP('1', 'h'))

IN
Verilen değerler için sorgu çalıştırılmaktadır.
Age IN (20; 30; 45; 60)
(FirstName, State) IN ('Johnson', 'OR'; 'Smith', 'WA')

LIKE
Verilen değere benzeyen bilgiler için sorgu çalıştırılıp sonuç elde edilir.
WHERE cs-uri-stem LIKE '%.htm'
WHERE Message NOT LIKE '%error%'


Hiç yorum yok:

Yorum Gönder