logstash - удалить все нецифровые символы из поля

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

person spuder    schedule 31.03.2015    source источник


Ответы (1)


Это проблема определения объема.

Если вы выполните только 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" ]
  }
}
person Alain Collins    schedule 31.03.2015