2017-02-08 14 views
0

У меня есть набор фильтров Logstash, который задает поле Alert_level целому числу, основанному на регулярном выражении, соответствующем сообщению.Значения поля ввода в Logstash

Пример:

if [message] =~ /(?i)foo/ {mutate {add_field => { "Alert_level" => "3" }}} 
if [message] =~ /(?i)bar/ {mutate {add_field => { "Alert_level" => "2" }}} 

Эти случаи не являются взаимоисключающими, и иногда приводят к событиям с 2 или более значений в Alert_level:

message => "foobar" 
Alert_level => "2, 3" 

Я хочу, чтобы сложить значения в Alert_level для полное целое число, где приведенный выше пример приведет к следующему:

message => "foobar" 
Alert_level => "5" 
+0

Вы хотите иметь два условия в **, если **? – Kulasangar

ответ

-1

Как я понял ваш вопрос, вам нужен оператор И в вашем если проверить оба условие:

if "foobar" in [message] and "5" in [Alert_level]{ 
    //do something 
} 
+0

он работает в этом конкретном случае. но у меня есть более 50 строк, например this =/ – Jam

+1

В этом случае вам нужно определить другой способ его фильтрации. Что-то вроде добавления * тега *, если уровень предупреждений таков и так. Что вы ожидаете от условного оператора? Чтобы * фильтровать * все уровни предупреждений? И, к сожалению, я не вижу другой работы, связанной с несколькими условными утверждениями. – Kulasangar

+0

Я не думаю, что это то, что ОП задавал –

1

Там нет математики в самой logstash, но мне нравится идея тега darth_vader (если ваш уровень попадают только один раз).

Вы можете установить тег для уровней оповещения, например. «alert_3», «alert_4» и т. д., а затем перейдите в фильтр ruby, чтобы пересечь их, разделите числовое значение и добавьте их вместе в новое поле. (Использование дозорного префикса, такого как «alert_», не позволит вам добавить «_grokparsefailure» или другой тег без предупреждения).

Есть и другие примеры для SO для циклического пересечения полей в рубине.