Logstash将同一单词的多个实例解析为Elasticsearch数组

时间:2014-03-07 20:09:09

标签: parsing elasticsearch logstash

我正在尝试将以下内容从日志行提取到2个不同的数组字段

  

03/07/2014 13:29:43.103 INFO NUM * 0000001 * DOS * 0000001-000000001 * TDKIIDKSSS NUM * 0000002 * DOS * 0000002-000000001 * TDKIIDKSSS NUM * 0000003 * DOS * 0000003-000000001 * TTDKIIDKSSS NUM * 0000004 * DOS * 0000004-000000001 * TDKIIDKSSS NUM * 0000005 * DOS * 0000005-000000001 * TDKIIDKSSS

我的问题是,根据我的经验,grok仅适用于固定模式。我试图从不同的日志行中提取上述数字,这些日志行将具有NUM和DOS重复范围2次或100次。

有没有办法获得多次重复并使用logstash将它们放入数组中以进行elasticsearch存储?

1 个答案:

答案 0 :(得分:1)

我认为使用这些日志行的最佳镜头是以下方法:

filter{
  mutate{
    gsub=>["message","NUM\*(?:[0-9]+)\*DOS\*"," ","message","[*|-]"," "]
  }
  extractnumbers{}
}

以上将提取NUM&来自消息字段的DOS编号,它将 NUM置于奇数值(int1,int3,...),& DOS中的偶数(int2,int4 ......)。请注意,任何前导零都将从值中删除(00001 => 1)
日志的输出如下:

# leaing zeros will be removed
int1=>1, #NUM
int2=>1, #DOS
int3=>2, #NUM
int4=>1, #DOS
int5=>3,
int6=>1,
int7=>4,
int8=>1,
int9=>5,
int10=>1

我希望这有帮助:)。