我对ELK和Grok过滤都很陌生,而且我在我的grok过滤器中解析这个特定的模式很困难。
我已经使用grok debugger来尝试解决这个问题,但是虽然我喜欢这个工具,但我对自定义模式感到困惑。
最终,我希望将filebeat发送的大量日志文件解析为logstash,然后将解析后的日志发送到elasticsearch并使用kibana或类似的可视化工具进行显示。
我需要解析的行遵循以下模式:
1310 2017-01-01 16:48:54 [325:51] [326:49] [359:57] Some log info text
我注意到分钟的数量可能远远高于一小时内的标准60分钟,所以我可能会在这里试图用日期模式(例如TIMESTAMP_ISO8601)解析错误的树,但是,我不会&# 39;我真的知道如何做到这一点。
所以,我走到这一步:
%{NUMBER:LogLineID} %{TIMESTAMP_ISO8601:LogDate}
并且如前所述(通过切掉方括号部分)来解析日志信息文本
%{GREEDYDATA:LogInfo}
创建一个LogInfo字段。
但那是我被困住了。有人可以帮我弄清楚剩下的吗?
提前非常感谢。
PS!我还找到了%{NUMBER:duration},但是我可以告诉它只用点解析时间戳,而不是冒号..
答案 0 :(得分:0)
grok regex表达式可以帮助您解决问题。
但首先我想确定你的意思是[325:51] [326:49] [359:57]
是你想要获取的三个组件吗?它将返回结果,如:
TimeSpent: 325:51
TimeStarted: 326:49
TimeSinceDown: 359:57
如果我明白了,你可以用我的方式提出以下建议:
希望它会帮助你
答案 1 :(得分:0)
啊,有一个空间..实际上,我在我的问题中误导了自己和每个人,因为实际上并不是导致问题的日志行。我只是拿了第一个,没有意识到问题究竟在哪里,但导致问题的那个在括号内有一个空格:[ 42:31]
。还有一些部分有两个空格,所以我设法解决这个问题的方法是在%{SPACE}
和\[
之间加入%{NUMBER}
:
%{NUMBER:LogLineID} %{TIMESTAMP_ISO8601:LogDate} \[%{SPACE}%{NUMBER:TimeSpentMinutes}\:%{NUMBER:TimeSpentSeconds}\] \[%{SPACE}%{NUMBER:TimeStartedMinutes}\:%{NUMBER:TimeStartedSeconds}\] \[%{SPACE}%{NUMBER:TimeSinceDownMinutes}\:%{NUMBER:TimeSinceDownSeconds}\] %{GREEDYDATA:LogText}
我仍然无法解决分钟和秒的合并,但我也可以在稍后阶段处理。
感谢Lin Don表示对我的问题感兴趣,并且抱歉没有尽快回复。
希望解决方案能够帮助其他人(甚至是我自己),如果他们遇到同样的问题。
请注意:在grok' ing之前,请仔细阅读日志。::)