无法使用grok处理logstash中filebeats的多行输入

时间:2017-12-22 11:04:37

标签: elasticsearch logstash groc

我是logstash的新手,我在logbeash的logstash中有以下多行输入:

"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"

我试图用grok找到一个模式,但没有任何工作。 我也尝试过split和mutate,但是无法让它发挥作用。

1 个答案:

答案 0 :(得分:0)

这只是您尝试的指针,但KV filter,(键值过滤器)可能有所帮助。

看看你的例子,你可以做这样的事情。

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 char,然后从你拥有的示例中创建键值对,左侧是字段名称,右侧是值。

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过滤器的源字段传递。

希望这能指出你正确的方向。

电子。