21

我正在使用官方的 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”。

4

6 回答 6

16

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

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

我有一个耗时不到 10 分钟的过程。通过将 requestTimeout 值设置为 60000(10 分钟),该过程可以在不超时的情况下完成。

于 2014-09-16T20:54:20.690 回答
8

由于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"
});
于 2014-08-19T11:46:42.077 回答
3

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

  • 初始化超时:初始化 ES:requestTimeout时,pingTimeout两者都默认为 30000ms。阅读更多:弹性搜索文档中的配置文档

  • 基于操作的超时:也可以设置许多操作,例如bulk, create, delete, 。假设您有一个巨大的批量对象要插入,您可以设置基于操作的超时:Elastic Search 文档indextimeout

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

于 2016-04-01T09:09:16.123 回答
2

在此处查看有关此问题的信息:https ://github.com/elastic/elasticsearch-js/issues/186

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

于 2015-04-06T12:09:06.503 回答
1

如果您看到,请检查以下项目

发现:30000 毫秒后的请求超时

  1. 确保 Elasticsearch CPU/内存没有阻塞
  2. 如果查询窗口的数据很多,那么有可能在 30000ms 内请求超时 增加 kibana.yml 中 kibana 的超时时间 --> elasticsearch.requestTimeout: 120000 重启 kibana 服务
  3. 减少kibana仪表板加载的数据量发现:管理下的sampleSize - 高级设置 - >相应地更改值
  4. 如果两者之间有任何负载均衡器,那么也增加
    LB 的超时设置。
于 2018-05-28T19:43:29.327 回答
0

如果您在每台服务器上运行多个节点,请尝试锁定每个 jvm 可以访问的处理器数量。我们遇到了这个问题,这样做解决了它。我们认为一个节点使用了过多的系统资源,这会导致同一服务器上的另一个节点在查询状态时响应主节点的速度很慢。

于 2022-01-07T23:39:55.600 回答