解析Java服务器异常日志

3

我有一个需求,需要从WebSphere服务器读取所有“历史”异常日志并将它们加载到Hive中。 下面是一个典型的日志样例,但消息行有时也会延长4-5行。 我不太关心堆栈跟踪,但绝对需要时间戳,线程ID,短名称,事件类型和完整的错误消息分别在它们各自的列中。

[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,但也不起作用)。请问有什么帮助或指向正确方向的建议吗?
2个回答

1
使用Logstash读取和解析WebSphere日志,并将其发布到Elasticsearch中进行进一步处理(即使用ELK Stack)。
阅读相关讨论此处
使用Logstash,您可以使用Grok将任何垃圾非结构化日志数据解析为可查询的结构化数据。

好的,看起来我需要创建一个账户才能使用它 - 而且它不是免费的。 - Rohit
弹性堆栈 - Elasticsearch、Logstash、Kibana 和 Beats - 都是开源项目,正如官方在此处所述 - https://www.elastic.co/products。所有3个软件都是根据Apache许可证发布的。您可以直接按照此处描述的方式下载和安装所有3个软件 - https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-16-04 - janeshs

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接