代码之家  ›  专栏  ›  技术社区  ›  levant pied

具有连接的同类型连续事件的多行grok

  •  0
  • levant pied  · 技术社区  · 6 年前

    请考虑以下日志文件结构:

    patA1 .*? patA2 .*? patA3
    ... (many lines here)
    patB1 .*? patB2 .*? patB3
    patB1 .*? patB2 .*? patB3
    

    在上面,考虑 patXY 要成为不同的regex模式,即上面的第一行可以是 grok

    grok {
      match => { 
        "message" => "%{patA1:keyA1} (?<afterA1:.*?) %{patA2:keyA2} (?<afterA2:.*?) %{patA3:keyA3}"}
      }
    }
    

    我想 multiline 然后从多行生成事件:

    event1: keyA3, keyB1, keyB3
    event2: keyA3, keyB2, keyB3
    

    也就是说,从A行中选取一些部分并将其添加到B行中的每一行,最后得到的事件数与B行中的事件数相同。

    patA1 .*? patA2 .*? patA3 .*? patB1 .*? patB2 .*? patB3
    patA1 .*? patA2 .*? patA3 .*? patB1 .*? patB2 .*? patB3
    

    从中我可以选择与格罗克单独项目。

    多行 ,上面的消息如下:

    "message" => "patA1 .*? patA2 .*? patA3\npatB1 .*? patB2 .*? patB3\npatB1 .*? patB2 .*? patB3"
    

    i、 它有一个和所有的Bs在同一个“块”,因为Bs是连续的,并且所有的Bs都是相同的形状。

    在logstash最好的方法是什么?

    0 回复  |  直到 6 年前
        1
  •  0
  •   levant pied    6 年前

    第一次这样的呻吟:

    grok {
      match => {
        "message" => ".*?(?<keyA3>patA3}"
      }
    }
    

    这将增加 keyA3 参加活动。然后拆分:

    split {}
    

    这将被 message 默认情况下,为每一行提供克隆的事件,因此 键A3

    if ([message] !~ /patB1/) {
      drop {}
    }
    

    然后再次搜索其他需要的信息:

    grok {
      match => {
        "message" => "(?<keyB1>patB1) .*? (?<keyB2>patB2) .*? (?<keyB3>patB3)"
      }
    }
    

    此时,所有事件都将 键A3 , keyB1 , keyB2 keyB3 你可以根据需要使用。