logstash-从字段中删除所有非数字字符

logstash-从字段中删除所有非数字字符,logstash,logstash-grok,Logstash,Logstash Grok,我将日志文件传递到logstash,以便在推到elasticsearch之前进行修改 我有的一个字段有时显示为一系列数字 foobar = 42 有时它的前缀是字母 foobar = ws-42 我希望确保字段始终为整数,如果存在任何非数字,则将其删除 这里是logstash配置的一部分,它确保字段是整数 filter { mutate { convert => [ "foobar", "integer"] } } 如果出现字符,我如何去掉字符 更新 通过使用变异过滤

我将日志文件传递到logstash,以便在推到elasticsearch之前进行修改

我有的一个字段有时显示为一系列数字

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" ]
  }
}