据我所知,logstash现在支持config中的环境变量,如here所述。
但是当我将logstash作为服务运行时,我似乎无法使其正常工作。我在ubuntu 14.04,logstash 1:2.3.3-1,我使用sudo service logstash start
启动了logstash。
最后一点是我在docker容器中包含logstash,我不想在我的Dockerfile中硬编码变量值,我希望它在我启动容器时最终从命令行获取,例如docker run -e ES_HOST='my_host' ...etc...
。这实际上是我想要使用环境变量的主要原因。
然而,这个值似乎并没有让它一直到logstash:
#<LogStash::ConfigurationError: Host '${ES_HOST}:443' was specified, but is not valid! Use either a full URL or a hostname:port string!>
即使把码头工作者从混合物中拿出来,当我将它作为服务运行时,我似乎无法获得logstash以查看环境变量。我发现this关于在ubuntu中为服务提供环境变量,所以我将这一行添加到/etc/default/logstash
的末尾:
ES_HOST=my_host
我甚至将其插入/etc/init.d/logstash以确保它已设置:
[ -f /etc/default/logstash ] && . /etc/default/logstash
if [ -z "$ES_HOST" ] ; then
echo "ES_HOST is not set, please set it in /etc/default/logstash" >&2
exit 1
fi
但是logstash仍然会出现同样的错误,抱怨Host '${ES_HOST}:443' was specified, but is not valid!
仅供参考/etc/logstash/conf.d/my-config
中我的logstash配置的输出部分如下所示:
output {
elasticsearch {
hosts => ["${ES_HOST}:443"]
ssl => true
}
}