【问题标题】:how to fix this code exception error elasticsearch如何修复此代码异常错误elasticsearch
【发布时间】:2014-05-21 08:50:17
【问题描述】:

我目前正在使用 elasticsearch、logstash 和 kibana。

我遇到了一个我无法通过的异常。

首先这是我在浏览器中输入 ip:9200/_cluster/health 时得到的结果 ..

{
 "cluster_name":"mr-cluster",
 "status":"yellow",
 "timed_out":false,
 "number_of_nodes":1,
 "number_of_data_nodes":1,
 "active_primary_shards":5,
 "active_shards":5,
 "relocating_shards":0,
 "initializing_shards":0,
 "unassigned_shards":5
}

这是 kibana 在尝试请求弹性搜索时得到的结果

Remote Address:ip:9200
Request ip:9200/_all/_search
Request Method:POST
Status Code:200 OK

到现在为止好像还好..

这是我的 logstash 配置文件:

input {
gelf {
    port => "5000"
}
udp {
    port => "5001"
}
}

output {
file {
    path => "/home/g/stdout.log"
}
elasticsearch {
    cluster => "mr-cluster"
    codec => "json"
}
}

当我只使用一个文件作为输出时,这很简单,它可以完美地工作,logstash 可以工作。 问题是当我想使用elasticsearch作为输出时,没有任何效果(事件文件输出),我从elasticsearch得到这个异常。我已经在谷歌上搜索了几个小时,但没有找到解决方案。

这是一个例外:

[2014-05-21 09:18:35,060][WARN ][http.netty               ] [mr-node-elasticsearch] Caught     exception while handling client http traffic, closing connection [id: 0x27d0ccce, /0:0:0:0:0:0:0:1:44164 => /0:0:0:0:0:0:0:1:9200]
java.lang.IllegalArgumentException: empty text
at org.elasticsearch.common.netty.handler.codec.http.HttpVersion.<init>(HttpVersion.java:97)
at org.elasticsearch.common.netty.handler.codec.http.HttpVersion.valueOf(HttpVersion.java:62)
at org.elasticsearch.common.netty.handler.codec.http.HttpRequestDecoder.createMessage(HttpRequestDecoder.java:75)
at org.elasticsearch.common.netty.handler.codec.http.HttpMessageDecoder.decode(HttpMessageDecoder.java:189)
at org.elasticsearch.common.netty.handler.codec.http.HttpMessageDecoder.decode(HttpMessageDecoder.java:101)
at org.elasticsearch.common.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:500)
at org.elasticsearch.common.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:435)
at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
at org.elasticsearch.common.netty.OpenChannelsHandler.handleUpstream(OpenChannelsHandler.java:74)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268)
at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255)
at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744) 

感谢大家的帮助!

【问题讨论】:

    标签: elasticsearch logstash kibana


    【解决方案1】:

    当我收到此错误时,我将端口从 9200 更改为 9300。希望它对您有用。

    注意:我是弹性搜索的初学者。

    这可能不会解决您的问题,但它可能会帮助搜索相同错误消息并被引导到此页面的其他初学者。

    【讨论】:

    • 这个错误本身意味着 netty 正在接收垃圾。结果,它无法确定请求中的 http 版本。例如,当尝试将 https 连接到 http 端口时,也会发生此错误。或者在这种情况下,当与 elasticsearch RESTful API 端口(默认 9200)而不是传输端口(默认 9300)通信时。
    • 我很惊讶,但这对我有用.. 非常感谢
    【解决方案2】:

    您配置弹性搜索的方式(仅使用集群名称)会触发集群的多播发现。您可以尝试直接在集群中进行配置,看看是否有效:

    elasticsearch {
        host=>"ip_here"
        port=>9200
        protocol=>http
    }
    

    此外,您的集群输出表明您的集群处于“黄色”状态,因此您可能想弄清楚那里发生了什么——您希望它是“绿色”。

    【讨论】:

      【解决方案3】:

      我犯的错误在于为单播发现配置 Elastic 实例。我无意中将端口号 9200 添加到了单播主机列表的配置中。

      不正确:

      discovery.zen.ping.multicast.enabled: false
      discovery.zen.ping.unicast.hosts: ["localhost.localdomain:9200"]
      

      正确:

      discovery.zen.ping.multicast.enabled: false
      discovery.zen.ping.unicast.hosts: ["localhost.localdomain"]
      

      【讨论】:

        【解决方案4】:

        将端口更改为 9300 就可以了。但最好检查一下弹性搜索服务。它可能归结为。并且索引不会发生因此这个例外。我也是 ELK 堆栈的初学者。

        另外,如果您不想更改端口,请登录到每个 elasticsearch 节点并运行 /etc/init.d/elasticsearch start

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-05
          • 2016-07-20
          • 2016-01-11
          • 1970-01-01
          • 1970-01-01
          • 2017-03-03
          • 1970-01-01
          • 2021-12-25
          相关资源
          最近更新 更多