我们刚刚从2.X切换到5.X,我试图找出如何在管道配置文件中使用环境变量。
在2.X中,以下工作:
export HOSTNAME
然后使用--allow-env
命令行标志启动Logstash。管道配置文件如下所示:
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
文件一起工作正常,但正如documentation所描述的那样,现在已经没有了。我应该编辑的文件是:/etc/logstash/startup.options
和/etc/logstash/logstash.yml
。
答案 0 :(得分: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"
答案 1 :(得分:0)
我们遇到了与logstash 5相同的问题。最好的方法(我们发现)是在/etc/systemd/system/logstash.service.d/override.conf中添加env vars并且在那里有
[Service]
Environment="HOSTNAME=the-name-of-the-host"