В OpenSearch разрешен запуск всех типов сценариев

Сценарии OpenSearch могут создавать большую нагрузку на кластер, особенно если сценарии написаны без учета ресурсов, которые они могут потребовать. По этой причине лучше всего ограничить как типы скриптов, которые могут выполняться на кластере, так и контексты, в которых они могут выполняться.

OpenSearch logo

Как решить эту проблему

Параметры сценариев - это расширенные настройки, которые требуют знания того, как реализованы сценарии на вашем кластере (если они вообще реализованы). Если вы не знаете, как реализованы сценарии в вашем приложении, лучше не изменять эти значения и оставить значения по умолчанию. Настоятельно рекомендуется протестировать эту настройку на кластере разработки или постановки, чтобы убедиться, что она не препятствует работе запросов.

script.allowed_types

Для параметра script.allowed_types можно установить значение inline, stored, both или none. Все эти значения вполне допустимы, поскольку многие приложения требуют использования скриптов для их корректной работы. Для установки этого значения необходимо знать, требует ли ваше приложение использования скриптов, и как эти скрипты реализованы.

Приведенная ниже настройка должна быть добавлена во все узлы opensearch.yml (она не может быть обновлена динамически):

Если вы знаете, что ваше приложение не требует выполнения скриптов, то установите значение none. Хорошей практикой является хранение этих скриптов, а не использование "встроенных" скрипто, если же приложение требует их выполнение. Если вы выполнили эту оптимизацию в своем приложении, то можно использовать значение "stored".

Некоторые приложения (например, kibana) используют встроенные скрипты, поэтому в этом случае может потребоваться использовать настройки "both" или "inline".

Оптимизация приложения за счет использования хранимых сценариев

Хранение скриптов на кластере вместо использования встроенных скриптов имеет как преимущества в плане производительности, так и безопасности.

Чтобы сохранить сценарий в строке, можно воспользоваться процедурой, показанной ниже:

Сохраните на кластере скрипт с именем "add_count":

Вызвать скрипт add_count для команды update by query, передав в него значение параметра, которое будет использоваться в скрипте:

script.allowed_contexts

Для ограничения разрешенных контекстов необходимо точно знать, какие контексты требуются вашему приложению для работы. Если вы не знаете, какие контексты вам нужны, то лучше оставить этот параметр по умолчанию, который разрешает все контексты.

Возможными контекстами являются:

  • ingest processor
  • update
  • update by query
  • reindex
  • sort
  • similarity
  • weight
  • score
  • field
  • filter
  • minimum should match
  • metric aggregation initialization
  • metric aggregation map
  • metric aggregation combine
  • metric aggregation reduce
  • bucket script aggregation
  • bucket selector aggregation
  • watcher condition
  • watcher transform.

Возможно, плагины добавляют дополнительные контексты, которые здесь не перечислены.

Если вы хотите ограничить количество разрешенных контекстов только определенными, то это можно сделать, добавив настройку во все узлы opensearch.yml, как показано в примере ниже (она не может обновляться динамически):

Понравилась статья? Поделиться с друзьями:
Добавить комментарий