logstash-从字段中删除所有非数字字符
我将日志文件传递到logstash,以便在推到elasticsearch之前进行修改 我有的一个字段有时显示为一系列数字logstash-从字段中删除所有非数字字符,logstash,logstash-grok,Logstash,Logstash Grok,我将日志文件传递到logstash,以便在推到elasticsearch之前进行修改 我有的一个字段有时显示为一系列数字 foobar = 42 有时它的前缀是字母 foobar = ws-42 我希望确保字段始终为整数,如果存在任何非数字,则将其删除 这里是logstash配置的一部分,它确保字段是整数 filter { mutate { convert => [ "foobar", "integer"] } } 如果出现字符,我如何去掉字符 更新 通过使用变异过滤
foobar = 42
有时它的前缀是字母
foobar = ws-42
我希望确保字段始终为整数,如果存在任何非数字,则将其删除
这里是logstash配置的一部分,它确保字段是整数
filter {
mutate {
convert => [ "foobar", "integer"]
}
}
如果出现字符,我如何去掉字符
更新
通过使用变异过滤器,我可以去掉非数值,也可以转换成整数。但是,如果我尝试同时执行这两个操作,它将返回0
范例
input {
stdin {}
}
filter {
kv { }
mutate {
gsub => [ "foobar", "\D", "" ]
convert => [ "foobar", "integer" ]
}
}
这是输出。请注意,如果提供了“42”,则foobar返回一个42的整数,但是如果提供了“sw-42”,则foobar返回0
foobar="42"
{
"message" => "foobar=\"42\"",
"@version" => "1",
"@timestamp" => "2015-03-31T22:32:11.718Z",
"host" => "swat-logstash02",
"foobar" => 42
}
foobar="sw-42"
{
"message" => "foobar=\"sw-42\"",
"@version" => "1",
"@timestamp" => "2015-03-31T22:32:23.822Z",
"host" => "swat-logstash02",
"foobar" => 0
}
这是一个范围问题
如果只执行gsub(不进行转换),则表明regexp正在工作:
{
"message" => "foobar=\"sw-42\"",
"@version" => "1",
"@timestamp" => "2015-03-31T22:42:40.097Z",
"host" => "0.0.0.0",
"foobar" => "42"
}
因此,您应该将其作为两节运行:
filter {
kv { }
mutate {
gsub => [ "foobar", "\D", "" ]
}
mutate {
convert => [ "foobar", "integer" ]
}
}