Облачная платформаAdvanced

Настройка Flow Control 1.0

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Настройте политики управления потоком для вашего кластера Elasticsearch как во входящем, так и в исходящем направлениях, обеспечивая стабильность кластера за счёт защиты от аномального трафика.

Кластер Elasticsearch может быть перегружен из‑за всплесков трафика, вредоносных запросов и внутренней конкуренции за ресурсы, что может привести к отказу узлов. С помощью таких политик, как ограничение клиентских запросов, обратное давление записи и анализ шаблонов трафика, управление потоком обеспечивает правильное распределение ресурсов, тем самым защищая кластеры от перегрузки. Рассматриваются следующие сценарии:

  • Обработка записей с высокой конкуренцией: снижает риск исключений out-of-memory (OOM) при больших нагрузках записи.
  • Защита безопасности: контролирует доступ по IP‑адресу с использованием чёрных и белых списков.
  • Экстренный ответ: блокирует вредоносный или аномальный трафик одним щелчком.
  • Оптимизация производительности: оптимизирует пороги управления потоком и политики на основе собранной статистики.

Описание функции

Table 1 Flow control policies

Policy

How It Works

Details

HTTP/HTTPS flow control

  • Вы можете контролировать доступ к кластеру по IP‑адресу клиента или подсети с помощью чёрного или белого списка HTTP/HTTPS. Если IP‑адрес находится в чёрном списке, клиент сразу же отключается, и все его запросы отклоняются. Белый список имеет приоритет над чёрным списком. Если IP‑адрес клиента присутствует одновременно в чёрном и белом списках, его запросы не будут отклоняться.
  • Управление потоком на основе одновременных соединений HTTP/HTTPS: ограничивает общее количество одновременных соединений HTTP/HTTPS, которые может обрабатывать узел.
  • Flow control на основе новых HTTP/HTTPS соединений: ограничивает количество новых соединений, которые могут быть установлены с узлом в секунду.

Включение HTTP/HTTPS Flow Control для узла

Memory flow control

Memory flow control ограничивает пути запросов на основе использования кучи памяти. Вы можете настроить whitelist для Memory flow control, глобальный порог использования памяти и пороги кучи памяти для отдельных путей. Глобальный порог Memory flow control имеет приоритет над порогом памяти отдельного пути. Пути, включённые в whitelist, освобождаются от Memory flow control.

Включение Memory Flow Control

Global path whitelist для flow control

При необходимости вы можете настроить Global path whitelist для flow control, когда требуется использовать пользовательские plug-ins.

Добавление Global Path Whitelist для Flow Control

Request sampling

Request sampling может фиксировать количество запросов доступа от client IP addresses и пути запросов от отобранных пользователей. На основе статистики вы можете идентифицировать и анализировать трафик доступа по client IP addresses и путям запросов.

Включение Request Sampling

One-click traffic blocking

One-click traffic blocking блокирует все client соединения с узлом. Однако это не включает соединения для доступа к Kibana или Elasticsearch monitor APIs.

Включить One-Click Traffic Blocking

Flow control

Управление потоком предоставляет отдельный API для проверки статистики трафика и фиксирует количество вызовов API. Вы можете оценить порог управления потоком и проанализировать нагрузку кластера на основе этой статистики.

Просмотр информации об управлении потоком

Логирование доступа

Логи доступа фиксируют URL‑адреса и тела HTTP/HTTPS запросов, полученных узлами за определённый период времени. Вы можете проанализировать текущую нагрузку трафика на основе логов доступа.

Включение и просмотр логов доступа

Логирование доступа в файлах

Любой доступ к кластеру записывается в файл {Cluster name_access_log.log}. Вы можете использовать функцию резервного копирования логов для просмотра подробных логов доступа в OBS.

Включение логирования доступа в файлах

Управление потоком CPU

Вы можете настроить порог использования CPU узла, чтобы ограничить входящий трафик для каждого узла.

Включение управления потоком CPU

