logstash的kv模式分割后的全部字符在Elasticsearch里面的数据类型全都是string,这样聚合搜索很不方便,于是利用ruby插件实现一下自动转整数的kv模式
## logstash 5.x,由于logstash5.x不支持直接修改值,直接把值copy出来修改然后重新写进去
filter {
ruby {
code => "
fieldArray = event.get('[message][message]').split(/\u001F/);
kv = {};
for field in fieldArray
name = field.split('=')[0];
value = field.split('=')[1];
if value =~ /\A\d+\Z/
kv[name]=value.to_i
else
kv[name]=value
end
end
event.set('[monitor]',kv);
"
remove_field => ["[message][message]"]
}
}
### logstash 2.x
filter{
ruby {
code => "
fieldArray = event['message'].split(/\u001F/);
for field in fieldArray
name = field.split('=')[0];
value = field.split('=')[1];
if value =~ /\A\-?\d+\Z/
event[name] = value.to_i
else
event[name] = value
end
end
"
}
}