我正在嘗試確定解析日誌文件並根據類型計算所有錯誤的最佳方法。目前,我在文本編輯器中打開日誌,去掉日期和線程ID,然後對文件進行排序。這將所有錯誤按類型放在一起,然後我可以計算(使用編輯器中的計數函數,而不是手動計數)。我正在尋找一種自動執行此操作的方法,並可能將此用作學習新語言的機會(我知道最小的Perl和Ruby似乎可能適用於此任務)。日誌文件看起來像(尖括號中的項目是爲每個行變量,而管道日誌中的實際字符):用於統計日誌文件中錯誤發生率的工具或語言
<Datetime stamp> | <Thread ID> | ERROR | Foo.Bar: Backend error
<Datetime stamp> | <Thread ID> | ERROR | Foo.Bar: InvalidUserException
<Datetime stamp> | <Thread ID> | ERROR | Foo.Com: Timeout error
<Datetime stamp> | <Thread ID> | ALWAYS | Foo.Bar: Login Transaction [584] executed in [400] milliseconds
<Datetime stamp> | <Thread ID> | ALWAYS | Foo.Bar: Login Transaction [585] executed in [500] milliseconds
<Datetime stamp> | <Thread ID> | ALWAYS | Foo.Bar: Login Transaction [586] executed in [500] milliseconds
<Datetime stamp> | <Thread ID> | ALWAYS | Biz.Dee: Logout Transaction [958] executed in [630] milliseconds
<Datetime stamp> | <Thread ID> | ERROR | Foo.Bar: Backend error
我不想使用一系列的grep命令,因爲我會必須知道要查找什麼 - 如果日誌中存在新錯誤,而不添加新命令,則不會被計算在內。
我要找的輸出是這樣的:
Foo.Bar: Backend error: 2 occurrences
Foo.Com: Timeout error: 1 occurrence
理想的情況下,這將是巨大的,也有平均交易時間計算,以及:
Foo.Bar: Login Transaction: 3 occurrences with an average of 466 milliseconds
Biz.Dee: Logout Transaction: 1 occurrence with an average of 630 milliseconds
我見過在其他SO線程中提到了一些工具(SMTP log parser,Microsoft log parser,Zabbix和Splunk),但我也想學習一些新的東西,而不必重複現有的工具。 Perl或Ruby會成爲這項任務的不錯選擇嗎?我不是在尋找一個可行的腳本,而是尋找正確方向的一些指針或一個很好的工具。
如何對所有相同的錯誤進行分組和計數?我知道正則表達式會計算所有匹配的項目,但我需要將它們分組,而不知道完整的錯誤文本可能是什麼。我可以匹配「錯誤|」但是這太寬泛了,匹配一個特定的錯誤可能會導致一個新的錯過 – 2009-01-23 19:02:06