Ограничения

  • Кластеры Elasticsearch 7.6.2 и 7.10.2, созданные после февраля 2023 г., поддерживают только Flow Control 2.0, тогда как кластеры, созданные ранее, поддерживают только Flow Control 1.0.
  • Управление потоком может ухудшить производительность некоторых узлов.
  • Если управление потоком включено, запросы пользователей, превышающие порог управления потоком, будут отклонены.
  • Включение memory flow control может ухудшить производительность некоторых запросов поиска или привести к сбоям запросов поиска в Kibana.
  • Включение access logging может ухудшить производительность кластера.
  • Memory flow control и CPU flow control основаны на путях запросов. Избегайте настройки слишком большого количества путей или слишком длинных путей, так как они могут ухудшить производительность кластера.

Включение HTTP/HTTPS Flow Control для каждого узла

  1. Выполните следующую команду, чтобы включить HTTP/HTTPS flow control для узлов кластера:
    PUT /_cluster/settings
    {
    "persistent": {
    "flowcontrol.http.enabled": true,
    "flowcontrol.http.allow": ["192.168.0.1/24", "192.168.2.1/24"],
    "flowcontrol.http.deny": "192.168.1.1/24",
    "flowcontrol.http.concurrent": 1000,
    "flowcontrol.http.newconnect": 1000,
    "flowcontrol.http.warmup_period": 0
    }
    }
    Table 2 Элементы конфигурации для HTTP/HTTPS flow control

    Configuration Item

    Type

    Description

    flowcontrol.http.enabled

    Boolean

    Определяет, включить ли HTTP/HTTPS flow control. HTTP/HTTPS flow control отключён по умолчанию. Включение может повлиять на производительность доступа к узлу.

    Значение: true или false

    Значение по умолчанию: false

    flowcontrol.http.allow

    List<String>

    белый список IP address.

    Можно указать несколько IP addresses и масок подсети, либо списки IP addresses. Для разделения разных элементов используйте запятые (,). Пример: xx.xx.xx.xx/24,xx.xx.xx.xx/24, или xx.xx.xx.xx,xx.xx.xx.xx.

    Значение по умолчанию — null.

    flowcontrol.http.deny

    List<String>

    чёрный список IP address.

    Можно указать несколько IP addresses и масок подсети, либо списки IP addresses. Для разделения разных элементов используйте запятые (,).

    Значение по умолчанию — null.

    flowcontrol.http.concurrent

    Integer

    Максимальное количество одновременных соединений HTTP/HTTPS.

    Значение по умолчанию: количество vCPUs на узле x 400

    flowcontrol.http.newconnect

    Integer

    Максимальное количество новых соединений HTTP/HTTPS, которые могут быть созданы в секунду.

    Значение по умолчанию: количество vCPU на узле × 200

    flowcontrol.http.warmup_period

    Integer

    Время, необходимое для того, чтобы скорость установки соединения HTTP/HTTPS достигла максимума. Если flowcontrol.http.newconnect установлен в 100 и flowcontrol.http.warmup_period установлен в 5000ms, это указывает, что система сможет создавать до 100 соединений в секунду через 5 секунд.

    Диапазон значений: 0–10000

    Единица измерения: ms

    Значение по умолчанию: 0

    Note

    Если все параметры установлены в null, они будут восстановлены до значений по умолчанию.

  2. Выполните следующую команду, чтобы отключить управление потоком HTTP/HTTPS для узлов кластера:
    PUT /_cluster/settings
    {
    "persistent": {
    "flowcontrol.http.enabled": false
    }
    }

