我正在尝试将以下内容从日志行提取到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存储?
答案 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
我希望这有帮助:)。