2015-03-31 4 views
1

У меня есть файлы журналов, которые я перехожу в logstash для изменения, прежде чем нажимать на elasticsearch.logstash - удалить все незнаковые символы из поля

Одно из полей, которые у меня есть, иногда появляется в виде последовательности цифр

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 
} 

ответ

3

Это вопрос обзорного.

Если вы только 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" ] 
    } 
} 
Смежные вопросы