web-dev-qa-db-ja.com

logstash-スレッド "> output"での例外org.elasticsearch.discovery.MasterNotDiscoveredException:待機[30秒]

ログスタッシュは私にとって100%の災難です。同じマシンでLS 1.4.1とES 1.02を使用しています。

Logstashインデクサーを開始する方法は次のとおりです。

/usr/local/share/logstash-1.4.1/bin/logstash -f /usr/local/share/logstash.indexer.config
input {
  redis {
    Host => "redis.queue.do.development.sf.test.com"
    data_type => "list"
    key => "logstash"
    codec => json
  }
}

output {
        stdout { }
        elasticsearch {
                bind_Host => "127.0.0.1"
                port => "9300"
        }
}

私が設定したES:

network.bind_Host: 127.0.0.1
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300"]

そして、すごい..これは私が得るものです:

/usr/local/share/logstash-1.4.1/bin/logstash -f /usr/local/share/logstash.indexer.config
Using milestone 2 input plugin 'redis'. 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}
log4j, [2014-05-29T12:02:29.545]  WARN: org.elasticsearch.discovery: [logstash-do-logstash-sf-development-20140527082230-866-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)
15
Tampa

参照 http://logstash.net/docs/1.4.1/outputs/elasticsearch

バージョン注:ElasticsearchクラスターはElasticsearch 1.1.1を実行している必要があります。 Elasticsearchの他のバージョンを使用する場合は、このプラグインでprotocol => httpを設定する必要があります。

したがって、あなたの問題は、logstashがhttpトランスポートを使用せずに使用している古いESバージョンをサポートしないことです。

20
Alcanzar

'protocol => "http"'を設定するとうまくいきました。 EPELリポジトリにはlogstashとelasticsearchの補完バージョンがあると期待していましたが、ESは多くのものに使用されているため、logstash rpmと緊密に結合されていません。

6
BergBrains

私にとって、問題はelasticsearchやlogstashのバージョンではありませんでした。私はそれらをインストールしたばかりで、それぞれの最新バージョン(それぞれ1.5.0および1.4.2)を使用していました。

以下を実行することも私にとってうまくいきました:

logstash -e 'input { stdin { } } output { elasticsearch { protocol => "http" } }' 

しかし、他のプロトコルを使用して接続できなかった理由を突き止めたかったのです。 documentation はデフォルトのプロトコルが何であるかを示していませんが、elasticsearchを開始したときに次の出力が得られたため、デフォルトでポート9300にトランスポートまたはノードを使用していると確信していました

[2015-04-14 22:21:56,355][INFO ][node                     ] [Super-Nova] version[1.5.0], pid[10796], build[5448160/2015-03-23T14:30:58Z]
[2015-04-14 22:21:56,355][INFO ][node                     ] [Super-Nova] initializing ...
[2015-04-14 22:21:56,358][INFO ][plugins                  ] [Super-Nova] loaded [], sites []
[2015-04-14 22:21:58,186][INFO ][node                     ] [Super-Nova] initialized
[2015-04-14 22:21:58,187][INFO ][node                     ] [Super-Nova] starting ...
[2015-04-14 22:21:58,257][INFO ][transport                ] [Super-Nova] bound_address {inet[/127.0.0.1:9300]}, publish_address {inet[/127.0.0.1:9300]}
[2015-04-14 22:21:58,273][INFO ][discovery                ] [Super-Nova] elasticsearch/KPaTxb9vRnaNXBncN5KN7g
[2015-04-14 22:22:02,053][INFO ][cluster.service          ] [Super-Nova] new_master [Super-Nova][KPaTxb9vRnaNXBncN5KN7g][Azads-MBP-2][inet[/127.0.0.1:9300]], reason: zen-disco-join (elected_as_master)
[2015-04-14 22:22:02,069][INFO ][http                     ] [Super-Nova] bound_address {inet[/127.0.0.1:9200]}, publish_address {inet[/127.0.0.1:9200]}
[2015-04-14 22:22:02,069][INFO ][node                     ] [Super-Nova] started

最初に、次の 手順 に従ってポート9300を開いてみました。それは状況を変えなかったので、おそらくそのポートはブロックされていませんでした。

それから私はこれを偶然見つけました github issue 。実際に役立つ解決策はありませんでしたが、elasticsearch.yamlをチェックして、elasticsearchクラスター名が正しいことを再確認しました(このファイルは通常、elasticsearchがインストールされている場所に保存されています。「Elasticsearch」を実行して、どこを見ればよいか)。驚いたことに、私のelastisearch cluster.nameには私の名前が追加されていました。クラスター名が単に「elasticsearch」になるようにそれを削除すると、logstashが私のelasticsearchインスタンスを発見するのに役立ちました。

1
AzadMemon