从节点请求Elasticsearch超时

时间:2014-03-14 13:25:23

标签: javascript node.js elasticsearch request-timed-out

我正在使用官方Javascript客户端设置一个简单的Node.js REST服务来与Elasticsearch接口。我在本地运行此代码,但群集位于远程。当我通过浏览器使用_head插件时,我可以毫无问题地连接ES和查询。但是,通过Javascript客户端执行此操作会超时所有请求。我设置了ElasticSearch对象,但向它发送任何请求都不起作用。我不认为这是一个网络问题,因为我可以通过浏览器访问ES。这就是我要求的东西,一个非常基本的获取:

var elasticsearch = require("elasticsearch");
var es = new elasticsearch.Client({
    host: "https://my-address:9200/", // also tried without protocol part and trailing slashes
    log: "error",
    sniffOnStart: true
});

es.get({
    index: "things",
    type: "someThing",
    id: "42"
}).then(doSomeStuff, handleStuffFailed);

此操作失败并显示一条简单的错误消息Errror: Request timeout after 30000ms.

我在这里遗漏了什么吗?我已阅读客户文档,这似乎是客户的基本“hello world”。

5 个答案:

答案 0 :(得分:7)

由于 sniffOnStart ,我们在QBox上也遇到了这个问题。 试试这个配置:

var es = new elasticsearch.Client({
    host: "my-address:9200",
    log: "trace",
    sniffOnStart: true
});

你会看到添加的节点ip是私有ip。 在我们这边,我们决定禁用嗅探并手动添加公共节点主机地址数组,如下所示:

var es = new elasticsearch.Client({
    hosts: ["my-address1:9200", "my-address2:9200", "my-address3:9200"],
    log: "error"
});

答案 1 :(得分:7)

在实例化ES客户端时尝试扩展 requestTimeout 参数。

client = new elasticsearch.Client({
        host          : 'http://localhost:9200',
        requestTimeout: 60000
    });

我有一个长时间运行的过程,花了不到10分钟。通过使requestTimeout值为60000(10分钟),该过程可以在没有超时的情况下完成。

答案 2 :(得分:2)

请点击此处查看此问题:https://github.com/elastic/elasticsearch-js/issues/186

我想我们需要使用上面提到的requestTimeout变量。

答案 3 :(得分:1)

关于弹性搜索中的超时,您需要区分两种类型的超时:

您应该知道基于操作的超时会覆盖初始化timeout

答案 4 :(得分:1)

如果看到

,请检查以下项目
  

发现:30000ms后请求超时

  1. 确保Elasticsearch CPU /内存没有阻塞
  2. 如果查询窗口有很多数据,则可能是请求 在30000ms内超时 在kibana.yml中增加kibana的超时 - > elasticsearch.requestTimeout: 120000 重启kibana服务
  3. 减少kibana仪表板加载的数据量 发现:管理下的sampleSize - 高级设置 - >改变 相应的价值
  4. 如果中间有任何Load Balancer,则增加超时设置
    也来自LB.