从节点请求Elasticsearch超时

Kro*_*tan 18 javascript request-timed-out node.js elasticsearch

我正在使用官方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);
Run Code Online (Sandbox Code Playgroud)

这会因简单的错误消息而失败 Errror: Request timeout after 30000ms.

我在这里错过了什么吗?我通过客户端文档阅读,这似乎是客户端的基本"hello world".

Lor*_*ien 8

尝试在实例化ES Client时扩展requestTimeout参数.

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

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

  • 尝试了一下,它只是在 60000 毫秒而不是 30000 毫秒超时。ElasticSearch 根本不应该超时。 (2认同)
  • 60_000 ms = 1分钟,而不是10 (2认同)

oli*_*uyp 7

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

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

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

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