IIS ETW trace alma ve inceleme
Merhabalar,
Biliyorsunuz ki IIS sunucusunun son sürümleri ile birlikte gelen FRT (Failed Request Tracing) gibi etkili birçok hata ayıklama yöntemi mevcut. Örneğin FRT; hatanın hangi modülden geldiği ve hatanın içeriğinin ne olduğu ile ilgili detaylı bilgi toplamak için faydalı bir yöntem. Peki diyelim ki HTTP isteği IIS üzerinde beklemediğiniz bir biçimde sonlandırılıyor ve "IIS log"larında, "HTTPErr" loglarında, "FRT" loglarında hiçbir bilgi bulamadınız. Bu durumda ne yapmalısınız. Bu durumda, "HTTP" iletişimi ile ilgili alt seviyelerde (HTTP.sys kernel seviye sürücü) bir sorunla karşılaşıyor olabilirsiniz. "HTTP" alt seviye modülleri kernel seviyesinde iletişimi bir sebepten kapatıyor olabilir. Bir sonraki adım olarak IIS 'in bu modüllerinden "ETW trace" toplayabilirsiniz.
Trace konfigürasyonunu, komut satırından, "logman.exe" uygulamasını kullanarak aşağıdaki adımlar ile gerçekleştiriyoruz:
logman -start IISTrace -pf providers.txt -mode Circular -max 20 -ets
Yukarıdaki komut, IIS trace'ini providers.txt (blog'a ekli dosya) içerisinde belirtilen IIS modülleri için, "circular" buffer kullanarak ("-mode circular"), en fazla 20 MB boyutlu bir trace oluşturacak şekilde ( "-max 20") başlatıyor. Trace'lerin "circular" olarak alınıyor olması, problemin her zaman oluşturulamadığı durumdalarda gerekli olabiliyor. "Circular" modunda, olay tekrarlanana kadar alınan "trace" sürekli dosyada kendi maksimum boyutu geçmeyecek şekilde kendi üzerine yazılıyor.
Not: Ekteki dosyadaki provider listesi aşağıdaki gibi , ve dosyaya sağ taraftaki "GUID" bilgilerinin eklenmesi gerekmekte->
IIS: WWW Global {d55d3bc9-cba9-44df-827e-132d3a4596c2}
IIS: SSL Filter {1fbecc45-c060-4e7c-8a0e-0dbd6116181b}
IIS: Request Monitor {3b7b0b4b-4b01-44b4-a95e-3c755719aebf}
IIS: WWW Server {3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}
IIS: Active Server Pages (ASP) {06b94d9a-b15e-456e-a4ef-37c984a2cb4b}
IIS: IISADMIN Global {DC1271C2-A0AF-400f-850C-4E42FE16BE1C}
IIS: WWW Isapi Extension {a1c2040e-8840-4c31-ba11-9871031a19ea}
HTTP Service Trace {dd5ef90a-6398-47a4-ad34-4dcecdef795f}
Problem oluştuğunda ise "trace" i aşağıdaki komut ile durduruyoruz:
logman -stop IISTrace -ets
Ufak bir not: Kopyala yapıştır yaparken “-“ karakteri “–“'e dönüşebilir. Bunları silerek yeniden yazabilirsiniz.
Trace tamamlandığında komutu çalıştırdığınız yerde IISTrace.etl isminde bir trace dosyası oluşmuş olmalı. Bu trace dosyası ilk oluştuğunda okunabilir formatta değildir. Trace'in içeriğini görebilmek için onu formatlamamız gerekiyor. Formatlamak için logparser uygulamasını kullabilirsiniz. Aşağıdaki komutla "IISTrace.etl" dosyasının içerisiğini "csv" formatında kaydediyoruz:
c:\Program Files (x86)\Log Parser 2.2> Logparser "select * into IISTrace.csv from IISTrace.etl" -i:etw -o:csv"
Task completed with parse errors.
Parse errors:
5994 parse errors occurred during processing (To see details about the parse error(s), execute the command again with a non-zero value for the "-e" argument)
Statistics:
-----------
Elements processed: 94972
Elements output: 94972
Execution time: 5.82 seconds
Sonrasında trace dosyalarını "Excel" kullanarak aşağıdaki şekilde görüntüleyebilirsiniz:
14 IISRequestNotification PRE_BEGIN_REQUEST_END 3/5/2013 13:06 ContextId={00000000-0000-0000-de03-0080000000f8}|ModuleName=IsapiFilterModule|
NotificationStatus=NOTIFICATION_CONTINUE
15 IISRequestNotification PRE_BEGIN_REQUEST_START 3/5/2013 13:06 ContextId={00000000-0000-0000-de03-0080000000f8}|ModuleName=RequestMonitorModule
16 IISRequestNotification PRE_BEGIN_REQUEST_END 3/5/2013 13:06 ContextId={00000000-0000-0000-de03-0080000000f8}|ModuleName=RequestMonitorModule|
NotificationStatus=NOTIFICATION_CONTINUE
17 IISRequestNotification PRE_BEGIN_REQUEST_START 3/5/2013 13:06 ContextId={00000000-0000-0000-de03-0080000000f8}|ModuleName=FailedRequestsTracingModule
18 IISRequestNotification PRE_BEGIN_REQUEST_END 3/5/2013 13:06 ContextId={00000000-0000-0000-de03-0080000000f8}|ModuleName=FailedRequestsTracingModule|
NotificationStatus=NOTIFICATION_CONTINUE
Aşağıda daha detaylı bilgi edinebileceğiniz birkaç farklı makaleyide ilginize sunuyorum.
"Advanced Debugging and troubleshooting":
https://blogs.msdn.com/b/ntdebugging/archive/2009/12/11/test.aspx
"Capturing and analysing an ETW trace":
https://blogs.msdn.com/b/sudeepg/archive/2009/02/25/capturing-and-analyzing-an-etw-trace-event-tracing-for-windows.aspx
"Improving debugging and performance tuning with ETW":
https://msdn.microsoft.com/en-us/magazine/cc163437.aspx
İyi çalışmalar dilerim,
Mert Öztürk