Не удается обработать многострочный ввод из filebeats в logstash с помощью grok

Я новичок в logstash, и у меня есть следующий многострочный ввод в logstash из filebeats:

"message":"[step info]\nstep: 3\ngrammar name: grammar1\nnoInputTimeout: 6000\nstep stream idle time: 14910\nstep stream start time: 2017-12-01 17:06:10.024\nrec start time: 2017-12-01 17:06:09.994\nrec finish time: 2017-12-01 17:06:12.748\nsystem prompt duration: 570\nuser barged in: true\nuser noInput time: 0\nuser speech duration: 1190\nspeech start trigger: 8265\nspeech start on rec: 7945\nspeech end trigger: 8415\nspeech end on rec: 9135\nrec completion cause: 000 success\nrec completion type: SR\nrec result: onetwothreefour\nrec inputMode: speech\nRTF: 0.47\nrec process time: 557\nrec latency: 61\nrec post delay: 62"

Я пытаюсь найти шаблон с Гроком, но ничего не работает. Я также попробовал это с split и mutate, но не могу заставить это работать.

1 ответ

Решение

Это всего лишь указатель для вас, но фильтр KV(фильтр значения ключа) может помочь.

Глядя на ваш пример, вы можете сделать что-то вроде этого.

kv {
  source => "message"
  field_split => "\n"
  value_split => ":"
}

Это взял бы ваш пример

"message":"[step info]\nstep: 3\ngrammar name: grammar1\nnoInputTimeout: 6000\nstep stream idle time: 14910\nstep stream start time: 2017-12-01 17:06:10.024\nrec start time: 2017-12-01 17:06:09.994\nrec finish time: 2017-12-01 17:06:12.748\nsystem prompt duration: 570\nuser barged in: true\nuser noInput time: 0\nuser speech duration: 1190\nspeech start trigger: 8265\nspeech start on rec: 7945\nspeech end trigger: 8415\nspeech end on rec: 9135\nrec completion cause: 000 success\nrec completion type: SR\nrec result: onetwothreefour\nrec inputMode: speech\nRTF: 0.47\nrec process time: 557\nrec latency: 61\nrec post delay: 62"

И разделите на \ n символ, а затем создайте пары ключей-значений из примеров, которые у вас есть, с левой стороны будет имя поля, а с правой стороны будет значение.

step: 3
grammar name: grammar1
noInputTimeout: 6000
step stream idle time: 14910
step stream start time: 2017-12-01 17:06:10.024
rec start time: 2017-12-01 17:06:09.994
rec finish time: 2017-12-01 17:06:12.748

Если вам нужно разделить [информацию о шагах], вам нужно предоставить больше примеров, но я бы использовал greedydata, чтобы разделить ваш контент на 2 поля: 1 для [информация о шагах] и 1 для [строки шага] и передайте разделенные линии как поле источника для фильтра KV выше.

Надеюсь, что это указывает вам в правильном направлении.

E.

Другие вопросы по тегам