Включение управления памятью

  1. Включить управление памятью.
    • Выполните следующую команду, чтобы включить управление памятью:
      PUT /_cluster/settings
      {
      "persistent": {
      "flowcontrol.memory.enabled": true,
      "flowcontrol.memory.allow_path": "/index/_search",
      "flowcontrol.memory.heap_limit": "85%"
      }
      }
    • Выполните следующую команду, чтобы включить управление памятью для отдельного пути запроса.

      Настройте порог использования кучи памяти для пути запроса. Вы можете настроить приоритеты для таких правил порога.

      PUT /_cluster/settings
      {
      "persistent": {
      "flowcontrol.memory.enabled": true,
      "flowcontrol.memory": {
      "flowcontrol_search": {
      "filter_path": "index1/_search",
      "heap_limit": "50%"
      },
      "flowcontrol_bulk": {
      "filter_path": "index*/_bulk",
      "heap_limit": "50%"
      }
      }
      }
      }
    Table 3 Элементы конфигурации для управления потоком памяти

    Элемент конфигурации

    Тип

    Описание

    flowcontrol.memory.enabled

    Boolean

    Определяет, включить ли управление потоком памяти. Эта функция отключена по умолчанию. Включение управления потоком памяти может незначительно повлиять на производительность узла.

    Значение: true или false

    Значение по умолчанию: false

    flowcontrol.memory.allow_path

    List<String>

    Белый список путей запросов для управления потоком памяти.

    Пути, включённые в белый список, освобождаются от управления потоком памяти. Поддерживаются символы подстановки. По умолчанию запросы API, контролируемые кластером, освобождены от управления потоком памяти. Это предотвращает сбой запросов информации о кластере при достижении порога использования памяти.

    Пример:

    • "flowcontrol.memory.allow_path": "/index/_search",
    • "flowcontrol.memory.allow_path": "/index*/_search",
    • "flowcontrol.memory.allow_path": ["/index/_search", "/index1/_bulk"],

    Можно настроить максимум 10 путей. Путь может содержать до 32 символов.

    Значение по умолчанию равно null.

    flowcontrol.memory.heap_limit

    String

    Максимальное глобальное использование памяти кучи узла до срабатывания управления потоком. Значение не может быть меньше 10 % памяти кучи.

    Диапазон значений: 10%–100%

    Значение по умолчанию: 90%

    flowcontrol.memory.*.filter_path

    String

    Пути, подпадающие под управление памятью.

    Значение по умолчанию — **, что означает все пути. Если flowcontrol.memory.heap_limit настроен, а flowcontrol.memory.*.filter_path не настроен, это означает, что все пути, кроме путей из белого списка, находятся под контролем. Белый список имеет приоритет над правилом единственного пути. Если путь указан как в flowcontrol.memory.allow_path, так и в flowcontrol.memory.*.filter_path, запросы из этого пути будут разрешены.

    Например, если flowcontrol.memory.allow_path и flowcontrol.memory.*.filter_path оба установлены в abc/_search, то abc/_search не будет подпадать под управление потоком.

    Максимальная длина: 32 символов

    flowcontrol.memory.*.heap_limit

    String

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

    Диапазон значений: 10%–100%

    Значение по умолчанию: 90%

    Note

    Если все параметры установлены в null, они будут восстановлены к значениям по умолчанию.

  2. Выполните следующую команду, чтобы отключить контроль потока памяти:
    • Выполните следующую команду, чтобы удалить контроль потока памяти для отдельного пути запроса.

      Перед отключением контроля потока памяти необходимо удалить конфигурацию контроля потока памяти для отдельного пути запроса.

      PUT /_cluster/settings
      {
      "persistent": {
      "flowcontrol.memory.enabled": true,
      "flowcontrol.memory": {
      "flowcontrol_search": {
      "filter_path": null,
      "heap_limit": null
      }
      }
      }
      }
    • Выполните следующую команду, чтобы отключить контроль потока памяти:
      PUT /_cluster/settings
      {
      "persistent": {
      "flowcontrol.memory.enabled": false
      }
      }

Добавление глобального белого списка путей для контроля потока

Выполните следующую команду, чтобы добавить глобальный белый список путей для контроля потока:

PUT _cluster/settings
{
"persistent": {
"flowcontrol.path.white_list": "xxxx"
}
}

Table 4 Элементы конфигурации глобального белого списка путей для контроля потока

Элемент конфигурации

Тип

Описание

flowcontrol.path.white_list

List<String>

Пути, освобожденные от управления потоком. Эти пути не затрагиваются управлением потоком памяти, управлением потоком CPU или блокировкой одним щелчком; но находятся под управлением потока на основе IP-адреса.

Можно настроить не более 10 путей. Путь может содержать до 32 символов.

Значение по умолчанию — null.

