Настройте политики управления потоком для вашего Elasticsearch кластера как во входящем, так и в исходящем направлениях, обеспечивая стабильность кластера за счёт защиты от аномального трафика.
Кластер Elasticsearch может быть перегружен из‑за всплесков трафика, вредоносных запросов и внутренней конкуренции за ресурсы, что может привести к сбоям узлов. С помощью таких политик, как ограничение запросов клиентов, обратное давление и анализ шаблонов трафика, управление потоком обеспечивает правильное распределение ресурсов, тем самым защищая кластеры от перегрузки. Это охватывает следующие сценарии:
Политика | Как это работает | Details |
|---|---|---|
HTTP/HTTPS управление потоком | Контролирует трафик доступа клиентов, используя чёрные и белые списки, верхний предел одновременных соединений и ограничение скорости новых попыток соединения.
Когда включён HTTP/HTTPS flow control, запросы от IP‑адресов из черного списка всегда отклоняются; для IP‑адресов из белого списка правила flow control не применяются; для остальных IP‑адресов, когда достигается либо concurrent connection limit, либо new connection limit, их запросы отклоняются. | |
Memory-based flow control | Когда использование heap memory превышает предопределённый порог (например, 80 %), система прекращает приём больших запросов, и запускается сборка мусора (GC) для освобождения памяти. Трафик записи ограничивается путем установки коэффициента backpressure (in_flight_factor) и максимальной задержки обработки запросов (max). Когда включён memory-based flow control, большие запросы могут задерживаться длительное время, если использование heap memory кластера превышает настроенный порог. | |
One-click traffic blocking | При срабатывании система немедленно разрывает все клиентские соединения, не включённые в белый список, за исключением соединений, используемых для доступа к Kibana или API O&M и мониторинга, с целью восстановления кластера. | |
Сборка и анализ статистики запросов | Записывает метрики запросов (например, bulk writes и queries) по IP‑адресу клиента и предоставляет их через statistics API для оценки нагрузки кластера и проактивного выявления аномальных шаблонов трафика. | |
Access logging | Записывает URL‑адреса и тела HTTP/HTTPS запросов для анализа нагрузки кластера и клиентских запросов. Журналы доступа также могут сохраняться в файлы (то есть сохраняться на диск) для упрощения устранения неполадок и анализа производительности. Включение ведения журнала доступа приводит к дополнительным затратам CPU и памяти, что может замедлить обработку запросов. |
Кластеры Elasticsearch 7.6.2 и 7.10.2, созданные после февраля 2023 г., поддерживают только Flow Control 2.0, тогда как кластеры, созданные ранее, поддерживают только Flow Control 1.0.
Войдите в Kibana и перейдите на страницу выполнения команд. Кластеры Elasticsearch поддерживают несколько методов доступа. В этом разделе Kibana используется в качестве примера для описания процедур выполнения.
Левая часть консоли представляет собой поле ввода команд, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть отображает результат выполнения.
Контролировать трафик доступа клиентов с помощью черных списков и белых списков, верхнего предела одновременных соединений и ограничения скорости новых попыток подключения, чтобы предотвратить перегрузку.
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}}
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
flowcontrol.http.enabled | Boolean | false | Включить или отключить управление потоком HTTP/HTTPS. При включении управление потоком будет выполняться на основе соответствующих настроек. Значение может быть:
|
flowcontrol.http.allow | List<String> | Null (no whitelist) | Белый список IP‑адресов клиентов или CIDR‑блоков, разрешённых для доступа к кластеру, поддерживает:
Setting this parameter to null restores the default value. |
flowcontrol.http.deny | List<String> | Null (no blacklist) | Чёрный список IP‑адресов клиентов или CIDR‑блоков, которым запрещён доступ к кластеру. Белый список имеет приоритет над чёрным списком. Чёрный список поддерживает следующее:
Установка этого параметра в null восстанавливает значение по умолчанию. |
flowcontrol.http.concurrent | Integer | Node vCPUs x 600 | Максимальное количество одновременных соединений HTTP/HTTPS, которые может обрабатывать узел. Минимальное значение: 10 Установка этого параметра в null восстанавливает значение по умолчанию. |
flowcontrol.http.newconnect | Integer | Node vCPUs x 200 | Максимальное количество новых соединений HTTP/HTTPS, которые могут быть созданы в секунду на узел. Минимальное значение: 10 Установка этого параметра в null восстанавливает значение по умолчанию. |
flowcontrol.http.warmup_period | Integer | 0 (нет периода грации до достижения полной ёмкости) | Период грации, в течение которого система постепенно увеличивает нагрузку от нулевого количества HTTP/HTTPS запросов до своей полной, максимальной ёмкости. Диапазон значений: 0–10000 Единица измерения: ms Например, если flowcontrol.http.newconnect установлен в 100 и flowcontrol.http.warmup_period установлен в 5000ms, системе требуется 5 секунд, чтобы достичь 100 новых соединений в секунду. Установка этого параметра в null восстанавливает значение по умолчанию. |
PUT /_cluster/settings{"persistent": {"flowcontrol.http.enabled": false}}
Включить ограничение записи, чтобы снизить риск исключений OOM, когда использование кучи памяти узлом превышает предопределённый порог.
PUT /_cluster/settings{"persistent": {"flowcontrol.memory.enabled": true,"flowcontrol.memory.heap_limit": "80%"}}
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
flowcontrol.memory.enabled | Boolean | true | Определяет, включено ли управление потоком на основе памяти. При включении используется мониторинг использования кучи памяти узла, устанавливается порог, и записи ограничиваются, когда достигается этот порог. Значение может быть: |
flowcontrol.memory.heap_limit | String | 90% (консервативный порог) | Порог использования кучи памяти узла. При превышении этого порога активируется механизм обратного давления. Диапазон значений: 10%–100%
На практике рекомендуется установить этот параметр на 80% или ниже, чтобы зарезервировать heap‑память для задач, не связанных с чтением, например, слияния сегментов. Установка этого параметра в null восстанавливает значение по умолчанию. |
flowcontrol.holding.in_flight_factor | Float | 1.0 (recommended) | Фактор обратного давления, который контролирует чувствительность memory‑based backpressure. Большее значение указывает на более мощное ограничение записи. Value range: ≥ 0.5 Этот параметр оценивает потенциальное влияние большого входящего запроса на heap‑память. Расчёт выполняется следующим образом: in_flight_factor x Request body size. Полученная оценка затем используется для применения memory‑based backpressure и ограничения пропускной способности. Установка этого параметра в null восстанавливает значение по умолчанию. |
flowcontrol.holding.max | TimeValue | 60s | Максимальная задержка обработки запросов, допускаемая до того, как запросы будут обрабатываться в соответствии с политикой, определённой параметром flowcontrol.holding.max_strategy. Value range: ≥ 15s Unit: секунда Как правило, вы должны настраивать этот параметр, исходя из настройки flowcontrol.holding.max_strategy.
Установка этого параметра в null восстанавливает значение по умолчанию. |
flowcontrol.holding.max_strategy | String | keep | Политика обработки или действие, предпринимаемое для запросов, задержанных дольше, чем flowcontrol.holding.max. Значение может быть: Установка этого параметра в null восстанавливает значение по умолчанию. |
flowcontrol.memory.once_free_max | Строка | 5% | Максимальный объём памяти (в виде процента от памяти узла), который flow control может освободить за один цикл освобождения. Этот параметр предотвращает чрезмерно агрессивное освобождение памяти, которое может привести к резкому всплеску запросов после снижения давления памяти. Диапазон значений: 1%–50% Установка этого параметра в null восстанавливает значение по умолчанию. |
flowcontrol.memory.nudges_gc | Boolean | true (рекомендовано) | Определяет, следует ли инициировать сборку мусора (GC) для освобождения памяти, когда давление записи слишком высоко. (Пул соединений backpressure проверяется каждую секунду. Давление записи считается высоким, если все существующие соединения заблокированы и новые запросы записи не могут быть приняты.) Значение может быть:
Установка этого параметра в null восстанавливает значение по умолчанию. |
PUT /_cluster/settings{"persistent": {"flowcontrol.memory.enabled": false}}
При срабатывании система немедленно разрывает все клиентские соединения, за исключением тех, которые используются для доступа к Kibana или API O&M и мониторинга, в попытке восстановить кластер.
PUT /_cluster/settings{"persistent": {"flowcontrol.break.enabled": true}}
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
flowcontrol.break.enabled | Boolean | false | Включает ли блокировку трафика одним щелчком (аналог circuit breaker). При включении система немедленно разрывает все клиентские соединения, за исключением соединений, используемых для доступа к Kibana или API O&M и мониторинга. Значение может быть:
|
PUT /_cluster/settings{"persistent": {"flowcontrol.break.enabled": false}}
Собирать метрики запросов по IP-адресу клиента, чтобы помочь выявлять аномальные шаблоны трафика.
PUT _cluster/settings{"transient": {"flowcontrol.log.access.enabled": true}}
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
flowcontrol.log.access.enabled | Boolean | false | Определяет, включена ли выборка статистики запросов, то есть собираются ли метрики запросов (например, массовые записи и запросы search/msearch) по IP-адресу клиента. Значение может быть: |
flowcontrol.log.access.count | Целое | 10 | Максимальное количество клиентских IP-адресов, отбираемых для выборки. Диапазон значений: 0–100 Установка этого параметра в null восстанавливает значение по умолчанию. |
GET /_nodes/stats/filter/v2
GET /_nodes/stats/filter/v2?detail
GET /_nodes/{node_id}/stats/filter/v2
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
node_id | Строка | N/A | Указывает один или несколько узлов кластера.
Вы можете выполнить следующую команду для получения ID узлов: |
Пример ответа:
Parameter | Description |
|---|---|
current_connect | Количество HTTP‑соединений с узлом, которое фиксируется независимо от того, включено ли управление потоком. Это значение эквивалентно значению current_open API GET /_nodes/stats/http. Оно отображает текущие клиентские соединения каждого узла. |
rejected_concurrent | Количество одновременных соединений, отклонённых во время управления потоком. Эта метрика доступна только когда flowcontrol.http.enabled установлена в true. Счётчик не будет сбрасываться при отключении управления потоком. |
rejected_rate | Количество новых соединений, отклонённых во время flow control. Этот показатель доступен только когда flowcontrol.http.enabled установлен в true. Счётчик не будет сбрасываться, когда flow control отключён. |
rejected_black | Количество новых соединений, отклонённых преднастроенным чёрным списком во время flow control. Этот показатель доступен только когда flowcontrol.http.enabled установлен в true. Счётчик не будет сбрасываться, когда flow control отключён. |
rejected_breaker | Количество новых соединений, отклонённых во время one-click traffic blocking. Этот показатель доступен только когда flowcontrol.break.enabled установлен в true. Счётчик не будет сбрасываться, когда one-click traffic blocking отключён. |
access_items | IP-адреса клиентов, недавно получивших доступ к кластеру. Количество отобранных IP-адресов клиентов определяется параметром flowcontrol.log.access.count. |
remote_address | IP-адреса и количество запросов. |
search_count | Количество раз, когда клиент обращался к базе данных с использованием _search и _msearch. |
bulk_count | Количество раз, когда клиент обращался к базе данных, используя _bulk. |
other_count | Количество раз, когда клиент обращался к базе данных, используя другие методы запросов. |
holding_requests | Количество соединений с текущим узлом, где записи приостановлены из‑за управления потоком. |
PUT /_cluster/settings{"persistent": {"flowcontrol.log.access.enabled": false}}
Когда Access Logging включён, система записывает URL‑адреса и тела запросов HTTP/HTTPS для анализа нагрузки кластера и запросов. Затем вы можете использовать результат для оптимизации производительности кластера.
PUT /_access_log?duration_limit=30s&capacity_limit=1mb
PUT /_access_log/{node_id}?duration_limit=30s&capacity_limit=1mb
Параметр | Тип | Default Value | Description |
|---|---|---|---|
duration_limit | String | 30 | Максимальная продолжительность записи доступа. Когда достигается этот предел, запись доступа прекращается. Value range: 10 to 120 Unit: s Установка этого параметра в null восстанавливает значение по умолчанию. Запись доступа прекращается, когда достигается duration_limit или capacity_limit. |
capacity_limit | String | 1 | Максимальный размер журнала доступа. Когда размер журнала доступа достигает этого предела, запись доступа прекращается. Value range: 1 to 5 Unit: MB Установка этого параметра в null восстанавливает значение по умолчанию. Access logging stops when either duration_limit or capacity_limit is reached. |
GET /_access_log
GET /_access_log/{node_id}
Пример ответа:
Параметр | Описание |
|---|---|
name | Имя узла |
host | IP-адрес узла |
count | Количество запросов доступа к узлу за статистический период |
access | Подробная информация о запросах доступа к узлам за статистический период |
время | Время запроса |
remote_address | IP-адрес источника и номер порта в запросе |
url | Исходный URL запроса |
method | Метод запроса |
content | Содержимое запроса. Если значение — пустая строка (""), тело запроса отсутствует. |
DELETE /_access_log
GET /_access_log
Журналы доступа могут сохраняться на диск для устранения неполадок и анализа. Используйте эту функцию умеренно, так как она может влиять на производительность кластера. Не забудьте отключить её сразу после решения проблемы.
PUT /_cluster/settings{"persistent": {"flowcontrol.log.file.enabled": true}}
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
flowcontrol.log.file.enabled | Boolean | false | Определяет, записывать ли журналы доступа в файлы. При включении журнал каждой запросa доступа записывается в файлы. Имя файла журнала: Cluster name_access_log.log. Вы можете просматривать этот файл только через функцию резервного копирования журналов. Подробную информацию о резервном копировании журналов см. в Enabling Log Backup. Значение может быть:
|
PUT /_cluster/settings{"persistent": {"flowcontrol.log.file.enabled": false}}