时间计数器的 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
- 前四位是日志类型标识,用于分组。我将该字段命名为 "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},但据我所知,它只能用点解析时间戳,而不是冒号..
grok正则表达式可以帮你解决问题
但首先我想确定您的意思是 [325:51] [326:49] [359:57]
是您要获取的三个组件吗?它会 returns 这样的结果:
TimeSpent: 325:51
TimeStarted: 326:49
TimeSinceDown: 359:57
如果我明白了,您可以在以下建议中使用我的方法:
- 定义您自己的自定义模式文件并在您的文件中添加模式。
- 只需使用 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 之前更仔细地阅读日志。:)
我对 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,并且解析正常。我称该字段为 "LogDate".
- 但是现在问题开始了。在方括号内,我有计数器,如果您愿意,可以将其格式化为 MM:SS。我一辈子都找不到解决这些问题的方法,但我需要比较这些时间,因此我想将它们存储为分钟和秒,而不仅仅是数字。
- 第一个是计数器"TimeSpent"、
- 第二个是计数器 "TimeStarted" 和
- 第三个是计数器"TimeSinceDown"。
- 然后,最后是信息文本,我通过简单地应用 %{GREEDYDATA:LogInfo} 设法理解了它。
我注意到一个小时内的分钟数可能远远高于标准的 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
如果我明白了,您可以在以下建议中使用我的方法:
- 定义您自己的自定义模式文件并在您的文件中添加模式。
- 只需使用 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 之前更仔细地阅读日志。:)