BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











Wykorzystanie narzędzia Log Parser

22-02-2005 17:43 | Wojciech Kowasz
Przeglądanie kilku, a czasami nawet kilkunastu obszernych plików dzienników systemowych w poszukiwaniu konkretnych zdarzeń może wywołać ból głowy nie tylko u początkującego administratora. Znalezienie szukanego wpisu to jednak nie wszystko - istotna jest także odpowiednia wizualizacja, analiza i interpretacja zgrabnego podsumowania informacji prezentowanych w dziennikach, a to podczas korzystania z Event Viewera czy Notatnika nie zawsze jest w pełni wykonalne. Na szczęście, z pomocą przychodzi t

Przeglądanie kilku, a czasami nawet kilkunastu obszernych plików dzienników systemowych w poszukiwaniu konkretnych zdarzeń może wywołać ból głowy nie tylko u początkującego administratora. Znalezienie szukanego wpisu to jednak nie wszystko - istotna jest także odpowiednia wizualizacja, analiza i interpretacja zgrabnego podsumowania informacji prezentowanych w dziennikach, a to podczas korzystania z Podglądu zdarzeń czy Notatnika nie zawsze jest w pełni wykonalne. Na szczęście, z pomocą przychodzi tutaj rewelacyjne narzędzie do przetwarzania danych - Log Parser. Od tej pory analiza logów (i nie tylko) nie powinna sprawiać już żadnych problemów.

Czym jest Log Parser?

Log Parser jest opcjonalnym narzędziem firmy Microsoft dostępnym bezpłatnie do pobrania w witrynie Microsoft Download Center (linki w ramce). Umożliwia przeszukiwanie i opracowywanie danych zawartych w logach systemowych, rejestrze, katalogu Active Directory oraz w dowolnych obiektach systemu plików, a następnie zaprezentowanie ich w najbardziej przystępnej formie (tekst, baza danych SQL, HTML, XML) z uwzględnieniem podanych założeń. Inaczej mówiąc, Log Parser przetwarza zebrane dane w sposób, który najlepiej sprosta aktualnym wymaganiom użytkownika co do tych informacji.

Log Parser jest dostępny z wiersza poleceń. Jego składnia jest bardzo zbliżona do bazodanowego języka SQL, co znacznie upraszcza wykorzystanie narzędzia, czyniąc je bardziej przejrzystym. Dodatkowo istnieje możliwość wykorzystywania silnika Log Parsera w skryptach administracyjnych Visual Basic.

Architektura - obszary zastosowań

Narzędzie Log Parser składa się z trzech głównych komponentów - mechanizmu wejściowego, silnika przetwarzającego dane oraz mechanizmu wyjściowego. Mechanizm wejścia w konfiguracji domyślnej odbiera i interpretuje dane pochodzące z następujących źródeł:

  • dzienniki serwera Internet Information Services
  • dzienniki Windows (pliki Podglądu zdarzeń)
  • pliki zapisane w formacie XML, CSV, TSV i W3C
  • rejestr systemowy
  • katalog Active Directory
  • system plików
  • pliki programu NetMon (.cap)

Dodatkowo, istnieje możliwość dodawania własnych pluginów do programu, co czyni go niezwykle elastycznym narzędziem do przetwarzania wszelkiego rodzaju danych. Po odebraniu danych Log Parser przystępuje do ich przetworzenia zgodnie z założeniami użytkownika. Użytkownik wydaje polecenia za pomocą składni bardzo zbliżonej do języka SQL. Do dyspozycji ma popularne polecenia SQL (SELECT, WHERE, GROUP BY, HAVING, ORDER BY itp.) oraz funkcje (SUM, COUNT, AVG, MAX, MIN itp.). Wynik działania programu zwracany jest do mechanizmu wyjściowego, który opracowuje i prezentuje dane w żądany przez użytkownika sposób. Wynik działania programu może być:

  • zapisany w plikach tekstowych CSV, TSV, XML, W3C lub innych zdefiniowanych przez użytkownika
  • wysłany do bazy danych SQL
  • wysłany do serwera SYSLOG
  • przetworzony w diagramy i wykresy, a następnie zapisany w plikach gif lub jpg
  • wyświetlony bezpośrednio na ekranie

