LogParser: IIS loglarını nasıl inceleyeceğiz?

LogParser, buradan ücretsiz indirebileceğiniz küçük bir komut satırı aracıdır. Ücretsiz ve küçük olması sizi yanıltmasın, inanılmaz güçlü bir araçtır. Ancak çok az bilinir ve kullanılır.

IIS logları, özellikle yoğun kullanılan ortamlarda hergün "gigabyte"lar seviyesinde olabilir. Bunları açmak bile bazen mümkün olmamaktadır. Ancak bazı sorunların araştırılması için bu loglar çok değerli bilgiler içerir. Bir şekilde açabilsek bile, milyonlarca satır veri arasından işimize yarayacak olanları ayıklamak mümkün olmayabiliyor. İşte tam da bu noktada LogParser imdadımıza yetişiyor.

LogParser.exe, parametre olarak SQL benzeri bir dilde yazılan bir “query string” alır. Bu “sorgu cümleciği”ni bizim belirlediğimiz log dosyaları üzerinde çalıştırıp, sonucu istersek bir dosyaya kaydedebilir, veya komut satırında gösterebilir. “Sorgu cümleciği”ne bazı örnekleri aşağıda bulabilirsiniz. Burada şunu belirtmekte fayda var: LogParser sadece IIS loglarını değil, pek çok log türünü tanıyabilmektedir. Örneğin olay günlükleri (event log), Netmon kayıtları (.cap dosyaları), XML dosyaları gibi.

Kullanımı:

LogParser, çok detaylı bir yardım dosyasıyla gelmektedir. Bu nedenle ben kullanımı ile ilgili çok detaya girmeden, sadece fikir sahibi olmanızı sağlamaya çalışacağım. En genel haliyle komut satırından şu şekilde çalıştırabiliriz:

C:\Program Files\IIS Resources\Log Parser 2.2>LogParser.exe “SELECT [sütün adları] INTO [kaydedilecek dosya adı] FROM [log dosyası adı] WHERE [kriterler]” -i:IISW3C -o:W3C

Buna benzer bir komutu çalıştırdığımızda aşagıdakine benzer bir sonuç alırız:

Statistics:
-----------
Elements processed: 111769
Elements output: 411
Execution time: 0.72 seconds

Yukarıdaki rakamlar gerçek bir işlemden alınmıştır. Yani yaklaşık 112 bin satır veri arasından, benim aradığım kriterlere uyan 411 tanesini ayıklaması 1 saniyeden kısa sürmüştür.

Örnekler:

Aşağıda, hem LogParser'ın neler yapabileceği ile ilgili fikir sahibi olmanızı sağlayacak, hem de işinize yarayabilecek bazı örnekler bulabilirsiniz.

- Bir log dosyasındaki “500 Internal Server Error” almış tüm isteklerin listesini çekmek:

logparser.exe "SELECT * INTO filtered.log FROM ex080515.log WHERE sc-status=500" -i:IISW3C -o:W3C

- Bir log dosyasında, saat 14:00 ile 15:00 arasında, durum kodu 400 ve üzerinde yanıt almış (yani bir şekilde hata almış) tüm istekleri çekmek için:

logparser.exe "SELECT * INTO filtered.log FROM ex080515.log WHERE time > '14:00:00' AND time < '15:00:00' AND sc-status >= 400" -i:IISW3C -o:W3C

- Bir klasördeki tüm log dosyalarında belirli bir IP adresinden gelmiş isteklerin listesini çekip, bunları “time-taken” (işlenme süresi) sütununa göre sıralamak için:

logparser.exe "SELECT * INTO filtered.log FROM *.log WHERE UserIp = '192.168.1.110' ORDER BY time-taken" -i:IISW3C -o:W3C

NOT: En son örnekteki işlem, toplam yaklaşık 500 bin satır kayıt için sadece 2 saniye sürmüştür.

- Biraz daha karmaşık bir örnek verelim. Web sunucumuza gelen isteklerin ortalama işlenme sürelerini, ve her bir sayfaya gelen toplam istek sayısını çekmek için:

logparser.exe "SELECT AVG(time-taken) As OrtalamaSure, MAX(time-taken) As MaxSure, COUNT(*) As ToplamIstek, TO_LOWERCASE(cs-uri-stem) INTO istatistik.log FROM *.log GROUP BY cs-uri-stem ORDER BY OrtalamaSure DESC" -i:IISW3C -o:W3C

Son olarak da olay günlükleri ile ilgili bir örnek verelim. Aşağıdaki komut, event.evt dosyasından, kaynak ismi W3SVC olan (yani IIS’e ait) logları bir csv dosyasına kaydedecektir:

logparser.exe" "SELECT TimeWritten, SourceName, EventID, Message INTO filtered.csv FROM event.evt WHERE SourceName = 'W3SVC'" -i:EVT -o:CSV

Yardım dosyasından alıntılar:

LogParser’ın desteklediği IIS ile ilgili log türleri (bunların dışında 10’dan fazla log türü daha desteklenmektedir):

· IISW3C: parses IIS log files in the W3C Extended Log File Format.

· IIS: parses IIS log files in the Microsoft IIS Log File Format.

· BIN: parses IIS log files in the Centralized Binary Log File Format.

· IISODBC: returns database records from the tables logged to by IIS when configured to log in the ODBC Log Format.

· HTTPERR: parses HTTP error log files generated by Http.sys.

· URLSCAN: parses log files generated by the URLScan IIS filter.

 IISW3C log türünde desteklenen alan adlarından bazıları:

Name

Type

Description

Date

TIMESTAMP

The date on which the request was served (Universal Time Coordinates (UTC) time)

Time

TIMESTAMP

The time at which the request was served (Universal Time Coordinates (UTC) time)

c-ip

STRING

The IP address of the client that made the request

cs-username

STRING

The name of the authenticated user that made the request, or NULL if the request was from an anonymous user

cs-method

STRING

The HTTP request verb or FTP operation

cs-uri-stem

STRING

The HTTP request uri-stem or FTP operation target

cs-uri-query

STRING

The HTTP request uri-query, or NULL if the requested URI did not include a uri-query

sc-status

INTEGER

The response HTTP or FTP status code

sc-substatus

INTEGER

The response HTTP sub-status code (this field is logged by IIS version 6.0 and later only)

time-taken

INTEGER

The number of milliseconds elapsed since the moment the server received the request to the moment the server sent the last response chunk to the client

CENK ISCAN