2017-02-16 16 views
3

我們剛剛從2.X切換到5.X,並試圖找出如何在管道配置文件中使用環境變量。如何在Logstash 5.X中使用環境變量?

在2.X,下面的工作:

export HOSTNAME 

然後用--allow-env命令行標誌啓動Logstash。管道配置文件如下所示:

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

該文檔說明--allow-env標誌不再需要。

我試圖用environment過濾器代替mutate,但沒有運氣。我試過編輯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文件一起工作良好,但是如documentation所述,那不是更多。我應該編輯的文件是:/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.最好的辦法(即我們找到)同樣的問題是添加ENV瓦爾在/etc/systemd/system/logstash.service.d/override.conf中,並且在那裏有

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