#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 /…