Errorlog olvasása LogParserrel

Van egy kedves rövidítés, amit az informatikusok szeretnek egymás fejéhez vagdosni segítség helyett. Ez az RTFM, ami azt rövidíti, hogy Read The Fucking Manual, azaz magyarul: kérlek szépen, olvasd el azt a drága jó dokumentációt. Igazából ez is segtség, sőt, bizonyos szempontból sokkal értékesebb, hiszen ránevel arra, aminek azért természetesnek kéne lennie, azaz elolvastatja a használati utasítást az ember fiával/lányával.
Ennek egy másik változata az, amikor a kedves üzemeltető/rendszermérnök/rendszergazda/etc. szembesül egy hibával, szaladgál körbe-körbe, debuggol, csak éppen a logot felejti el megnézni. Ha valaki SQL-t (is) üzemeltet, akkor pedig hasznos lehet “csak úgy” is megnézni időnként az errorlogot meg a SQLAgent logját. Mivel a lustaság nagy úr, sokáig csak mondogattam, hogy ez milyen fontos, de eszem ágában nem volt megnézni tucatnyi szervert, még hetente sem. Aztán végül győzött a műszaki értelmiségi énem, és összedobtam egy (vagyis két) scriptet, ami logparser segítségével elküldi a napi logot. Azóta minden reggel azzal kezdem a napot, hogy elolvasom a kedves kis levelet, amit az SQL szerver küld magáról és a barátairól. Nem nagy szám, de a nálamnál lustábbak kedvéért megosztom a tartalmat.
Szóval először is van egy cmd, ami a logparsert hívja, ügyesen paraméterezve:

del SQLerrorlog.log
LogParser "select 'SQL2000' as ServerName, STRCAT(STRCAT(DATE,' '), TIME) as LogDateTime, SOURCE, Message INTO reports\SQL1.txt From '\\SQL1\SQLLogs\ERRORLOG' WHERE SOURCE <> 'backup'" -i:TSV -iSeparator:spaces -iHeaderFile:formatfile.txt -headerRow:OFF -nskiplines:9 -iCheckPoint:SQL1.cpt
LogParser "select 'SQL2005' as ServerName, STRCAT(STRCAT(DATE,' '), TIME) as LogDateTime, SOURCE, Message INTO reports\SQL2.txt From '\\SQL2\SQLLogs\ERRORLOG'" -i:TSV -iSeparator:spaces -iHeaderFile:formatfile.txt -iCodepage:-1 -headerRow:OFF -nskiplines:9 -iCheckPoint:SQL2.cpt
copy reports\*.txt SQLerrorlog.log

És ami még nagyon kell, az a formatfile.txt, ami egyébként elég egyszerű:

DATE TIME SOURCE Message

És már csak egyetlen apróság maradt ki: a LogParser, ami egy Microsoft által készített kis tool, és nevéhez illően logot lehet vele feldolgozni, transzformálni, stb. Lánykoromban IIS logot töltöttem vele adatbázisba, most adatbázislogot töltök levélbe, és ki tudja mit hoz a jövő. Érdemes mindenképpen megnézni a dokumentációját, mert tényleg nagyon jó, és létezik DLL komponensként is, amit saját alkalmazásba építhetünk.

Update: Nekem is RTFM. Az SQL 2005-ös szerveremről szép hosszú üres listák jöttek vissza, miután elkezdtem checkpointoltatni. Ha kivettem az -iCheckpoint opciót, akkor minden oké volt. Némi verbális inzultus után nekiültem gondolkodni, és megállapítottam, hogy a SQL 2000 ANSI formátumú errorlogot ír, a SQL 2005 pedig már modernül unicode-ot. Hogy a checkpointolás hogyan függ össze ezzel, azt nem tudom, de miután megnéztem a LogParser dokumentációját, megtaláltam benne a hőn áhított -dolgozdFelAzUnicodeFájlt kapcsolót is, ezt ott -iCodepage névvel illetik, és a -1 paraméter jelzi az unicode fájlt. A második sort a fenti mintában átírtam SQL2005-ösre. Remélem valaki örül ennek az infónak is.

Leave a comment