Рассмотрим следующую структуру файла журнала:
patA1 .*? patA2 .*? patA3
... (many lines here)
patB1 .*? patB2 .*? patB3
patB1 .*? patB2 .*? patB3
. В приведенном выше примере patXY
представляют собой различные шаблоны регулярных выражений, то есть первая строка выше может быть grok
ked через что-то вроде этого:
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
, из которого я могу выбирать элементы только с помощью grok.
Обратите внимание, что строки имеют одинаковую структуру, поэтому при использовании multiline
сообщение для вышеупомянутого выглядит следующим образом:
"message" => "patA1 .*? patA2 .*? patA3\npatB1 .*? patB2 .*? patB3\npatB1 .*? patB2 .*? patB3"
т.е. он имеет A и все B в одном и том же «блоке», поскольку B являются последовательными и все имеют одинаковую форму.
Какой лучший способ сделать это в logstash