Składnia Log Parser

Najprostsze zapytanie do programu składa się ze źródła danych oraz formatu wynikowego. Przykładowo, aby wyświetlić wszystkie wpisy w dzienniku System na danym komputerze, należy zdefiniować typ danych wejściowych jako EVT (dziennik zdarzeń systemu Windows), a format wynikowy jako NAT (drukowanie wyniku w oknie konsoli). Wreszcie należy określić zapytanie SQL, które zwraca żądane obiekty. Całość przedstawia się w sposób następujący:

C:\>LogParser -i:EVT -o:NAT "SELECT * FROM System"

Komenda SELECT określa obiekty, które mają być przetwarzane przez Log Parser. Użycie gwiazdki powoduje, że tak jak w tym wypadku przetwarzane są wszystkie znalezione obiekty. Polecenie FROM określa miejsce, w którym Log Parser szuka danych do przetworzenia. Aby być bardziej dokładnym, zaleca się dodatkowo stosowanie polecenie INTO, które określa miejsce docelowe zapisu danych. W powyższym przypadku domyślnym miejscem docelowym dla formatu NAT jest konsola, dlatego można pominąć ten parametr.

Jeśli użytkownik nie życzy sobie, aby program po wydrukowaniu 10 elementów zatrzymał proces i czekał na sygnał użytkownika do kontynuacji istnieje możliwość dodania parametru -rtp, co spowoduje wyświetlenie pełnych wyników działania od razu.

Określanie pól

Wykonanie prostego polecenia z powyższego przykładu zwróci dane z wszystkich czternastu (w przypadku dziennika System) pól. Takie zachowanie nie zawsze jest poszukiwanym rozwiązaniem, gdyż często użytkownik zainteresowany jest konkretnymi informacjami. Aby poinstruować Log Parser, że ma przetwarzać dane wyłącznie z określonych pól dziennika, należy odpowiednio zmodyfikować zapytanie SQL wpisując nazwy pól w miejsce gwiazdki.

Aby uniknąć konieczności pamiętania nazw wszystkich kolumn można skierować zapytanie do programu o wyświetlenie dostępnych w danym źródle pól. W tym celu należy wywołać narzędzie z parametrem -h. Poniższy przykład ilustruje takie zapytanie względem dziennika systemowego.

C:\>LogParser -h -i:EVT Fields: EventLog (S) RecordNumber (I) TimeGenerated (T) TimeWritten (T) EventID (I) EventType (I) EventTypeName (S) EventCategory (I) EventCategoryName (S) SourceName (S) Strings (S) ComputerName (S) SID (S) Message (S) Data (S)

Po uzyskaniu nazw pożądanych pól można odpowiednio zmodyfikować swoje zapytanie tak, aby zwracało tylko dane z określonych kolumn. Należy przy tym pamiętać, że po pierwsze rozróżniane są wielkie i małe litery, po drugie zaś w przypadku istnienia spacji w nazwie należy ująć ją w kwadratowych nawiasach ([ i ]). Przykładowo:

C:\>LogParser -i:EVT -o:NAT "SELECT TimeGenerated, EventTypeName, SourceName FROM System"

Wykorzystanie funkcji

Funkcje są ważnymi elementami zapytania, gdyż potrafią przyjąć daną wartość, a następnie przetworzyć ją według podanych kryteriów i zwrócić do programu. Log Parser obsługuje wiele funkcji, w tym arytmetyczne (np. ADD, SUB, MUL, DIV, MOD, QUANTIZE), przetwarzające ciągi znaków (np. SUBSTR, STRCAT, STRLEN, EXTRACT_TOKEN) czy przetwarzające czas (np. TO_DATE, TO_TIME, TO_UTCTIME). Aby lepiej przedstawić możliwości funkcji, można posłużyć się poprzednim przykładem i zmodyfikować zapytanie tak, aby pole z czasem wystąpienia zdarzenia zawierało wyłączenie datę, bez godziny. Można to osiągnąć stosując funkcję TO_DATE

