Logstash - Исключение в потоке "> output" org.elasticsearch.discovery.MasterNotDiscoveredException: ждал [30s]
Лог-стоп - это 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)
Ответы
Ответ 1
См. http://logstash.net/docs/1.4.1/outputs/elasticsearch
ВЕРСИЯ ПРИМЕЧАНИЕ. В вашем кластере Elasticsearch должен быть запущен Elasticsearch 1.1.1. Если вы используете любую другую версию Elasticsearch, вы должны установить протокол = > http в этом плагине.
Итак, ваша проблема заключается в том, что logstash не поддерживает более старую версию ES, которую вы используете, без использования транспорта http
.
Ответ 2
Настройка "protocol = > " http "" работала для меня. Я ожидал, что репо EPEL будет иметь дополнительные версии logstash и elasticsearch, но ES используется для большого количества материалов, поэтому не тесно связан с logstash rpms.
Ответ 3
Для меня проблема не в версиях elasticsearch или logstash. Я только что установил их, и я использовал последнюю версию каждого (1.5.0 и 1.4.2 соответственно).
Для меня также работало следующее:
logstash -e 'input { stdin { } } output { elasticsearch { protocol => "http" } }'
Но я хотел понять, почему я не смог подключиться к другим протоколам. Хотя документация не говорит, что такое протокол по умолчанию, я был уверен, что я либо использовал транспорт, либо node для порта 9300 по умолчанию из-за следующего вывода, который я получил, когда начал elasticsearch
[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. Там не было действительно решения, которое помогло, но я дважды проверял, чтобы убедиться, что имя кластера elasticsearch прав, проверяя elasticsearch.yaml(этот файл обычно хранится там, где установлен elasticsearch. Запустите "which elasticsearch", чтобы дать вам идея, где искать). И вот, у моего elastisearch cluster.name было добавлено мое имя. Удалив его так, чтобы имя кластера было просто "elasticsearch", помогло logstash обнаружить мой экземпляр elasticsearch.