ПРИМЕЧАНИЕ:

Рекомендуется не настраивать этот параметр, если он не требуется плагинами.

Note

Если все параметры установлены в null, они будут восстановлены до значений по умолчанию.

Включение выборки запросов

  1. Выполните следующую команду, чтобы включить выборку запросов:
    PUT /_cluster/settings
    {
    "persistent": {
    "flowcontrol.statics.enabled": true,
    "flowcontrol.statics.threshold": 100,
    "flowcontrol.statics.sample_frequency": 50
    }
    }
    Table 5 Элементы конфигурации для выборки запросов

    Элемент конфигурации

    Тип

    Описание

    flowcontrol.statics.enabled

    Boolean

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

    Значение: true or false

    Значение по умолчанию: false

    flowcontrol.statics.threshold

    Integer

    Количество недавних запросов доступа, для которых собирается статистика. Значение 100 указывает, что статистика будет собираться для 100 IP‑адресов и 100 URL‑адресов, которые запрашиваются наиболее часто.

    Минимальное значение: 10

    Максимальное значение: 1000

    Значение по умолчанию: 100

    ПРИМЕЧАНИЕ:
    • Статистика IP‑адресов и статистика выборки URL‑адресов кэшируются на основе времени доступа. Если количество кэшированных записей достигает порога, настроенного с помощью flowcontrol.statics.threshold, самые ранние записи будут удалены.
    • При выборке URL‑адресов путь доступа уникально идентифицируется по хэшу URL.

    flowcontrol.statics.sample_frequency

    Целое

    Частота выборки пути. Если этот параметр установлен в 100, образцы собираются из каждых 100 запросов.

    Минимальное значение: 50

    Значение по умолчанию: 100

    Note

    Если все параметры установлены в null, они будут восстановлены до значений по умолчанию.

  2. Выполните следующую команду, чтобы отключить выборку запросов:
    PUT /_cluster/settings
    {
    "persistent": {
    "flowcontrol.statics.enabled": false
    }
    }

Enable One-Click Traffic Blocking

  1. Выполните следующую команду, чтобы включить one-click traffic blocking:
    PUT /_cluster/settings
    {
    "persistent": {
    "flowcontrol.break.enabled": true
    }
    }
  2. Выполните следующую команду, чтобы отключить one-click traffic blocking:
    PUT /_cluster/settings
    {
    "persistent": {
    "flowcontrol.break.enabled": false
    }
    }

Просмотр информации о контроле потока

  • Проверьте статус контроля потока всех узлов.
    GET /_nodes/stats/filter
  • Просмотрите статус контроля потока конкретного узла.
    GET /_nodes/{nodeId}/stats/filter

    {nodeId} указывает ID узла, который вы хотите проверить.

Пример ответа:

Note

В ответе информация каждого узла разделена. Поле http фиксирует количество одновременных соединений и новых соединений. memory фиксирует статистику контроля потока памяти. Поле ip_address фиксирует последние IP-адреса клиентов, к которым обращались недавно. Поле url_sample фиксирует последние URL, которые запрашивались наиболее часто. Поле cpu фиксирует статистику контроля потока CPU.