C:\>LogParser -i:EVT -o:NAT "SELECT TO_DATE(TimeGenerated), EventTypeName, SourceName FROM System"

Aliasing pól

Jak zaobserować można na powyższych przykładach, wynik programu zwraca nazwy kolumn w niezmodyfikowanej formie, co często czyni jest mniej czytelnymi, niż życzyłby sobie tego użytkownik. Istnieje jednak możliwość zmiany nazwy (aliasingu) tych pól na dowolne określone przez użytkownika. Służy do tego operator AS, który stosować należy jak przedstawiono poniżej.

C:\>LogParser -i:EVT -o:NAT "SELECT TimeGenerated AS [Data zdarzenia], EventTypeName AS [Typ zdarzenia], SourceName AS Zrodlo FROM System"

Ponieważ dwie pierwsze nazwy zawierają spacje, zostały umieszczone w kwadratowych nawiasach. Ponadto warto zaznaczyć, że do pola z przypisanym aliasem można odwoływać się w trakcie trwania programu także za pomocą tego aliasu, a nie tylko nazwy początkowej.

Filtrowanie i sortowanie rekordów

Filtrowanie i sortowanie rekordów to podstawowe operacje w programie Log Parser. Dzięki filtracji użytkownik ma możliwość uzyskania tylko tych danych, które faktycznie go interesują, a poprzez sortowanie ułatwia sobie ich analizę.

Filtrowanie rekordów

Przykład z wcześniejszej części artykułu zwraca wszystkie rekordy znalezione w dzienniku System, co zwykle prowadzi do uzyskania setek elementów i w rezultacie nie umożliwia konkretnej analizy tych danych. Sytuację tą można zmienić stosując filtrowanie rekordów. Przykładowo można nakazać programowi Log Parser wyświetlenie tylko tych elementów dziennika System, które pochodzą ze źródła Service Control Manager. Do tego celu wykorzystać należy znane z języka SQL polecenie WHERE.

C:\>LogParser -i:EVT -o:NAT "SELECT TimeGenerated, EventTypeName, SourceName FROM System WHERE SourceName = 'Service Control Manager'"

Warunków WHERE w jednym zapytaniu może być oczywiście więcej, a nawet można je łączyć tworząc złożone kryteria. W poniższym przykładzie zakłada się, że pożądanym rezultatem jest uzyskanie wszystkich elementów ze źródła W32Time, ale również wszystkich ze źródła Service Control Manager, pod warunkiem że spełniają dodatkowe kryterium - EventID musi być większe lub równe 7024.

SELECT TimeGenerated, EventTypeName, SourceName FROM System
WHERE ( SourceName = 'Service Control Manager' AND EventID >= 7024) OR
(SourceName = 'W32Time')

Kolejnym interesującym operatorem jest LIKE. Określa on ciąg znaków, który musi wystąpić w danym rekordzie, aby był on wyświetlony. Przykładowo, aby wyświetlić wszystkie zdarzenia z dziennika Zabezpieczenia, gdzie w polu Message występuje słowo logon, należy użyć operatora LIKE w następujący sposób:

SELECT * FROM Security
WHERE Message LIKE '%logon%'

Drugim ważnym operatorem jest IN. Służy on do podawania jednej lub kilku wartości, które muszą wystąpić w danym polu, aby rekord był wyświetlony. Na przykład aby wyświetlić zdarzenia, których pole EventID wynosi 547, 541, 540 lub 528, należy stworzyć następujące zapytanie:

SELECT * FROM Security
WHERE EventID IN (547; 541; 540; 528)

Czasami prostszym rozwiązaniem niż stosowanie operatora IN jest użycie polecenia BETWEEN. Działa ono podobnie, z tym, że określa się nie poszczególne wartości, a cały przedział.

SELECT * FROM Security
WHERE EventID BETWEEN 528 AND 547

Sortowanie wyników

