添加 requestTimeout 导致 Kibana 启动失败

Adding requestTimeout causes Kibana to fail at startup

我正在尝试使用 Elasticsearch-Kibana-Logstash 来处理 Web 日志文件。

有些查询需要一点时间,而 Kibana 很快就会超时,所以我想增加 Kibana 等待 elasticsearch 响应的时间。经过一番搜索,我找到了一些设置 elasticsearch.requestTimeout 的建议。我试图通过将此添加到我的 kibana.yml 文件来增加超时:

elasticsearch.requestTimeout: 5000

这会导致 Kibana 在启动时立即失败并出现以下错误:

kibserver_1        | FATAL { Error: Payload timeout must be shorter than socket timeout: POST /elasticsearch/{index}/_search
kibserver_1        |     at Object.exports.assert (/usr/share/kibana/node_modules/hoek/lib/index.js:736:11)
kibserver_1        |     at new module.exports.internals.Route (/usr/share/kibana/node_modules/hapi/lib/route.js:69:10)
kibserver_1        |     at internals.Connection._addRoute (/usr/share/kibana/node_modules/hapi/lib/connection.js:387:19)
kibserver_1        |     at internals.Connection._route (/usr/share/kibana/node_modules/hapi/lib/connection.js:379:18)
kibserver_1        |     at internals.Plugin._apply (/usr/share/kibana/node_modules/hapi/lib/plugin.js:572:14)
kibserver_1        |     at internals.Plugin.route (/usr/share/kibana/node_modules/hapi/lib/plugin.js:542:10)
kibserver_1        |     at createProxy (/usr/share/kibana/src/core_plugins/elasticsearch/lib/create_proxy.js:85:14)
kibserver_1        |     at ScopedPlugin.init [as externalInit] (/usr/share/kibana/src/core_plugins/elasticsearch/index.js:110:37)
kibserver_1        |     at ScopedPlugin.tryCatcher (/usr/share/kibana/node_modules/bluebird/js/main/util.js:26:23)
kibserver_1        |     at Promise.attempt.Promise.try (/usr/share/kibana/node_modules/bluebird/js/main/method.js:30:24)
kibserver_1        |     at /usr/share/kibana/src/server/plugins/plugin.js:196:46
kibserver_1        |     at next (native)
kibserver_1        |     at step (/usr/share/kibana/src/server/plugins/plugin.js:25:191)
kibserver_1        |     at /usr/share/kibana/src/server/plugins/plugin.js:25:361
kibserver_1        |   cause: 
kibserver_1        |    Error: Payload timeout must be shorter than socket timeout: POST /elasticsearch/{index}/_search
kibserver_1        |        at Object.exports.assert (/usr/share/kibana/node_modules/hoek/lib/index.js:736:11)
kibserver_1        |        at new module.exports.in how to resolternals.Route (/usr/share/kibana/node_modules/hapi/lib/route.js:69:10)
kibserver_1        |        at internals.Connection._addRoute (/usr/share/kibana/node_modules/hapi/lib/connection.js:387:19)
kibserver_1        |        at internals.Connection._route (/usr/share/kibana/node_modules/hapi/lib/connection.js:379:18)
kibserver_1        |        at internals.Plugin._apply (/usr/share/kibana/node_modules/hapi/lib/plugin.js:572:14)
kibserver_1        |        at internals.Plugin.route (/usr/share/kibana/node_modules/hapi/lib/plugin.js:542:10)
kibserver_1        |        at createProxy (/usr/share/kibana/src/core_plugins/elasticsearch/lib/create_proxy.js:85:14)
kibserver_1        |        at ScopedPlugin.init [as externalInit] (/usr/share/kibana/src/core_plugins/elasticsearch/index.js:110:37)
kibserver_1        |        at ScopedPlugin.tryCatcher (/usr/share/kibana/node_modules/bluebird/js/main/util.js:26:23)
kibserver_1        |        at Promise.attempt.Promise.try (/usr/share/kibana/node_modules/bluebird/js/main/method.js:30:24)
kibserver_1        |        at /usr/share/kibana/src/server/plugins/plugin.js:196:46
kibserver_1        |        at next (native)
kibserver_1        |        at step (/usr/share/kibana/src/server/plugins/plugin.js:25:191)
kibserver_1        |        at /usr/share/kibana/src/server/plugins/plugin.js:25:361,
kibserver_1        |   isOperational: true }

这个让我很困惑。我似乎无法在 ElasticSearch 文档中找到对 "payload timeout" 的任何引用。我的网络搜索表明这可能来自 hapijs,但我不确定如何解决这个问题。有人知道吗?

(Kibana、ElasticSearch 和 Logstash 都是 v 6.1.0)

我认为问题在于您将超时值设置得太小,以毫秒为单位,默认值为 30000(请参阅 https://www.elastic.co/guide/en/kibana/6.1/settings.html):

elasticsearch.requestTimeout:

Default: 30000 Time in milliseconds to wait for responses from the back end or Elasticsearch. This value must be a positive integer.


可能是 elasticsearch.requestTimeout 用于在 hapijs 中设置套接字超时,因为负载超时的默认值似乎是 10 秒(from here):

route.options.payload.timeout

Default value: to 10000 (10 seconds).

检查负载超时是否小于套接字超时时会失败。但这只是一个假设,我未能在 Kibana 的代码中找到任何证据。