使用 convert in mutate 将所有以 "id" 结尾的字段转换为整数?
Convert all fields ending with "id" to integer using convert in mutate?
目前我正在我的 logstash 配置文件中做这样的事情:
filter {
...
mutate {
...
convert => {
"blahId" => "integer"
"blahblahId" => "integer"
...
...
"b...blahId" => "integer"
}
...
}
...
}
所以基本上我想将所有以 "Id" 结尾的字段转换为整数类型。有没有办法在一行中做到这一点?像 "*Id" => "integer"
这样的东西是做什么的?
编辑:我试过了
convert => {
"*Id" => "integer"
}
如我所料,没有用。
也许使用 ruby 过滤器?
不是具体的答案,但这是我最终做的:
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 插件。
目前我正在我的 logstash 配置文件中做这样的事情:
filter {
...
mutate {
...
convert => {
"blahId" => "integer"
"blahblahId" => "integer"
...
...
"b...blahId" => "integer"
}
...
}
...
}
所以基本上我想将所有以 "Id" 结尾的字段转换为整数类型。有没有办法在一行中做到这一点?像 "*Id" => "integer"
这样的东西是做什么的?
编辑:我试过了
convert => {
"*Id" => "integer"
}
如我所料,没有用。
也许使用 ruby 过滤器?
不是具体的答案,但这是我最终做的:
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 插件。