Sortowanie wyników czyni je czytelniejszymi, co znacznie ułatwia przeprowadzenie pożądanej analizy i wyciągnięcie odpowiednich wniosków. Do sortowania rekordów służy znane z języka SQL polecenie ORDER BY. Przykładowo, jeśli program Log Parser miałby zwrócić wszystkie pliki znajdujące się w folderze C:\MojFolder wraz z ich rozmiarem, a następnie uporządkować je według tego rozmiaru, składnia polecenia wyglądałaby następująco:

C:\>LogParser -i:FS -o:NAT "SELECT Path, Size FROM C:\MojFolder\*.* ORDER BY Size"

Domyślnie lista będzie uporządkowana rosnąco (co odpowiada parametrowi ASC dyrektywy ORDER BY). Istnieje jednak prosty sposób na zmianę tego zachowania - wystarczy określić parametr DESC (descending) po formule:

C:\>LogParser -i:FS -o:NAT "SELECT Path, Size FROM C:\MojFolder\*.* ORDER BY Size DESC"

Równie łatwo można określić wiele kolejnych kryteriów sortowania. W przypadku, gdy dane najpierw mają być posortowane według rozmiaru, a następnie według daty stworzenia, należy użyć następującego zapytania:

C:\>LogParser -i:FS -o:NAT "SELECT Name, Size, CreationTime FROM C:\MojFoldder\*.* ORDER BY Size, CreationTime"

Warto zauważyć, że za pośrednictwem wyrażenia ORDER BY nie można odwoływać się do pola, które nie jest przetwarzane przez Log Parser. Inaczej mówiąc, pole będące kryterium sortowania musi wystąpić wcześniej w wyrażenia SELECT.

Log Parser w skryptach

Log Parser posiada szeroki wachlarz zastosowań, a jego wykorzystanie nie ogranicza się tylko do wiersza poleceń. Z powodzeniem można korzystać z możliwości Log Parsera w skryptach, na przykład poprzez Visual Basic Script. Jest to osiągalne za pomocą biblioteki DLL (LogParser.dll) dostarczanej wraz z plikiem wykonywalnym Log Parsera. Pierwszą czynnością, którą należy zatem wykonać przed przystąpieniem do pisania skryptów jest zarejestrowanie biblioteki w systemie. W tym celu należy otworzyć wiersz polecenia w folderze, który zawiera bibliotekę i wykonać następujące polecenie:

regsvr32 LogParser.dll

Skrypty krok po kroku

Przykładowy skrypt napisany w języku Visual Basic zaprezentowany został poniżej. Działanie tego skryptu polega na zwróceniu w porządku alfabetycznym nazw i rozmiarów wszystkich plików umieszczonych w folderze Scripts na dysku C.

Set objLogParser = CreateObject("MSUtil.LogQuery") Set objInputFormat = _ CreateObject("MSUtil.LogQuery.FileSystemInputFormat") objInputFormat.recurse = 0 Set objOutputFormat = _ CreateObject("MSUtil.LogQuery.NativeOutputFormat") objOutputFormat.rtp = -1 strQuery = "SELECT Name, Size FROM 'C:\Scripts\*.*' ORDER BY Name ASC" objLogParser.ExecuteBatch strQuery, objInputFormat, objOutputFormat

W dalszej części artykułu w kilku prostych krokach omówiona zostanie budowa powyższego skryptu.

Krok 1: Tworzenie instancji obiektu Log Parser

W celu zdefiniowania nowej instancji obiektu Log Parser należy użyć następującego kodu:

Set objLogParser = CreateObject("MSUtil.LogQuery")

Krok 2: Tworzenie i konfiguracja obiektu "InputFormat"

W kolejnych liniach kodu należy określić, z jakiego źródła dane mają być pobierane. W powyższym przykładzie dane pochodzą z systemu plików, zatem fragment ten musi wyglądać następująco:

Set objInputFormat = _ CreateObject("MSUtil.LogQuery.FileSystemInputFormat")

W przypadku operacji w systemie plików warto wiedzieć, że istnieje przydatny parametr określający głębokość, na jakiej Log Parser ma szukać plików. Domyślnie nie ma takiego ograniczenia, co oznacza, że jeśli zażąda się wyświetlenia plików w folderze C:\Scripts, Log Parser wyświetli wszystkie pliki i foldery wraz z podfolderami. Można natomiast użyć parametru recurse i określić do ilu podfolderów ma działać program. Przykładowo, jeśli głębokość ma wynosić 2 podfoldery, należy wpisać:

Set objInputFormat = _ CreateObject("MSUtil.LogQuery.FileSystemInputFormat") objInputFormat.recurse = 2

Jeśli zaś szukanie w podfolderach ma być całkowicie wyłączone, jako wartość parametru należy podać 0.

Set objInputFormat = _ CreateObject("MSUtil.LogQuery.FileSystemInputFormat") objInputFormat.recurse = 0

Krok 3: Tworzenie i konfiguracja obiektu "OutputFormat"

Obiekt OutputFormat określa format, w jakim ma zostać wyświetlony wynik działania polecenia. Zakładając, że wynik ma być wydrukowany w oknie wiersza polecenia, należy użyć formatu NativeOutputFormat (NAT). Linia kodu określająca obiekt powinna zatem zawierać następujące polecenia:

Set objOutputFormat = _ CreateObject("MSUtil.LogQuery.NativeOutputFormat")

Dodatkowe parametry, takie jak znany z wcześniejszych przykładów -rtp określa się w sposób następujący:

Set objOutputFormat = _ CreateObject("MSUtil.LogQuery.NativeOutputFormat") objOutputFormat.rtp = "10"

Krok 4: Tworzenie zapytania

Tak naprawdę dopiero w tym momencie zaczyna się właściwe tworzenie skryptu. Ciąg zapytania tworzony jest w identyczny sposób, co w przypadku wersji z wiersza polecenia, natomiast włączany jest do skryptu za pomocą zmiennej strQuery:

strQuery = "SELECT Name, Size FROM 'C:\Scripts\*.*' ORDER BY Name ASC"

W skryptach do zapytania można włączać wszystkie obsługiwane przez Log Parser wyrażenia i operatory.

Krok 5: Wykonanie skryptu

W celu zamknięcia i wykonania skryptu należy posłużyć się metodą ExecuteBatch:

objLogParser.ExecuteBatch strQuery, objInputFormat, objOutputFormat

W ten sposób napisany przy użyciu Log Parser skrypt zwróci wynik podobny do prezentowanego na poniższym rysunku:

Podsumowanie

Log Parser potrafi w znacznym stopniu ułatwić pracę nie tylko administratorowi, ale także każdemu użytkownikowi, który potrzebuje szybko i łatwo pracować z dużą ilością danych. Warto poświęcić kilka chwil na zapoznanie się z programem, gdyż jego praktycznie nieograniczone możliwości czynią go niezastąpionym pomocnikiem administratora.

Artykuł ten miał za zadanie pokazać w skrócie podstawowe możliwości Log Parsera, a także zachęcić do samodzielnego szukania nowych rozwiązań z wykorzystaniem tego narzędzia. Nieocenioną pomocą będzie dokumentacja dostarczona wraz z programem, której przegląd polecamy jako uzupełnienie niniejszego artykułu.

Autor: Wojciech Kowasz

Spis treści

Materiały dodatkowe

tagi: Microsoft

Podobne artykuły

Komentarze 3

orcio1
orcio1
18 pkt.
Nowicjusz
20-02-2005
oceń pozytywnie 0
:) dziękuję - myślę, że mi się przyda a wręcz jestem tego pewien, dziękuję, za dość szczegółowy opis, pozdrawiam 8)
----------------------------------
http://www.cielmice.pl
Jacek Kolonko VIP
Jacek Kolonko
642 pkt.
Senior
22-02-2005
oceń pozytywnie 0
W charakterze jednej z kolejnych lekcji polecam przestudiować przykłady dołączone do programu. Na ich podstawie można stworzyć całkiem przydatne zapytania.

Jacek Kolonko, MVP
Portal użytkowników
Windows Server 2003
http://windows2003.pl
janjanek
janjanek
158 pkt.
Junior
23-02-2005
oceń pozytywnie 0
:)
Bardzo dobrze opisany artykuł i dość istotny dla początkującego ABSI


Pozdro
pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.