{
"_nodes" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"cluster_name" : "css-flowcontroller",
"nodes" : {
"ElBRNCMbTj6L1C-Wke-Dnw" : {
"name" : "css-flowcontroller-ess-esn-1-1",
"host" : "10.0.0.133",
"timestamp" : 1613979513747,
"flow_control" : {
"transport" : {
"concurrent_req" : 0,
"rejected_concurrent" : 0,
"rejected_new" : 0,
"rejected_deny" : 0
},
"http" : {
"concurrent_req" : 0,
"rejected_concurrent" : 0,
"rejected_new" : 0,
"rejected_deny" : 0
},
"memory" : {
"memory_allow" : 41,
"memory_rejected" : 0
},
"cpu": {
"rejected_cpu" : 0
}
"ip_address" : [
{
"ip" : "/10.0.0.198",
"count" : 453
},
{
"ip" : "/198.19.49.1",
"count" : 42
}
],
"url_sample" : [
{
"url" : "/*/_search?pretty=true",
"method" : "GET",
"remote_address" : "/10.0.0.198:16763",
"count" : 1
}
]
}
}
}

Таблица 6 Параметры ответа

Параметр

Описание

concurrent_req

Количество TCP‑соединений узла, которое фиксируется независимо от того, включено ли управление потоком. Это значение аналогично значению current_open API GET /_nodes/stats/http, но меньше, поскольку IP‑адреса из белого списка и внутренние IP‑адреса узла не учитываются.

rejected_concurrent

Количество одновременных соединений, отклонённых во время управления потоком HTTP. Отключение управления потоком HTTP не очищает эту запись.

rejected_new

Количество новых соединений, отклонённых во время управления потоком HTTP. Отключение управления потоком HTTP не очищает эту запись.

rejected_deny

Количество запросов, отклонённых на основе чёрного списка во время управления потоком HTTP. Отключение управления потоком HTTP не очищает эту запись.

memory_allow

Количество разрешённых запросов во время управления потоком памяти. Этот параметр действует, когда управление потоком памяти включено, и его значение не очищается после отключения управления потоком памяти. Запросы из путей, указанных в белом списке allow_path, не фиксируются. Если allow_path установлен в **, запросы не фиксируются.

memory_rejected

Количество отклонённых запросов во время управления потоком памяти. Этот параметр действует, когда управление потоком памяти включено, и его значение не очищается после отключения управления потоком памяти. Запросы из путей, указанных в белом списке allow_path, не фиксируются. Если allow_path установлен в **, запросы не фиксируются.

rejected_cpu

Количество запросов, отклонённых, когда превышен порог управления потоком CPU. Этот параметр действует, когда управление потоком CPU включено, и его значение не очищается после отключения управления потоком CPU.

ip_address

IP-адреса и количество запросов. Для получения подробной информации см. Table 7Table 7.

url_sample

Отбор путей запросов. Количество URL‑ов запроса собирается в соответствии с настроенным временем и интервалом выборки. Для получения подробной информации см. Table 8.

Table 7 ip_address

Параметр

Описание

ip

IP-адрес источника для доступа к узлу.

method

Количество запросов доступа с IP-адреса.

Table 8 url_sample

Параметр

Описание

url

Request URL

method

Метод, соответствующий пути запроса

remote_address

IP-адрес источника и номер порта в запросе

count

Сколько раз путь отбирается

Включение и просмотр журналов доступа

  1. Выполните следующую команду, чтобы включить журналирование доступа:
    • Включить журналирование доступа для всех узлов в кластере.
      PUT /_access_log?duration_limit=30s&capacity_limit=1mb
    • Включить журналирование доступа для указанного узла в кластере.
      PUT /_access_log/{nodeId}?duration_limit=30s&capacity_limit=1mb

      {nodeId} указывает идентификатор узла.

    Table 9 Элементы конфигурации для настройки журналирования доступа

    Элемент конфигурации

    Тип

    Описание

    duration_limit

    String

    Максимальная продолжительность записей журнала доступа. Когда эта продолжительность достигается, запись прекращается.

    Диапазон значений: от 10 до 120

    Единица измерения: s

    Значение по умолчанию: 30

    capacity_limit

    String

    Максимальный размер памяти для записи журналов доступа. Когда размер журнала доступа достигает этого значения, запись журнала доступа прекращается.

    Диапазон значений: от 1 до 5

    Единица измерения: MB

    Значение по умолчанию: 1

    Note
    • Запись доступа прекращается, когда достигается duration_limit или capacity_limit.
    • Если все параметры установлены в null, они будут восстановлены к их значениям по умолчанию.
  2. Выполните следующую команду для проверки журналов доступа:
    • API для проверки журналов доступа всех узлов в кластере
      GET /_access_log
    • API для проверки журналов доступа указанного узла в кластере
      GET /_access_log/{nodeId}

      {nodeId} указывает идентификатор узла.

    Пример ответа:

    {
    "_nodes" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
    },
    "cluster_name" : "css-flowcontroller",
    "nodes" : {
    "8x-ZHu-wTemBQwpcGivFKg" : {
    "name" : "css-flowcontroller-ess-esn-1-1",
    "host" : "10.0.0.98",
    "count" : 2,
    "access" : [
    {
    "time" : "2021-02-23 02:09:50",
    "remote_address" : "/10.0.0.98:28191",
    "url" : "/_access/security/log?pretty",
    "method" : "GET",
    "content" : ""
    },
    {
    "time" : "2021-02-23 02:09:52",
    "remote_address" : "/10.0.0.98:28193",
    "url" : "/_access/security/log?pretty",
    "method" : "GET",
    "content" : ""
    }
    ]
    }
    }
    }
    Table 10 Параметры ответа

    Параметр

    Описание

    name

    Имя узла

    host

    IP-адрес узла

    count

    Количество запросов доступа к узлам за статистический период

    access

    Подробная информация о запросах доступа к узлам за статистический период. Для подробностей см. Table 11.

    Table 11 access

    Parameter

    Description

    time

    Время запроса

    remote_address

    IP-адрес источника и номер порта в запросе

    url

    Исходный URL запроса

    method

    Метод, соответствующий пути запроса

    content

    Содержимое запроса

  3. Выполните следующие команды для удаления журналов доступа.

    API для удаления журналов доступа со всех узлов:

    DELETE /_access_log

