From 0b8a573655a26741368be79033d56143aae86a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Tue, 21 Feb 2023 19:46:57 +0100 Subject: [PATCH] [Elasticsearch Client] Limit Kibana's internal client's maxSockets --- .../src/elasticsearch_config.ts | 1 + .../src/elasticsearch_service.ts | 11 ++++++++++- x-pack/plugins/monitoring/server/config.test.ts | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts index bc2ec78acac06..182c3691699b5 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts @@ -37,6 +37,7 @@ export const configSchema = schema.object({ defaultValue: 'http://localhost:9200', }), maxSockets: schema.number({ defaultValue: Infinity, min: 1 }), + internalClientMaxSockets: schema.number({ defaultValue: 500, min: 1 }), maxIdleSockets: schema.number({ defaultValue: 256, min: 1 }), idleSocketTimeout: schema.duration({ defaultValue: '60s' }), compression: schema.boolean({ defaultValue: false }), diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.ts index fddff84293140..5b40f7e4e5cc5 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.ts @@ -89,10 +89,19 @@ export class ElasticsearchService this.log.debug('Setting up elasticsearch service'); const config = await firstValueFrom(this.config$); + const internalClientMaxSockets = await firstValueFrom( + this.coreContext.configService + .atPath('elasticsearch') + .pipe(map((rawConfig) => rawConfig.internalClientMaxSockets)) + ); this.authHeaders = deps.http.authRequestHeaders; this.executionContextClient = deps.executionContext; - this.client = this.createClusterClient('data', config); + this.client = this.createClusterClient('data', { + ...config, + maxSockets: + config.maxSockets > internalClientMaxSockets ? internalClientMaxSockets : config.maxSockets, + }); const esNodesCompatibility$ = pollEsNodesVersion({ internalClient: this.client.asInternalUser, diff --git a/x-pack/plugins/monitoring/server/config.test.ts b/x-pack/plugins/monitoring/server/config.test.ts index 98aa22f2134fd..dbd8cb51f9307 100644 --- a/x-pack/plugins/monitoring/server/config.test.ts +++ b/x-pack/plugins/monitoring/server/config.test.ts @@ -62,6 +62,7 @@ describe('config schema', () => { }, "idleSocketTimeout": "PT1M", "ignoreVersionMismatch": false, + "internalClientMaxSockets": 500, "logFetchCount": 10, "logQueries": false, "maxIdleSockets": 256,