考虑此日志文件结构:
patA1 .*? patA2 .*? patA3
... (many lines here)
patB1 .*? patB2 .*? patB3
patB1 .*? patB2 .*? patB3
在上面,请考虑patXY
是不同的正则表达式模式,即可以通过类似以下方式grok
来代替上面的第一行:
grok {
match => {
"message" => "%{patA1:keyA1} (?<afterA1:.*?) %{patA2:keyA2} (?<afterA2:.*?) %{patA3:keyA3}"}
}
}
我想multiline
进行上述操作,然后像这样从多行生成事件:
event1: keyA3, keyB1, keyB3
event2: keyA3, keyB2, keyB3
也就是说,从A行中选择一些部分,并将其添加到B行的每一行中,最后会产生与Bs一样多的事件。
换句话说,我想像处理日志行那样对上述内容进行处理,例如:
patA1 .*? patA2 .*? patA3 .*? patB1 .*? patB2 .*? patB3
patA1 .*? patA2 .*? patA3 .*? patB1 .*? patB2 .*? patB3
我可以单独从中拿取物品。
请注意,这些行具有相同的结构,因此在使用multiline
时,上述消息看起来像:
"message" => "patA1 .*? patA2 .*? patA3\npatB1 .*? patB2 .*? patB3\npatB1 .*? patB2 .*? patB3"
即它具有A和所有B都在同一“块”中,因为B是连续的并且都具有相同的形状。
在logstash中执行此操作的最佳方法是什么?