【问题标题】:Specify logstash configuration on command line with docker使用 docker 在命令行上指定 logstash 配置
【发布时间】:2018-05-16 08:48:15
【问题描述】:

Stashing your first event 的 Logstash 6.0 文档显示了以下命令,使用简单的管道运行 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。我只是想测试logstash是否可以启动并且正在为这个简单的案例工作。如何在不挂载配置文件的情况下解决此错误?

【问题讨论】:

    标签: docker elasticsearch logstash


    【解决方案1】:

    查看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==-syntax 为空值),要么将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:
    

    【讨论】:

      【解决方案2】:

      正如 Knittl 所说,在 logstash.yml 文件中咨询了 --path.settings 的 logstash 设置,看起来像这样(取自 docker.elastic.co/logstash/logstash:6.1.2 图像:

      http.host: "0.0.0.0" path.config: /usr/share/logstash/pipeline xpack.monitoring.elasticsearch.url: http://elasticsearch:9200 xpack.monitoring.elasticsearch.username: logstash_system xpack.monitoring.elasticsearch.password: changeme

      问题是 path.config 指向的目录只包含默认的 logstash.conf。

      没有副作用的解决办法是:

      $ docker run --rm -it docker.elastic.co/logstash/logstash-oss:6.0.0 \ --path.config="" -e 'input { stdin { } } output { stdout { } }'

      这样,logstash.yml 中的其他设置将保持不变。

      【讨论】:

        猜你喜欢
        • 2015-07-22
        • 2021-10-07
        • 1970-01-01
        • 2019-07-06
        • 2017-11-19
        • 1970-01-01
        • 2014-10-18
        • 2016-05-12
        • 1970-01-01
        相关资源
        最近更新 更多