代码之家  ›  专栏  ›  技术社区  ›  Vandalf

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

  •  1
  • Vandalf  · 技术社区  · 7 年前

    我对ELK和Grok过滤非常陌生,我正在努力解析我的Grok过滤器中的这个特定模式。

    我用过 grok debugger 为了尝试解决这个问题,虽然我喜欢这个工具,但我只是被自定义模式弄糊涂了。

    我需要解析的行遵循以下模式:

    1310 2017-01-01 16:48:54 [325:51] [326:49] [359:57] Some log info text
    
    • 前四位是日志类型标识符,将用于分组。我将该字段称为“LogLineID”。
    • 日期格式为YYYY-MM-DD HH:MM:SS,解析为ok。我将该字段称为“LogDate”。
    • 但现在问题开始了。在方括号内,我有计数器,格式为MM:SS。我一生都无法找到一种方法来整理这些时间,但我需要比较这些时间,因此我想将它们存储为分和秒,而不仅仅是数字。
      • 第一个是计数器“TimeSpent”,
      • 第二个是计数器“TimeStarted”和
      • 第三个是计数器“TimeSinceDown”。
    • 最后是信息文本,我只需应用%{GREEDYDATA:LogInfo}就可以找到它。

    所以,我走了这么远:

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

    如前所述,我们能够(通过去掉方括号部分)用

    %{GREEDYDATA:LogInfo}
    

    创建字段LogInfo。

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

    非常感谢。

    附言我还发现 %{NUMBER:duration} ,但据我所知,它只能用点而不是冒号解析时间戳。。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Lin Don    7 年前

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

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

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

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

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

    希望对你有帮助

        2
  •  0
  •   Vandalf    7 年前

    啊,有一个空间。。事实上,我在误导我自己和我的问题中的每个人,因为实际上并不是那个日志行引起了问题。我只是拿了第一个,没有意识到问题真正在哪里,但引起问题的那个在括号内有一个空格: [ 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}
    

    我还没有解决分秒合并的问题,但我可以在以后处理这个问题。

    谢谢林对我的问题表现出兴趣,也很抱歉没有及时回复。

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

    我自己注意:在摸索之前,仔细阅读日志:)