Již dlouho pasu po řešení, které by mi umožnilo nějak jednoduše sledovat důležité události v event logu našich asi dvaceti počítačů. Vyzkoušel jsem (a částečně napsal) kdejakou variantu různého přeposílání vybraných eventů mailem a podobně, ale s ničím jsem nebyl zcela spokojen.

Na CodeProjectu se objevila zajímavá idea: generovat z eventlogu RSS feed, který lze pohodlně zpracovávat jakoukoliv RSS čtečkou. Ten nápad mne opravdu zaujal. Tamo předvedená implementace již méně:

Moje řešení

Vymyslel jsem tedy řešení, které je dle mého názoru lepší. Jedná se o konzolovou EXE aplikaci, která se v pravidelných intervalech spouští, natáhne si data z různých logů z lokálního i vzdáleného počítače a vygeneruje statické XML (RSS) soubory, které zapíše do WWW prostoru.

Standard RSS jsem mírně modifikoval, lépe řečeno rozšířil pomocí vlastního namespace. Výsledek je tedy kompatibilní se standardem RSS, ale zároveň obsahuje určité údaje specifické pro eventlogy: typicky typ události, EventID, jméno uživatele a podobně.

Běžná čtečka nedokáže samozřejmě tyto speciální údaje využít, ale otevírá se tím cesta k napsání speciálního nástroje, který to umět bude. Kromě toho se dají použít k filtrování.

Filtrování výstupu

Dlouho jsem bádal nad tím, kterak bych měl zajistit vhodné filtrování dle určitých pravidel. Tak, aby bylo dostatečně schopné, ale přitom aby byl zápis pravidel jednoduchý. Nakonec jsem zvolil XSLT transformaci.

Program vygeneruje RSS feed (s těmito speciálními údaji), ale ještě před jeho uložením na něj může volitelně aplikovat jakoukoliv XSLT transformaci. Do programu jsou vestavěné dvě základní, které propustí pouze chyby (typ Error) nebo varování a chyby (Warning a Error), aby administrátor nebyl zavalen informačními hlášeními.

Tato XSLT transformace může být v podstatě libovolně složitá: lze například vyfiltrovat pouze chyby a varování od SQL serveru a podobně.

Výstupem nemusí být jenom RSS - XSLT transformace umožňuje víceméně jakýkoliv výstup. Pokud nepoužíváte RSS čtečku, je možné nechat si generovat třeba HTML stránky.

Event Gatherer

Výsledkem mé činnosti jest prográmek nazvaný Event Gatherer. Ono slovo "prográmek" je na místě, protože přes své schopnosti je tvořen jenom 180 řádky ve VB.NET. Psal jsem ho už pro .NET 2.0 (Whidbey) Beta 2, ale je triviální ho upravit pro verzi 1.1.

Jeho syntaxe je následující:

gatherer -L logname -O filename [-C computername] [-M number] [-T transform | -CT filename]

Plány do budoucna

Současné řešení je dostačující pro případ, že v daném místě (lokaci) máte k dispozici alespoň jeden web server. To nemusí být vždy pravidlem. Plánuji tedy do EG doplnit možnost POSTnout výsledek činnosti na zadané URL. Jednoduchý ASPX skript na straně web serveru umožní zaslaná data přijmout a uložit na lokální disk jako XML. Takto bude možné dohledovat lokaci, která nemá žádný web server a neumožňuje přímé připojení, ale má přístup k Internetu.

Download

Aktuální "Beta 1" verzi EG si můžete stáhnout zde. Budu velmi vděčen za vaše připomínky a náměty, případně užitečné XSLT šablony. Pro jistotu znovu připomínám, že pro správnou funkci programu musíte mít nainstalován .NET Framework 2.0 beta 2.