logstash - 从字段中删除所有非数字字符
logstash - remove all non digit characters from field
我有一些日志文件要传递到 logstash,以便在推送到 elasticsearch 之前进行修改。
我的其中一个字段有时会显示为一系列数字
foobar = 42
有时以字母为前缀
foobar = ws-42
我想确保该字段始终为整数,并且如果存在任何非数字,则将其删除。
这是 logstash 配置的一部分,它确保该字段是一个整数
filter {
mutate {
convert => [ "foobar", "integer"]
}
}
如果存在字符,我如何去掉这些字符?
更新
通过使用 mutate 过滤器,我可以去除非数值,也可以转换为整数。但是,如果我尝试两者都做,它 returns 0.
例子
input {
stdin {}
}
filter {
kv { }
mutate {
gsub => [ "foobar", "\D", "" ]
convert => [ "foobar", "integer" ]
}
}
这是输出。请注意,如果提供“42”,则 foobar returns 为 42 的整数,但是如果您提供 'sw-42' foobar returns 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(不进行转换),则表明正则表达式正在运行:
{
"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" ]
}
}
我有一些日志文件要传递到 logstash,以便在推送到 elasticsearch 之前进行修改。
我的其中一个字段有时会显示为一系列数字
foobar = 42
有时以字母为前缀
foobar = ws-42
我想确保该字段始终为整数,并且如果存在任何非数字,则将其删除。
这是 logstash 配置的一部分,它确保该字段是一个整数
filter {
mutate {
convert => [ "foobar", "integer"]
}
}
如果存在字符,我如何去掉这些字符?
更新
通过使用 mutate 过滤器,我可以去除非数值,也可以转换为整数。但是,如果我尝试两者都做,它 returns 0.
例子
input {
stdin {}
}
filter {
kv { }
mutate {
gsub => [ "foobar", "\D", "" ]
convert => [ "foobar", "integer" ]
}
}
这是输出。请注意,如果提供“42”,则 foobar returns 为 42 的整数,但是如果您提供 'sw-42' foobar returns 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(不进行转换),则表明正则表达式正在运行:
{
"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" ]
}
}