簡體   English   中英

logstash無法成功將數據發送到外部彈性搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM