Ваше условие неверно, если поместить имя поля между двойными кавычками, оно станет строкой, и оно всегда будет истинным, поэтому ваш фильтр mutate
всегда будет запускаться и добавлять поле session-id
с содержимым поля [payload][text][code][session-id]
, если поле не существует, строка %{[payload][text][code][session-id]}
будет добавлена в session-id
в качестве значения поля.
Ваше условие должно быть if [payload][text][code][session-id]
без двойных кавычек.
Вы можете воспроизвести это поведение с помощью следующего тестового конвейера
input {
generator {
message => "HK5wfPQgzkKHmgzVF"
count => 1
}
}
filter {
dissect {
mapping => {
"message" => "%{[payload][text][code][session-id]}"
}
}
if "[payload][text][code][session-id]" {
mutate {
add_field => { "session-id" => "%{[payload][text][code][session-id]}"}
}
}
}
output {
stdout { }
}
Запуск этого конвейера даст вам поле session-id
со значением HK5wfPQgzkKHmgzVF
, поскольку поле [payload][text][code][session-id]
существует, а ваше условие всегдаtrue, если вы измените имя поля на [payload][text][code][session-id-test]
в блоке dissect
и снова запустите конвейер, значение session-id
теперь будет %{[payload][text][code][session-id]}
.
Удалите двойные кавычки изусловное, и оно будет истинным, только если поле [payload][text][code][session-id]
действительно существует.