2011年2月20日 星期日

LogParser如何使用TSV格式

網路上大多是LogParser使用IIS格式的介紹,很少關於TSV格式的,自己試了之後有些心得,分享給大家囉
先說說為何要用TSV格式的好了,因為我要分析的log長下面這樣,這是resin的error log
[2010/03/10 21:32:36] _mesg._jspwarn__jsp: init
[2010/03/10 21:32:47] _qqcyquery._car_0list__jsp: init
[2010/03/10 21:32:47] javax.servlet.jsp.JspException: 行 1: 'and' 附近的語法不正確。
javax.servlet.jsp.JspException: 行 1: 'and' 附近的語法不正確。
 at com.jpc.framework.taglib.Query.doEndTag(Query.java:52)
 at _qqquery._car_0list__jsp._jspService(_dat_0list__jsp.java:62)



看的出來這沒有固定的欄位分隔符號,IIS與CSV都不適用,我想要一次分離出日期時間與錯誤訊息並不容易,不用TSV格式會很難處理的,用TSV格式的好處是參數裡可以自訂欄位分隔符號,然後還可以控制欄位數喔,是其他格式不上的

先說明TSV的3個參數,其他的參數因我沒用到就不說了。

1.headerRow參數
可為ONOFF,這是設定輸入檔案的首行是否有欄位名,若沒有就設OFF

2.iSeparator參數
可為a single characterspacesspacetab,這是設定欄位分隔符號的地方,我看也是所有輸入格式中唯一可以自訂的分隔符號的,其他的格式好像都不行,也支援常見的spacetab囉,若設為spaces,則spacetab皆可。

3.nFields參數
為數字,是設定欄位個數的地方,可能有人會問欄位這不是自動偵測就好嗎?這可以不設啦,但是你可以這樣用喔,假設原有5個欄位,若設為3,它會自動把第三個以後的欄位合併為一個,超酷的吧。
注意一下,若設大於0的值,然後用select *的話,會多跑出兩個預設的欄位(FilenameRowNumber)。
還有若不指定這參數值,會以第一行取得的欄位數作為基準喔,不懂我的說明,請看以下例子的差別,都以space為分隔符號
下面會得到4
[2010/03/10 ] _motor._confirm__jsp: init
[2010/03/10 ] ***Error*** Time = Wed Mar 10 2010
下面會得到十多欄
[2010/03/10 ] ***Error*** Time = Wed Mar 10 2010
[2010/03/10 ] _motor._confirm__jsp: init


LogParserQuery怎麼用呢,基本上就是跟T-SQL差不多

若輸入檔首行本身沒有欄名的話,只能用Field1Field2Field3…去指定欄位,INTO就是指定要將分析結果輸出到哪個檔,FROM就是指定輸入檔是哪個,wherelike用法基本上一模一樣,like若是用於批次檔,要用兩個%%囉,其他就同T-SQL一樣有一些函式可用,只是名稱不同囉

我用的命令如下,用到排程裡,每十分鐘執行一次,撈取前十分鐘內有Exception的錯誤訊息

LogParser.exe -i:TSV -headerRow:OFF -iSeparator:space -nFields:3 "SELECT RowNumber,REPLACE_STR(Field1,'[','') as date,REPLACE_STR(Field2,']','') as time,Field3 INTO c:\output.csv FROM c:\src_log.log where Field3 like '%%Exception%%' and REPLACE_STR(Field1,'[','') >= TO_STRING(TO_LOCALTIME(SYSTEM_TIMESTAMP()), 'yyyy/MM/dd') and REPLACE_STR(Field2,']','') >= TO_STRING(SUB(TO_LOCALTIME(SYSTEM_TIMESTAMP()), TIMESTAMP('10', 'mm')), 'hh:mm:ss') and REPLACE_STR(Field2,']','') < TO_STRING(ADD(TO_LOCALTIME(SYSTEM_TIMESTAMP()), TIMESTAMP('01', 'mm')), 'hh:mm:ss')"

最後就是安裝程式裡的Log Parser 2.2 Documentation要看,我是從裡面學的

0 意見:

張貼留言