作者:-_-小欢欢-_- | 来源:互联网 | 2023-01-06 15:44
用于存储第一个事件的 Logstash 6.0文档显示了以下命令,可通过简单的管道(简单地将stdin传递到stdout)来运行logstash:
$ bin/logstash -e 'input { stdin { } } output { stdout {} }'
但是,当从官方泊坞窗容器运行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.
我没有指定-f
或path.config
。我只想测试logstash是否可以启动并且是否适用于这种简单情况。如何解决此错误而不挂载配置文件?
1> knittl..:
查看logstash docker映像中的启动脚本,可以在logstash-core/lib/logstash/runner.rb
文件中找到以下功能:
# 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
因此,解决方案似乎通过了--path.settings=
(- =
语法为空值)或将LS_SETTINGs_DIR
变量设置为伪造的值。确实:
$ 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: