2017-02-16 7 views
3

Мы только что переключились с 2.X на 5.X, и я пытаюсь выяснить, как использовать переменные окружения в файлах конфигурации конвейера.Как использовать переменные среды в Logstash 5.X?

В 2.X, следующие работали:

export HOSTNAME 

Затем начните Logstash с флагом линии --allow-env команды. Файл конфигурации трубопровода выглядит следующим образом:

filter { 
     mutate { 
       add_field => { "some_field" => "${HOSTNAME}"} 
     } 
} 

В документации сказано, что --allow-env флаг больше не требуется.

Я попытался заменить mutate фильтром environment, но не повезло.

Я попытался отредактировать файл startup.options. Добавлено HOSTNAME как обычная переменная окружения, и добавила ее между частью read-EOM, но без каких-либо положительных результатов.

Что, кажется, работает сейчас, если я добавлю следующую часть в файл /usr/share/logstash/bin/logstash.lib.sh, но я уверен, что если я должен отредактировать это.

HOSTNAME="the-name-of-the-host" 
export HOSTNAME 

Так что мой вопрос: что упускаю из виду? Каков надлежащий способ разрешить использование переменных окружения в файлах конфигурации конвейера Logstash?

Примечание:

Как Alcanzar описано, что это работает, если я бегу Logstash вручную. Однако мы хотели бы запустить его с systemctl, поэтому он должен быть автоматически запущен демоном при запуске. В 2.X он отлично работал с файлом /etc/init.d/logstash, но, как описывает documentation10, этого больше нет. Файлы, которые я должен изменить: /etc/logstash/startup.options и /etc/logstash/logstash.yml.

ответ

0

Переменные среды четко работают при запуске вручную:

С test.conf этого:

input { 
    stdin { codec => "json" } 
} 
filter { 
    mutate { 
     add_field => { 
      "hostname" => "${HOSTNAME}" 
     } 
    } 
} 

output { 
    stdout { codec => "rubydebug" } 
} 

Мы можем запустить тест и проверить его:

% export HOSTNAME="abc1234" 
% echo '{"a":1}' | bin/logstash -f test.conf 
Sending Logstash's logs to /Users/xxxxxx/logstash-5.1.1/logs which is now configured via log4j2.properties 
[2017-02-16T09:04:33,442][INFO ][logstash.inputs.stdin ] Automatically switching from json to json_lines codec {:plugin=>"stdin"} 
[2017-02-16T09:04:33,454][INFO ][logstash.pipeline  ] Starting pipeline {"id"=>"main", "pipeline.workers"=>8, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>1000} 
[2017-02-16T09:04:33,457][INFO ][logstash.pipeline  ] Pipeline main started 
[2017-02-16T09:04:33,492][INFO ][logstash.agent   ] Successfully started Logstash API endpoint {:port=>9600} 
{ 
      "a" => 1, 
     "hostname" => "abc1234", 
    "@timestamp" => 2017-02-16T15:04:33.497Z, 
     "@version" => "1", 
      "host" => "XXXXXX.local", 
      "tags" => [] 
} 
[2017-02-16T09:04:36,472][WARN ][logstash.agent   ] stopping pipeline {:id=>"main"} 

Так Реальный вопрос - почему он не работает в вашем сценарии. Если вы используете какое-то /etc/init.d скрипта для запуска logstash, то вы можете добавить в /etc/sysconfig/logstash линию как export HOSTNAME="whatever"

+0

Да, вы совершенно правы в этом. Я забыл упомянуть, что мы хотели бы запустить его с помощью команды systemctl. В документации упоминается файл '/ etc/logstash/startup.options' и'/etc/logstash/logstash.yml', поэтому я добавил точную строку кода, о которой вы говорили ранее, но без везения. – Letokteren

+0

Я думаю, возможно, это расскажет вам, как настроить переменные среды для systemd - http: // serverfault.com/questions/413397/how-to-set-environment-variable-in-systemd-service - я не использую systemd, но информация выглядит твердой – Alcanzar

0

мы имели один и тот же вопрос с logstash 5. Лучшим способом (который мы нашли), это добавить окр варов в /etc/systemd/system/logstash.service.d/override.conf и там есть

[Service] 
    Environment="HOSTNAME=the-name-of-the-host"