Я не могу заставить целочисленные сравнения работать в фильтре 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
}
Решение от Badger (форум elastic.co):
Это ваша проблема. Ни одного обращенного не происходит. Мутирующий фильтр выполняет действия в фиксированном порядке, и как только он все это сделает, он украшает событие (это вызов filter_matched()), который реализует общие параметры, такие как add_field. Это означает, что преобразование выполняется до поля add_field, поэтому ни одно из полей не существует, когда вы пытаетесь их преобразовать. Разделите свою мутацию на две
-- Спасибо Барсуку за быстрое решение моего вопроса на https://discuss.elastic.co/t/howto-integer-comparison-in-logstash-filter/175675 с ответом, размещенным здесь для дальнейшего использования.
Вот официальная документация по этому поводу: elastic.co/guide/en/logstash/current/…