diff --git a/config/kibana.yml b/config/kibana.yml index 5ad6fa21f9b3e..b464964c1df4f 100644 --- a/config/kibana.yml +++ b/config/kibana.yml @@ -54,7 +54,7 @@ # Time in milliseconds to wait for responses from the back end or elasticsearch. # This must be > 0 -# elasticsearch.requestTimeout: 300000 +# elasticsearch.requestTimeout: 30000 # Time in milliseconds for Elasticsearch to wait for responses from shards. # Set to 0 to disable. diff --git a/src/plugins/elasticsearch/lib/create_proxy.js b/src/plugins/elasticsearch/lib/create_proxy.js index 29f613aa80475..e54c6d95d8e67 100644 --- a/src/plugins/elasticsearch/lib/create_proxy.js +++ b/src/plugins/elasticsearch/lib/create_proxy.js @@ -1,23 +1,30 @@ const createAgent = require('./create_agent'); const mapUri = require('./map_uri'); const { resolve } = require('url'); +const { assign } = require('lodash'); function createProxy(server, method, route, config) { const options = { method: method, path: createProxy.createPath(route), + config: { + timeout: { + socket: server.config().get('elasticsearch.requestTimeout') + } + }, handler: { proxy: { mapUri: mapUri(server), passThrough: true, agent: createAgent(server), - xforward: true + xforward: true, + timeout: server.config().get('elasticsearch.requestTimeout') } }, }; - if (config) options.config = config; + assign(options.config, config); server.route(options); }; diff --git a/src/plugins/elasticsearch/lib/expose_client.js b/src/plugins/elasticsearch/lib/expose_client.js index f12fb803c4855..33ca7a9fc85da 100644 --- a/src/plugins/elasticsearch/lib/expose_client.js +++ b/src/plugins/elasticsearch/lib/expose_client.js @@ -18,6 +18,8 @@ module.exports = function (server) { clientKey: config.get('elasticsearch.ssl.key'), ca: config.get('elasticsearch.ssl.ca'), apiVersion: config.get('elasticsearch.apiVersion'), + pingTimeout: config.get('elasticsearch.pingTimeout'), + requestTimeout: config.get('elasticsearch.requestTimeout'), keepAlive: true, auth: true }); @@ -43,6 +45,8 @@ module.exports = function (server) { ssl: ssl, apiVersion: options.apiVersion, keepAlive: options.keepAlive, + pingTimeout: options.pingTimeout, + requestTimeout: options.requestTimeout, log: function () { this.error = function (err) { server.log(['error', 'elasticsearch'], err); diff --git a/src/plugins/elasticsearch/lib/health_check.js b/src/plugins/elasticsearch/lib/health_check.js index 15fc7b686a656..ac11fe6950d9c 100644 --- a/src/plugins/elasticsearch/lib/health_check.js +++ b/src/plugins/elasticsearch/lib/health_check.js @@ -22,7 +22,7 @@ module.exports = function (plugin, server) { plugin.status.yellow('Waiting for Elasticsearch'); function waitForPong() { - return client.ping({ requestTimeout: 1500 }).catch(function (err) { + return client.ping().catch(function (err) { if (!(err instanceof NoConnections)) throw err; plugin.status.red(format('Unable to connect to Elasticsearch at %s.', config.get('elasticsearch.url'))); diff --git a/src/plugins/testsBundle/testsEntryTemplate.js b/src/plugins/testsBundle/testsEntryTemplate.js index aff1601d50675..61127f4bfc48f 100644 --- a/src/plugins/testsBundle/testsEntryTemplate.js +++ b/src/plugins/testsBundle/testsEntryTemplate.js @@ -27,6 +27,7 @@ window.__KBN__ = { kbnIndex: '.kibana', esShardTimeout: 1500, esApiVersion: '2.0', + esRequestTimeout: '300000' } }; diff --git a/src/ui/index.js b/src/ui/index.js index 905ecd900f044..a376e229a5d20 100644 --- a/src/ui/index.js +++ b/src/ui/index.js @@ -64,6 +64,7 @@ module.exports = async (kbnServer, server, config) => { defaultInjectedVars.kbnIndex = config.get('kibana.index'); } if (config.has('elasticsearch')) { + defaultInjectedVars.esRequestTimeout = config.get('elasticsearch.requestTimeout'); defaultInjectedVars.esShardTimeout = config.get('elasticsearch.shardTimeout'); defaultInjectedVars.esApiVersion = config.get('elasticsearch.apiVersion'); } diff --git a/src/ui/public/es.js b/src/ui/public/es.js index a3a44b7796663..01895fd90d639 100644 --- a/src/ui/public/es.js +++ b/src/ui/public/es.js @@ -5,13 +5,13 @@ define(function (require) { var es; // share the client amoungst all apps require('ui/modules') .get('kibana', ['elasticsearch', 'kibana/config']) - .service('es', function (esFactory, esUrl, $q, esApiVersion) { + .service('es', function (esFactory, esUrl, $q, esApiVersion, esRequestTimeout) { if (es) return es; es = esFactory({ host: esUrl, log: 'info', - requestTimeout: 0, + requestTimeout: esRequestTimeout, apiVersion: esApiVersion, plugins: [function (Client, config) {