Конфигурация Logstash: проверьте, существует ли логическое поле

Используя Logstash 1.4.2, у меня есть поле myfield, которое является логическим значением в моем документе JSON.

Чтобы проверить, существует ли он (не заботьтесь о логическом значении), я использовал:

if[myfield] { ...exists... } else { ...doesn't exist... } 

Результаты тестирования этого условного оператора:

[myfield] does not exist   --> false
[myfield] exists, is true  --> true
[myfield] exists, is false --> false //expected true because the field exists

Он проверяет логическое значение, а не его существование.

Как проверить существование логического поля?


person bradvido    schedule 09.10.2014    source источник
comment
Ссылка на выпуск github github.com/elastic/logstash/issues/1867   -  person spuder    schedule 20.04.2015


Ответы (2)


Немного хромает, что он не работает сразу из коробки, но вы можете взломать его так: добавьте строковое представление логического значения, сравните со строкой, а затем удалите добавленное поле:

filter {
   mutate {
     add_field => { "test" => "%{boolean}" }
   }
   if [test] == 'true' or [test] == 'false' {
     // field is present and set right
   } else {
     // field isn't present or set to something other than true/false
   }
   mutate {
     remove_field => [ "test" ]
   }
}
person Alcanzar    schedule 10.10.2014
comment
Спасибо. Я уже знаю, что; это просто грязно и добавляет несколько дополнительных циклов процессора. - person bradvido; 14.10.2014
comment
Серьезно, лучшего варианта нет?? - person kev; 01.12.2017
comment
stackoverflow.com/questions/30309096/ кажется сказать, что есть лучший способ для логического - person Alcanzar; 01.12.2017

вы можете использовать рубиновый плагин logstash.

filter {  
      ruby {
        code => '
          myfield= event.get("[myfield]")
          if !myfield.nil?
              event.set("[myfield]", "some_value_1")
            else
              event.set("[myfield]", "some_value_2")
            end
        '
      }
    }
person cancer13    schedule 26.02.2020