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

Cannot handle multiline input from filebeats in logstash with grok

我是 logstash 的新手,我在 filebeats 的 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 尝试过,但无法让它工作。

这只是供您尝试的指南,但 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 字符上拆分,然后根据您的示例创建键值对,左侧是字段名称,右侧是值。

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 个对于 [step lines] 并传递分割线作为上面 KV 过滤器的源字段。

希望这能为您指明正确的方向。

E.