如何验证 Logstash 输出到安全的 Elasticsearch URL(版本 5.6.5)

How to authenticate Logstash output to a secure Elasticsearch URL (version 5.6.5)

我使用的是 Logstash 和 Elasticsearch 版本 5.6.5。到目前为止,使用带有 HTTP 协议且没有身份验证的 elasticsearch 输出。现在 Elasticsearch 正在使用基本身份验证 (user/password) 和 CA 认证的 HTTPS URL 进行保护。我对 elasticsearch 服务器没有任何控制权。我只是用它从 Logstash 输出。

现在,当我尝试使用基本身份验证配置 elasticsearch 的 HTTPS URL 时,它无法创建管道。

输出配置

output { 
 elasticsearch {
   hosts => ["https://myeslasticsearch.server.io"]
   user => "esusername"
   password => "espassword"
   ssl => true
 }
}

错误

 1. Error registering plugin {:plugin=>"#<LogStash::OutputDelegator:0x50aa9200
 2. Pipeline aborted due to error {:exception=>#<URI::InvalidComponentError: bad component(expected user component):

如何解决这个问题? 我注意到有一个名为 cacert 的字段需要一些 PEM 文件。但我不确定该放什么,因为 Elasticsearch 服务器使用的是 CA 认证的 SSL 而不是自签名的。

附加问题:我没有安装任何 xpack。从 Logstash 到 Elasticsearch 的 HTTPS 输出是否需要购买 'xpack'?

我找到了问题的根本原因。需要修复三件事:

  1. 我测试的logstash版本错了5.5.0。我下载了与 Elasticsearch 版本 5.6.5 匹配的正确版本。

  2. 我使用的主机是 运行 在 443 端口上。当我没有像下面那样指定端口时,logstash 附加了 9200,因此连接失败。

    hosts => ['https://my.es.server.com']

    以下配置更正了 logstash 使用的端口。

    hosts => ['https://my.es.server.com:443']

  3. 我缺少代理连接设置。

    proxy => 'http://my.proxy.com:80'

总体设置有效。

output {
    elasticsearch {
       hosts => ['https://my.es.server.com:443']
       user => 'esusername'
       password => 'espassword'
       proxy => 'http://my.proxy:80'
       index => "my-index-%{+YYYY.MM.dd}"
    }
}

不需要 'ssl' 字段。

此外 不需要 'xpack' 安装 满足此要求。