LogStash: преобразование в целое число в mutate не имеет никакого эффекта

#elasticsearch #logstash #elastic-stack

#elasticsearch #logstash #elastic-stack

Вопрос:

Я не могу заставить целочисленные сравнения работать в фильтре logstash, используя logstash 6.4.2. Когда я пытаюсь, я все равно получаю строку, а сравнения «> 10» завершаются ошибкой с исключением времени выполнения при чтении журналов: «сравнение строки с 10 не удалось»

Есть какие-либо подсказки, что я делаю не так?

 filter {
    mutate {
        add_field => { "[@metadata][day]" => "%{ dd}"} # generates '06' on 6. of month
        convert => { "[@metadata][day]" => "integer" }
        add_field => { "testDay" => "%{[@metadata][day]}" } # Copy     
}
  

Ответ №1:

Решение от Badger (elastic.co форум):

Это ваша проблема. Ни одно из преобразований не выполняется. Фильтр mutate выполняет действия в фиксированном порядке, и как только он все это сделал, он украшает событие (это вызов filter_matched() ) , который реализует общие параметры, такие как add_field . Это означает, что преобразование выполняется перед add_field , поэтому ни одно из полей не существует, когда вы пытаетесь их преобразовать. Разделите свой mutate на два

— Спасибо Badger за быстрое решение моего вопроса в https://discuss.elastic.co/t/howto-integer-comparison-in-logstash-filter/175675 , с ответом, размещенным здесь для дальнейшего использования.

Комментарии:

1. Вот официальная документация по этому вопросу: elastic.co/guide/en/logstash/current /…