2017-10-11 82 views
1

我对ELK和Grok过滤很新,而且我在grok过滤器中解析这个特定的模式很困难。Grok过滤器的时间计数器H​​H:MM

我已经使用grok debugger尝试解决这个问题,但尽管我喜欢该工具,但我只是被自定义模式弄糊涂了。

最后,我希望解析大量由filebeat发送到logstash的日志文件,然后将解析的日志发送到elasticsearch并使用kibana或一些类似的可视化工具进行显示。

我需要解析遵循以下图案中的线:

1310 2017-01-01 16:48:54 [325:51] [326:49] [359:57] Some log info text 
  • 前4位是一个日志类型标识符,以及将用于分组。我称之为“LogLineID”字段。
  • 日期格式为YYYY-MM-DD HH:MM:SS,并且分析正常。我称之为“LogDate”字段。
  • 但现在问题开始了。在方括号内,我有柜台,如果你喜欢,可以格式化为MM:SS。我不能为了我的生活找到一种方法来排除这些,但我需要比较这些时间,因此我想将它们存储为分钟和秒,而不仅仅是数字。
    • 首先是一个计数器“TimeSpent”
    • 第二个是一个计数器“TimeStarted”和
    • 第三个是一个计数器“TimeSinceDown”。
  • 然后,最后来到信息文本,我简单地申请了%{GREEDYDATA:LogInfo}。

我注意到分钟的量可能会远远超过一个小时内的标准60分钟的高,所以我可以在这里找错了树试图与日期模式,如TIMESTAMP_ISO8601解析它,但随后,我真的不知道该怎么做。

所以,我来到这么远:

%{NUMBER:LogLineID} %{TIMESTAMP_ISO8601:LogDate} 

,并分别为所提能够(通过切开方括号的部分)与

%{GREEDYDATA:LogInfo} 

解析日志信息文本创建字段LogInfo。

但这就是我卡住了。有人可以帮我弄清其余的吗?

提前非常感谢。

PS!我也发现%{NUMBER:duration},但它可以尽我所知地只用点解析时间戳,而不是冒号。

回答

0

啊,有一个空间..其实,我是误导自己,每个人都在我的问题,因为这实际上并不是导致问题的日志行。我只是拿第一个,没有意识到问题真的在哪里,但引起问题的那个在括号内有一个空格,如[ 42:31]。也有一些地方,有两个空格,所以我设法解决这个问题的办法是包括\[%{NUMBER}之间的%{SPACE}

%{NUMBER:LogLineID} %{TIMESTAMP_ISO8601:LogDate} \[%{SPACE}%{NUMBER:TimeSpentMinutes}\:%{NUMBER:TimeSpentSeconds}\] \[%{SPACE}%{NUMBER:TimeStartedMinutes}\:%{NUMBER:TimeStartedSeconds}\] \[%{SPACE}%{NUMBER:TimeSinceDownMinutes}\:%{NUMBER:TimeSinceDownSeconds}\] %{GREEDYDATA:LogText} 

我仍然没有解决分秒的合并,但是我也可以在后期处理。

感谢林顿对我的问题表现出兴趣,并抱歉不早回复。

希望这个解决方案能够帮助其他人(甚至是我自己),如果他们陷入同样的​​问题。

请注意:在grok'ing之前请仔细阅读日志.. :)

0

grok正则表达式可以帮助您解决问题。

但首先我想确保你的意思是[325:51] [326:49] [359:57]是你想要获取的三个组件?它会返回结果一样:

TimeSpent: 325:51 
TimeStarted: 326:49 
TimeSinceDown: 359:57 

是我得到的时候,你可以用我的方式对以下建议:

  1. 定义自己的自定义模式文件,并添加图案你的文件。
  2. 只需使用表达logstash的conf文件的过滤器部分

希望它会帮助你