logstash和elasticsearch的版本不兼容问题?

时间:2014-06-10 18:44:52

标签: amazon-web-services elasticsearch logstash

我正在使用Logstash 1.4.1和Elasticsearch(安装为EC2集群)1.1.1和Elasticsearch AWS插件2.1.1。

如果Logstash正在与Elasticsearch正确交谈,我会使用 -

bin/logstash -e 'input { stdin { } } output { elasticsearch { host => <ES_cluster_IP> } }'

我得到了 -

log4j, [2014-06-10T18:30:17.622]  WARN: org.elasticsearch.discovery: [logstash-ip-xxxxxxxx-20308-2010] waited for 30s and no initial state was set by the discovery
Exception in thread ">output" org.elasticsearch.discovery.MasterNotDiscoveredException: waited for [30s]
    at org.elasticsearch.action.support.master.TransportMasterNodeOperationAction$3.onTimeout(org/elasticsearch/action/support/master/TransportMasterNodeOperationAction.java:180)
    at org.elasticsearch.cluster.service.InternalClusterService$NotifyTimeout.run(org/elasticsearch/cluster/service/InternalClusterService.java:492)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(java/util/concurrent/ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(java/util/concurrent/ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(java/lang/Thread.java:744)

但是当我使用 -

bin/logstash -e 'input { stdin { } } output { elasticsearch_http { host => <ES_cluster_IP> } }'

它可以正常使用以下警告 -

Using milestone 2 output plugin 'elasticsearch_http'. This plugin should be stable, but if you see strange behavior, please let us know! For more information on plugin milestones, see http://logstash.net/docs/1.4.1/plugin-milestones {:level=>:warn}

我不明白为什么即使版本兼容,我也不能使用elasticsearch代替elasticsearch_http

3 个答案:

答案 0 :(得分:1)

Logstash elasticsearch plugin page提到:

VERSION NOTE: Your Elasticsearch cluster must be running Elasticsearch 1.1.1. If you use 
any other version of Elasticsearch, you should set protocol => http in this plugin.

所以它不是版本不兼容。

Elasticsearch使用9300进行多播并与其他客户端通信。因此,您的logstsah可能无法与您的弹性搜索群集通信。请检查您的服务器配置防火墙是否具有阻止端口9300.

答案 1 :(得分:1)

我注意将protocol选项设置为&#34; http&#34;,&#34; transport&#34;和&#34;节点&#34;。关于这一点的文档是矛盾的 - 一方面它声明它是可选的并且没有默认值,而最后它表示默认值根据代码集而不同:

  

'node'协议将正常连接到群集   Elasticsearch节点(但不会存储数据)。这允许你使用   多播发现之类的东西。如果您使用节点协议,那么   必须允许端口9300(或其中任何一个)进行双向通信   已配置的端口)。

     

'transport'协议将连接到您指定的主机并且将会   不会在Elasticsearch集群中显示为“节点”。这很有用   在你不能允许从中出站的连接的情况下   Elasticsearch集群到此Logstash服务器。

     

'http'协议将使用Elasticsearch REST / HTTP接口   和elasticsearch谈谈。

     

与Elasticsearch交谈时,所有协议都将使用批量请求。

     

java / jruby下的默认协议设置是“node”。默认   非java rubies上的协议是“http”

这里的问题是协议设置对你如何连接到Elasticsearch及其运作方式有一些非常重要的影响,但是当你没有设置协议时,它不清楚它会做什么。最好选择一个并设置它 -

http://logstash.net/docs/1.4.1/outputs/elasticsearch#protocol

答案 2 :(得分:0)

在elasticsearch.yml中获取协议:

output {
    elasticsearch { host => localhost protocol => "http" port => "9200" }
    stdout { codec => rubydebug }
}