目前我在我的logstash配置文件中执行类似的操作:
filter {
...
mutate {
...
convert => {
"blahId" => "integer"
"blahblahId" => "integer"
...
...
"b...blahId" => "integer"
}
...
}
...
}
所以基本上我想将所有以“Id”结尾的字段转换为整数。有没有办法在一行中做到这一点?像"*Id" => "integer"
这样的东西呢?
修改:我试过了
convert => {
"*Id" => "integer"
}
正如我所料,没有奏效。
也许使用ruby过滤器?
答案 0 :(得分:3)
对此没有具体答案,但这是我最终要做的事情:
ruby {
code => "
fieldArray = event['kvmess'].split('|');
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
"
}
我的kvmess
就像" blahId = 123 | blahblahId = 456 | some = thing | b..blahId = 789" 。
因此,这将所有具有数值的键转换为整数。
有一个插件 - kv专门用于此但它没有将数据类型更改为int的功能,所以我最终使用了这个ruby插件。
答案 1 :(得分:0)
我认为你可以使用ruby过滤器:
ruby {
code => "
for k,v in event
if k.match(/^.*Id$/i)
event[k]=v.to_i
end
end
"
}
注意:我没有测试过。