Grok过滤器用于时间计数器H​​H:MM

时间:2017-10-11 19:38:09

标签: date time timestamp grok filebeat

我对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
  • 前四位是日志类型标识符,将用于分组。我已将该字段称为" LogLineID"。
  • 日期格式为YYYY-MM-DD HH:MM:SS,并且解析正常。我打电话给#34; LogDate"。
  • 但现在问题就开始了。在方括号内,我有计数器,如果你愿意,可以格式化为MM:SS。我不能为我的生活找到一种方法来解决这些问题,但我需要比较这些时间,因此我想将它们存储为分钟和秒钟,而不仅仅是数字。
    • 第一个是计数器" TimeSpent",
    • 第二个是计数器" TimeStarted"和
    • 第三个是计数器" TimeSinceDown"。
  • 然后,最后一个来自信息文本,我已经设法简单地应用了%{GREEDYDATA:LogInfo}。

我注意到分钟的数量可能远远高于一小时内的标准60分钟,所以我可能会在这里试图用日期模式(例如TIMESTAMP_ISO8601)解析错误的树,但是,我不会&# 39;我真的知道如何做到这一点。

所以,我走到这一步:

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

并且如前所述(通过切掉方括号部分)来解析日志信息文本

%{GREEDYDATA:LogInfo}

创建一个LogInfo字段。

但那是我被困住了。有人可以帮我弄清楚剩下的吗?

提前非常感谢。

PS!我还找到了%{NUMBER:duration},但是我可以告诉它只用点解析时间戳,而不是冒号..

2 个答案:

答案 0 :(得分:0)

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

但首先我想确定你的意思是[325:51] [326:49] [359:57]是你想要获取的三个组件吗?它将返回结果,如:

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

如果我明白了,你可以用我的方式提出以下建议:

  1. 定义您自己的自定义模式文件,并在您的文件中添加模式。
  2. 只使用logstash conf文件的过滤器部分中的表达式
  3. 希望它会帮助你

答案 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之前,请仔细阅读日志。::)