Podsłuchiwanie IIS

W zasadzie, to nie bardzo wiadomo, od której strony zacząć. Czy od IIS czy od ETW. Przyjmijmy tymczasowo, że ETW tylko wspomnę a kiedyś porządnie opiszę.

W największym skrócie, ETW (czyli Event Tracing for Windows) jest wprowadzonym w Windows 2000 mechanizmem, dzięki któremu aplikacje i komponenty systemu mogą coś podawać od wiadomości. Jeżeli ktoś zechce słuchać to się dowie, jeżeli nie – trudno. Zaletą jest duża szybkość oraz to, że jest to wspólny mechanizm dla wielu aplikacji i komponentów, więc niezależnie od tego, kto publikuje informację, nasłuchiwanie można zrealizować tym samym mechanizmem. Za wadę można uznać fakt, że jeżeli nikt nie nasłuchuje, to rozgłoszona informacja przepadnie. Nie jest zapisywana w żadnym logu itp. Oczywiście, wbudowanymi w system mechanizmami można nasłuchiwać i zapisywać – wystarczy chcieć, jednak włączenie zapisywania musi być świadomym działaniem administratora no i musi wydarzyć przed monitorowanym zdarzeniem, a nie po. Wbrew pozorom, w każdym systemie jest całkiem dużo komponentów chętnych do informowania o tym, co się w nich właśnie dzieje. Ich listę można otrzymać po wydaniu polecenia logman query providers – czterocyfrowe liczby komponentów nie są wynikiem niezwykłym. Nasłuchiwanie komunikatów od ETW (czyli bycie ETW Consumerem) można zrealizować na wiele sposobów, skupię się na jednym, często niezauważanym: na Message Analyzer. To bezpłatne narzędzie od Microsoft często uważane jest za unowocześnioną wersję Network Monitora, jednak jego zasada działania jest zupełnie inna i (co dla nas ważne) polega właśnie na nasłuchiwaniu ETW.

Po tym krótkim wstępie na temat tego czym jest ETW i czym można sobie go posłuchać, pora na IIS. Internet Information Server "od zawsze" pozwalał na zapisywanie w tekstowych logach podstawowych parametrów każdego przychodzącego żądania (requestu) http. Do potrzeb statystyk, analiz czy wyłapywania typowych błędów, wbudowany mechanizm logowania jakośtam się nadaje, zwłaszcza w połączeniu z logparserem, który potrafi przeanalizować setki tysięcy zapisanych zdarzeń na sekundę. Dla pozyskania ogólnej wiedzy o kondycji serwera dość dobrze nadaje się Performance Monitor i liczniki dodawane przez IIS. Jeżeli jednak ktoś zechce oglądać wpadające żądania w czasie rzeczywistym – o dobry mechanizm już nieco trudniej, zwłaszcza w starszych systemach. I właśnie dlatego, w Windows 2012R2 dodany został provider ETW odpowiedzialny za ogłaszanie w systemie informacji o przychodzących do IIS zapytaniach.

Zamiast rozwodzić się nad teorią, proponuję proste ćwiczenie praktyczne. Potrzebne będą:

  • Windows Server 2012 R2 lub nowszy z zainstalowanym IIS,
  • Message Analyzer

Najpierw musimy poprosić IISa o raportowanie nie tylko do logu (co jest ustawieniem domyślnym), ale również do ETW

ETW in IIS

Następnie uruchamiamy Message Analyzera (u mnie w wersji 1.4) i kolejno wybieramy:

  • New Session
  • Live Trace
  • Add Providers
  • Add System Provider

Add System Provider

W oknie wyszukiwania wpisujemy IIS, wybieramy z listy Microsoft-Windows-IIS-Logging, klikamy "Add To", "OK" i "Start".

IIS Logging Provider

No i w zasadzie to tyle. Message Analyzer w czasie niemal rzeczywistym wyświetla informacje o trafiających do serwera zapytaniach. Możemy sobie wynik przefiltrować, pokolorować czy skorzystać z innych mechanizmów narzędzia, żeby na ekranie widzieć dokładnie to, co jest potrzebne.

Message Analyzer

Możemy też zapisać pozbierane dane do pliku, ale jeżeli ktoś chce używać Message Analyzera tylko po to, żeby komunikaty od ETW zapisywać w pliku, to polecam zdecydowanie mniej zasobożerne polecenie logman. Pozbierane do pliku ETL dane można później przetłumaczyć na inne formaty narzędziem tracerpt. I logman i tracerpt są wbudowane we wszystkie współczesne systemy Windows, ale o tym napiszę, gdy poważniej podejdę do obiecanego w pierwszym akapicie porządnego opisu ETW.