Условный вывод 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

Другие вопросы по тегам