2016-06-27 127 views
3

我有一個要求,我必須從WebSphere服務器讀取所有「歷史」異常日誌並將它們加載到Hive中。 下面是一個典型的日誌的樣子,但消息行有時也會擴展到4-5行。我並不關心堆棧跟蹤,但絕對需要在其各個列中包含Timestamp,ThereadId,短名稱,事件類型和完整錯誤消息。解析Java服務器異常日誌

[5/20/16 22:35:39:841 CDT] 00233723 SystemOut  O 22:35:39,840 ERROR [com.xxx.app.yyy.hms.jms.receivers.impl.B2bTonnn278InReceiverImpl] 
xxxRuntimeException{errorVO=com.xxx.app.yyy.nnn.mmm.data.mmmCompleteIntakeErrorVO(diagnosesMessagesExist:false, mmmMessagesExist:false, incrementedKey:null, numPagesWithMessages:1, primaryKeyFields:[], providersMessagesExist:false, requiredFields:[], servicesMessagesExist:true, changeDateTime:05-20-2016 10:35:39:840 PM CDT, changeUserID:SYSTEM, createDateTime:null, createUserID:null, dataSecured:false, dataSecurityTypeList:null, globalMessages:[], historyID:0, messages:{procedureUnitCount=[Field For Label: procedureUnitCount Message ID: 'ERR0010', Message Arguments: '[]']}, trackChanges:false, updateVersion:-1, messages={procedureUnitCount=[Field For Label: procedureUnitCount Message ID: 'ERR0010', Message Arguments: '[]']})} 
    at com.xxx.app.yyy.nnn.mmm.businesslogic.impl.mmmImpl.completemmm(mmmImpl.groovy:612) 
    at sun.reflect.GeneratedMethodAccessor4988.invoke(Unknown Source) 

我試圖通過讀取一次在一個線和使用正則表達式解析這樣做 - 這慘遭失敗(只有20%的數據滿足正則表達式),而且質量也較差。我真的不知道在這裏繼續和選擇什麼分隔符來將該異常字符串拆分爲列(\ t已經嘗試過 - 不能工作太多。)

任何幫助或指向正確方向的指針?

回答

1

使用Logstash來讀取和分析WebSphere日誌並將其發佈到Elasticsearch中以進行進一步處理(即使用ELK Stack)。

閱讀相關討論here

使用Logstash,您可以使用Grok將任何蹩腳的非結構化日誌數據解析爲結構化和可查詢的內容。

+0

好吧,看來我將不得不創建帳戶才能使用它 - 而且它不是免費的。 – Rohit

1
grep -A 1 SystemOut LogFile | awk 'NR%3{printf $0" ";next;}2' | awk '{print $2" "$4" "$8" "$10}'