使用docker在命令行上指定logstashconfiguration

用于存储第一个事件的 Logstash 6.0文档显示以下命令以简单pipe道将stdininput到stdout的简单pipe道运行logstash:

$ bin/logstash -e 'input { stdin { } } output { stdout {} }' 

但是,从官方docker容器运行logstash时,这不起作用,并且失败并显示关于不兼容的命令行选项的错误消息:

 $ docker run --rm -it docker.elastic.co/logstash/logstash-oss:6.0.0 \ -e 'input { stdin { } } output { stdout {} }' ERROR: Settings 'path.config' (-f) and 'config.string' (-e) can't be used simultaneously. 

我没有指定-fpath.config 。 我只是想testing一下,如果logstash可以开始,并正在为这个简单的情况工作。 如何解决这个错误,而无需挂载configuration文件?

查看logstash泊坞窗映像中的启动脚本,可以在logstash-core/lib/logstash/runner.rb文件中find以下function:

 # where can I find the logstash.yml file? # 1. look for a "--path.settings path" # 2. look for a "--path.settings=path" # 3. check if the LS_SETTINGS_DIR environment variable is set # 4. return nil if not found def fetch_settings_path(cli_args) if i=cli_args.find_index("--path.settings") cli_args[i+1] elsif settings_arg = cli_args.find {|v| v.match(/--path.settings=/) } match = settings_arg.match(/--path.settings=(.*)/) match[1] elsif ENV['LS_SETTINGS_DIR'] ENV['LS_SETTINGS_DIR'] else nil end end 

所以解决scheme似乎要么传递--path.settings== – 空值的LS_SETTINGs_DIR )或将LS_SETTINGs_DIRvariables设置为虚假值。 事实上:

 $ docker run --rm -it docker.elastic.co/logstash/logstash-oss:6.0.0 \ --path.settings= -e 'input { stdin { } } output { stdout { } }' The stdin plugin is now waiting for input: