时间计数器的 Grok 过滤器 HH:MM

Grok filter for a time counter HH:MM

我对 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 等日期模式来解析它,但是,我真的不知道该怎么做。

所以,我走到了这一步:

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

并且如前所述能够(通过切掉方括号部分)用

解析日志信息文本
%{GREEDYDATA:LogInfo}

创建字段 LogInfo。

但那是我被困住了。有人可以帮我解决剩下的问题吗?

非常感谢。

PS!我还找到了 %{NUMBER:duration},但据我所知,它只能用点解析时间戳,而不是冒号..

grok正则表达式可以帮你解决问题

但首先我想确定您的意思是 [325:51] [326:49] [359:57] 是您要获取的三个组件吗?它会 returns 这样的结果:

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

如果我明白了,您可以在以下建议中使用我的方法:

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

希望对您有所帮助

啊,有一个 space.. 实际上,我误导了我自己和我的问题中的每个人,因为实际上不是那条日志行导致了问题。我只是拿了第一个,没有意识到问题的真正所在,但是导致问题的那个在括号内有一个 space:[ 42:31]。还有一些部分有两个 space,所以我设法解决这个问题的方法是在 \[%{NUMBER} 之间包含一个 %{SPACE}

%{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 之前更仔细地阅读日志。:)