elasticsearch,request-timed-out,Javascript,Node.js,elasticsearch,Request Timed Out" /> elasticsearch,request-timed-out,Javascript,Node.js,elasticsearch,Request Timed Out" />

Javascript 从节点请求Elasticsearch超时

Javascript 从节点请求Elasticsearch超时,javascript,node.js,elasticsearch,request-timed-out,Javascript,Node.js,elasticsearch,Request Timed Out,我正在使用官方Javascript客户端设置一个简单的Node.js REST服务与Elasticsearch接口。我在本地运行此代码,但群集位于远程。当我浏览浏览器时,使用\u head插件,我可以毫无问题地连接ES和查询。但是,通过Javascript客户端执行此操作会超时所有请求。我设置了ElasticSearch对象,但是向它发送任何请求都不起作用。我不认为这是网络问题,因为我可以通过浏览器访问ES。这就是我请求的方式,一个非常基本的get: var elasticsearch = re

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

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);
此操作失败,出现一条简单的错误消息
error:30000ms后请求超时。


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

我们在QBox上也遇到了这个问题,因为sniffOnStart。 尝试使用此配置:

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"
});

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

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

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

检查此处有关此问题的信息:


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

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

  • 初始化超时:初始化ES时:
    requestTimeout
    pingTimeout
    ,两者都默认为30000ms。阅读更多:

  • 基于操作的超时:许多操作,如
    批量
    创建
    删除
    索引
    也可以设置
    超时
    。假设您要插入一个大容量对象,您可以设置基于操作的超时:


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

如果您看到

发现:30000ms后请求超时

  • 确保Elasticsearch CPU/内存未堵塞
  • 若查询窗口中有大量数据,那个么该请求是可能的 30000ms内超时 增加kibana.yml-->elasticsearch.requestTimeout中kibana的超时: 120000 重新启动kibana服务
  • 减少kibana仪表板加载的数据量 发现:在管理下采样-高级设置-->更改 相应地估价
  • 如果中间有任何负载平衡器,则增加超时设置
    同样来自LB

  • 要验证这不是网络问题,能否尝试从运行Node.js的同一台机器上运行curl命令?e、 g.curl-XGET''@superalanalysis现在就这么做了,连接得很好。顺便问一下,ES版本是0.90.5。您是否尝试使用http。。我在您的代码中看到https。。请查收again@Sidharthan
    //在没有协议部分和尾部斜杠的情况下也进行了尝试
    ,并尝试了正常HTTP,但也出现了错误。有人提出这个问题后发现了解决方案吗@Slowarrytried,它只是在60000毫秒而不是30000毫秒时超时。ElasticSearch根本不应该超时。它是一个非常小的索引(5个文档,每个文档有一个短字符串字段)上的get by ID。即使在千兆字节的数据上也不会花那么长时间。60_000 ms=1分钟,不是10分钟。谢谢你,你刚刚救了我的命!(弹性云版本6.2也存在此问题)您的第二个链接已过期。基于此问题,我认为您也应该在基于操作的超时中使用requestTimeout而不是timeout。另外,使用timeout将返回503。