[英]logstash doesn't succeed to send data to foreign elastic search
這是logstash.err的錯誤:
Faraday :: ConnectionFailed:在/opt/logstash/vendor/bundle/jruby/1.9/gems/faraday-0.9.0/lib/faraday/adapter/net_http.rb:44 build_response位於/ opt / logstash / vendor / bundle / jruby / 1.9 / gems / faraday-0.9.0 / lib / faraday / rack_builder.rb:139 run_request位於/opt/logstash/vendor/bundle/jruby/1.9/gems/faraday-0.9.0/lib/ faraday / connection.rb:377 perform_request /opt/logstash/vendor/bundle/jruby/1.9/gems/elasticsearch-transport-1.0.1/lib/elasticsearch/transport/transport/http/faraday.rb:24在org打電話/jruby/RubyProc.java:271在/opt/logstash/vendor/bundle/jruby/1.9/gems/elasticsearch-transport-1.0.1/lib/elasticsearch/transport/transport/base.rb:187在/ opt處的perform_request /logstash/vendor/bundle/jruby/1.9/gems/elasticsearch-transport-1.0.1/lib/elasticsearch/transport/transport/http/faraday.rb:20 perform_request位於/opt/logstash/vendor/bundle/jruby/1.9 /gems/elasticsearch-transport-1.0.1/lib/elasticsearch/transport/client.rb:102在/ opt / logstash / v上的perform_request endor / bundle / jruby / 1.9 / gems / elasticsearch-api-1.0.1 / lib / elasticsearch / api / namespace / common.rb:21 get_template位於/opt/logstash/vendor/bundle/jruby/1.9/gems/elasticsearch- api-1.0.1 / lib / elasticsearch / api / actions / indices / get_template.rb:24 template_exists? 在/opt/logstash/lib/logstash/outputs/elasticsearch/protocol.rb:132 template_install在/opt/logstash/lib/logstash/outputs/elasticsearch/protocol.rb:21在/ opt / logstash / lib / logstash /中注冊分別在org / jruby / RubyArray.java:1613處的output / elasticsearch.rb:259 /在/opt/logstash/lib/logstash/pipeline.16處的outputworker在:/opt/logstash/lib/logstash/pipeline.rb:152處的start_outputs
這是我的輸出配置:
output {
elasticsearch {
host => "X.X.X.X"
port => "9300"
protocol => "http"
cluster => "elasticsearch_david"
}
}
沒有連接問題,有什么想法嗎?
使用tcpdump進行的進一步調查給出:
GET /_template/logstash HTTP/1.1
User-Agent: Faraday v0.9.0
Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept: */*
Connection: close
問題在於端口和協議不匹配:
output {
elasticsearch {
host => "X.X.X.X"
port => "9300"
protocol => "http"
cluster => "elasticsearch_david"
}
}
您已將協議設置為“ http”,這將需要端口9200(ES用於http請求的默認端口),但已將端口設置為9300,這是用於集群間通信的端口,通常與“節點”協議一起使用。
不幸的是,該文檔與協議的默認設置矛盾:
協議
Value can be any of: "node", "transport", "http" There is no default value for this setting.
選擇用於與Elasticsearch對話的協議。
“節點”協議將作為普通的Elasticsearch節點連接到集群(但不會存儲數據)。 這使您可以使用多播發現之類的功能。 如果使用節點協議,則必須允許端口9300(或配置的任何端口)上的雙向通信。
“傳輸”協議將連接到您指定的主機,並且不會在Elasticsearch集群中顯示為“節點”。 在無法允許從Elasticsearch群集到該Logstash服務器的出站連接的情況下,這很有用。
“ http”協議將使用Elasticsearch REST / HTTP接口與elasticsearch對話。
與Elasticsearch交談時,所有協議都將使用批量請求。
java / jruby下的默認協議設置為“ node”。 非Java紅寶石上的默認協議是“ http”
最好的選擇是根據要執行的操作將協議設置設置為“節點”,“ http”或“傳輸”之一,然后讓logstash為您設置適當的端口:
output {
elasticsearch {
host => "X.X.X.X"
protocol => "http"
cluster => "elasticsearch_david"
}
參見http://logstash.net/docs/1.4.1/outputs/elasticsearch#protocol
這是由於配置錯誤:通過刪除協議和端口來解決的
output {
elasticsearch {
host => "X.X.X.X"
cluster => "elasticsearch_david"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.