У меня есть файлы журналов, которые я передаю в 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
}