В logstash входят строки из файла, и при конкатенации (multiline) они склеиваются в 4 , но при этом разделение между ними - это нечто вроде СЛОВО_ИЗ_ПЕРВОЙ_СТРОКИ\nСЛОВО_ИЗ_ВТОРОЙ_СТРОКИ. Как их разделить я не понимаю. Все что пробовал было либо мной криво написано, либо для ситуации не подходило.
Спасибо за помощь.
Это можно сделать несколькими способами. Но зачем?
Я распишу задачу, может подскажешь как тогда сделать. Есть набор логов. Они представлены в виде
СЛОВО ПОСЛЕДОВАТЕЛЬНОСТЬ
СЛОВО ДАТА ВРЕМЯ
СЛОВО ДАТА ВРЕМЯ
СЛОВО IP ДАТА ВРЕМЯ
И этот круг повторяется каждые 4 строки. Задача такая: собрать каждую группу 4-х строк в одно событие, затем раскидать по соответствующим им полям. Мой вариант был такой: собрать их multiline'ом, затем через grok это все раскидать. Но multiline их соединяя добавляет \n, а при таком сплошном соединении grok их не делит на поля. Если я в чем-то не прав, пожалуйста, скажите в чем моя ошибка.
А вы grok-у про многострочность сказали, добавив (?m)
в начало выражения?
Если все-равно не работает, то можно заменить эти \n на ЧТО_НИБУДЬ_ДРУГОЕ так:
mutate
{
gsub => ["message", "\n", "ЧТО_НИБУДЬ_ДРУГОЕ"]
}
gsub не сработал, а когда я в grok добавляю перед паттернами (?m), то выдает ошибку, препдополжительно потому, что нельзя комбинировать (?m) и готовые паттерны %{}. Может, проблема в том, что у меня не одна \n в строчке, а целых 3?
Странно, может ему тоже (?m)
нужен. Что-нибудь вроде
mutate
{
gsub => ["message", "(?m)\n", "ЧТО_НИБУДЬ_ДРУГОЕ"]
}
На stackoverflow.com подсказали - в gsub надо использовать "[\r\n]" чтобы заработало
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.