Включение журналирования доступа в файлах

Обычно вы записываете журналы доступа в файлы для обнаружения неисправностей. После устранения неисправностей их следует отключить.

  1. Выполните следующую команду для включения журналирования доступа в файлах:
    PUT /_cluster/settings
    {
    "persistent": {
    "flowcontrol.log.file.enabled": true
    }
    }
    Table 12 Элементы конфигурации для включения журналирования доступа в файлах

    Параметр

    Тип

    Описание

    flowcontrol.log.file.enabled

    Boolean

    Записывать ли детали каждого запроса в файл журнала доступа. Имя файла журнала доступа: Cluster name_access_log.log. Этот файл можно просматривать только через функцию резервного копирования журналов.

    Значение может быть:

    • true
    • false (значение по умолчанию)

  2. Выполните следующую команду, чтобы отключить логирование доступа в файлах:
    PUT /_cluster/settings
    {
    "persistent": {
    "flowcontrol.log.file.enabled": false
    }
    }

Включение CPU Flow Control

  1. Выполните следующую команду, чтобы включить CPU flow control:
    PUT /_cluster/settings
    {
    "persistent": {
    "flowcontrol.cpu.enabled": true,
    "flowcontrol.cpu.percent_limit": 80,
    "flowcontrol.cpu.allow_path": ["index/_search"]
    }
    }
    Table 13 Элементы конфигурации для настройки логирования доступа

    Элемент конфигурации

    Тип

    Описание

    flowcontrol.cpu.enabled

    Boolean

    Нужно ли включать CPU flow control.

    Значение может быть:

    • true
    • false (значение по умолчанию)

    flowcontrol.cpu.percent_limit

    Целое

    Максимальное использование CPU (%) узлом до срабатывания flow control.

    Значение по умолчанию: 90

    flowcontrol.cpu.allow_path

    List<String>

    Белый список путей для CPU flow control.

    Пути, указанные с помощью этого параметра, освобождаются от CPU flow control. По умолчанию запросы API, контролируемые кластером, освобождены от CPU flow control. Это предотвращает сбой запросов информации о кластере, когда использование CPU достигает порога.

    Пример:

    • "flowcontrol.memory.allow_path": "/index/_search",
    • "flowcontrol.memory.allow_path": "/index*/_search",
    • "flowcontrol.memory.allow_path": ["/index/_search", "/index1/_bulk"],

    Можно настроить не более 10 путей. Путь может содержать до 32 символов.

    Значение по умолчанию — null.

    Note

    Если все параметры установлены в null, они будут восстановлены к их значениям по умолчанию.

  2. Выполните следующую команду, чтобы отключить CPU flow control:
    PUT /_cluster/settings
    {
    "persistent": {
    "flowcontrol.cpu.enabled": false
    }
    }