繁体   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