2017-02-16 82 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"