Условный вывод Logstash с использованием переменной среды не работает
Я использую Logstash для отправки данных журнала в Elasticsearch (конечно), но некоторые из моих конечных пользователей также хотят, чтобы данные отправлялись во вторичный CSV-файл, чтобы они могли выполнять свою собственную обработку. Я пытаюсь использовать переменную среды, чтобы определить, нужно ли нам выводить во вторичный файл и, если да, где этот файл должен жить.
Мой Logstash выглядит так:
input {
. . .
}
filter {
. . .
}
output {
elasticsearch {
. . .
}
if "${SECONDARY_OUTPUT_FILE:noval}" != "noval" {
csv {
fields => . . .
path => "${ SECONDARY_OUTPUT_FILE:noval}"
}
}
}
Когда значение SECONDARY_OUTPUT_FILE имеет значение, оно работает нормально. Когда этого не происходит, Logstash записывает вывод в формате csv в файл с именем "noval". Мой вывод заключается в том, что оператор if не работает правильно с переменной окружения.
Я использую Logstash версии 2.3.2 на компьютере с Windows 7.
Любые предложения или идеи будут оценены.
2 ответа
На самом деле, это очень хороший вопрос, по-прежнему открыты улучшения по этой теме на github, как упомянул IrlJidel по этому вопросу, обходной путь к этой проблеме:
mutate {
add_field => { "[@metadata][SECONDARY_OUTPUT_FILE]" => "${SECONDARY_OUTPUT_FILE:noval}" }
}
if [@metadata][SECONDARY_OUTPUT_FILE] != "noval" {
csv {
fields => . . .
path => "${SECONDARY_OUTPUT_FILE}"
}
}
просто быстрое обновление, так как Logstash 7.17 с использованием переменных в условных выражениях работает как положено: https://github.com/elastic/logstash/issues/5115#issuecomment-1022123571