【问题标题】:Version incompatibility issue with logsatsh and elasticsearch?logstash 和 elasticsearch 的版本不兼容问题?
【发布时间】:2014-07-31 15:59:50
【问题描述】:

我正在使用带有 Elasticsearch(安装为 EC2 集群)1.1.1 和 Elasticsearch AWS 插件 2.1.1 的 Logstash 1.4.1。

要尝试 Logstash 是否与 Elasticsearch 正确通信,我使用 -

bin/logstash -e 'input { stdin { } } output { elasticsearch { host => <ES_cluster_IP> } }'

我得到 -

log4j, [2014-06-10T18:30:17.622]  WARN: org.elasticsearch.discovery: [logstash-ip-xxxxxxxx-20308-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)

但是当我使用 -

bin/logstash -e 'input { stdin { } } output { elasticsearch_http { host => <ES_cluster_IP> } }'

它适用于以下警告 -

Using milestone 2 output plugin 'elasticsearch_http'. 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}

我不明白为什么即使版本兼容,我也不能使用elasticsearch 而不是elasticsearch_http

【问题讨论】:

  • 您是否尝试过在使用“elasticsearch”时明确设置协议?我会尝试使用“http”、“transport”和“node”,看看是否有区别。
  • @JohnPetrone 工作得很好,谢谢!
  • 哪种协议有效?
  • @JohnPetrone 我只尝试了“http”并且效果很好,所以没有转移到其他人。

标签: amazon-web-services elasticsearch logstash


【解决方案1】:

我会注意将protocol 选项设置为“http”、“transport”和“node”之一。这方面的文档是矛盾的 - 一方面它声明它是可选的并且没有默认值,而最后它说默认值因代码集而异:

“节点”协议将正常连接到集群 Elasticsearch 节点(但不会存储数据)。这允许您使用 多播发现之类的东西。如果你使用节点协议,你 必须允许端口 9300 上的双向通信(或任何一个 端口)。

“传输”协议将连接到您指定的主机,并将 不会在 Elasticsearch 集群中显示为“节点”。这很有用 在您不能允许从 Elasticsearch 集群到这个 Logstash 服务器。

“http”协议将使用 Elasticsearch REST/HTTP 接口 与弹性搜索交谈。

在与 Elasticsearch 通信时,所有协议都将使用批量请求。

java/jruby 下的默认协议设置是“node”。默认 非 java rubies 上的协议是“http”

这里的问题是,协议设置对您连接到 Elasticsearch 的方式以及它的运行方式有一些相当大的影响,但是当您不设置协议时,尚不清楚它会做什么。最好选择一个并设置它 -

http://logstash.net/docs/1.4.1/outputs/elasticsearch#protocol

【讨论】:

    【解决方案2】:

    Logstash elasticsearch plugin page中有提及:

    VERSION NOTE: Your Elasticsearch cluster must be running Elasticsearch 1.1.1. If you use 
    any other version of Elasticsearch, you should set protocol => http in this plugin.
    

    所以不是版本不兼容。

    Elasticsearch 使用 9300 进行多播并与其他客户端通信。因此,可能是您的 logstsah 无法与您的 elasticsearch 集群通信。请检查您的服务器配置,防火墙是否屏蔽了 9300 端口。

    【讨论】:

    • 这不是这里的问题,因为你可以看到我说过使用 elasticsearch_http 一切正常。
    • 我认为你有误解。当你使用elasticsearch_http时,这意味着logstash通过http POST将日志发送到ES,ES端口为9200。但是,如果你使用elasticsearch,logstash将需要连接到使用9300端口的ES!!!您收到的警告消息是因为 logstash 无法通过端口 9300 找到您的 ES。
    【解决方案3】:

    在 elasticsearch.yml 中设置协议:

    output {
        elasticsearch { host => localhost protocol => "http" port => "9200" }
        stdout { codec => rubydebug }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 2019-09-04
      • 2023-04-07
      • 1970-01-01
      • 2021-08-02
      • 2023-03-31
      相关资源
      最近更新 更多