Настройте политики управления потоком для вашего кластера Elasticsearch как во входящем, так и в исходящем направлениях, обеспечивая стабильность кластера за счёт защиты от аномального трафика.
Кластер Elasticsearch может быть перегружен из‑за всплесков трафика, вредоносных запросов и внутренней конкуренции за ресурсы, что может привести к отказу узлов. С помощью таких политик, как ограничение клиентских запросов, обратное давление записи и анализ шаблонов трафика, управление потоком обеспечивает правильное распределение ресурсов, тем самым защищая кластеры от перегрузки. Рассматриваются следующие сценарии:
Policy | How It Works | Details |
|---|---|---|
HTTP/HTTPS flow control |
| |
Memory flow control | Memory flow control ограничивает пути запросов на основе использования кучи памяти. Вы можете настроить whitelist для Memory flow control, глобальный порог использования памяти и пороги кучи памяти для отдельных путей. Глобальный порог Memory flow control имеет приоритет над порогом памяти отдельного пути. Пути, включённые в whitelist, освобождаются от Memory flow control. | |
Global path whitelist для flow control | При необходимости вы можете настроить Global path whitelist для flow control, когда требуется использовать пользовательские plug-ins. | |
Request sampling | Request sampling может фиксировать количество запросов доступа от client IP addresses и пути запросов от отобранных пользователей. На основе статистики вы можете идентифицировать и анализировать трафик доступа по client IP addresses и путям запросов. | |
One-click traffic blocking | One-click traffic blocking блокирует все client соединения с узлом. Однако это не включает соединения для доступа к Kibana или Elasticsearch monitor APIs. | |
Flow control | Управление потоком предоставляет отдельный API для проверки статистики трафика и фиксирует количество вызовов API. Вы можете оценить порог управления потоком и проанализировать нагрузку кластера на основе этой статистики. | |
Логирование доступа | Логи доступа фиксируют URL‑адреса и тела HTTP/HTTPS запросов, полученных узлами за определённый период времени. Вы можете проанализировать текущую нагрузку трафика на основе логов доступа. | |
Логирование доступа в файлах | Любой доступ к кластеру записывается в файл {Cluster name_access_log.log}. Вы можете использовать функцию резервного копирования логов для просмотра подробных логов доступа в OBS. | |
Управление потоком CPU | Вы можете настроить порог использования CPU узла, чтобы ограничить входящий трафик для каждого узла. |
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}}
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 |
Если все параметры установлены в null, они будут восстановлены до значений по умолчанию.
PUT /_cluster/settings{"persistent": {"flowcontrol.http.enabled": false}}
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%"}}}}
Элемент конфигурации | Тип | Описание |
|---|---|---|
flowcontrol.memory.enabled | Boolean | Определяет, включить ли управление потоком памяти. Эта функция отключена по умолчанию. Включение управления потоком памяти может незначительно повлиять на производительность узла. Значение: true или false Значение по умолчанию: false |
flowcontrol.memory.allow_path | List<String> | Белый список путей запросов для управления потоком памяти. Пути, включённые в белый список, освобождаются от управления потоком памяти. Поддерживаются символы подстановки. По умолчанию запросы API, контролируемые кластером, освобождены от управления потоком памяти. Это предотвращает сбой запросов информации о кластере при достижении порога использования памяти. Пример:
Можно настроить максимум 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% |
Если все параметры установлены в null, они будут восстановлены к значениям по умолчанию.
Перед отключением контроля потока памяти необходимо удалить конфигурацию контроля потока памяти для отдельного пути запроса.
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}}
Выполните следующую команду, чтобы добавить глобальный белый список путей для контроля потока:
Элемент конфигурации | Тип | Описание |
|---|---|---|
flowcontrol.path.white_list | List<String> | Пути, освобожденные от управления потоком. Эти пути не затрагиваются управлением потоком памяти, управлением потоком CPU или блокировкой одним щелчком; но находятся под управлением потока на основе IP-адреса. Можно настроить не более 10 путей. Путь может содержать до 32 символов. Значение по умолчанию — null. ПРИМЕЧАНИЕ: Рекомендуется не настраивать этот параметр, если он не требуется плагинами. |
Если все параметры установлены в null, они будут восстановлены до значений по умолчанию.
PUT /_cluster/settings{"persistent": {"flowcontrol.statics.enabled": true,"flowcontrol.statics.threshold": 100,"flowcontrol.statics.sample_frequency": 50}}
Элемент конфигурации | Тип | Описание |
|---|---|---|
flowcontrol.statics.enabled | Boolean | Определяет, включать ли выборку запросов. Выборка запросов может влиять на производительность узла. Значение: true or false Значение по умолчанию: false |
flowcontrol.statics.threshold | Integer | Количество недавних запросов доступа, для которых собирается статистика. Значение 100 указывает, что статистика будет собираться для 100 IP‑адресов и 100 URL‑адресов, которые запрашиваются наиболее часто. Минимальное значение: 10 Максимальное значение: 1000 Значение по умолчанию: 100 ПРИМЕЧАНИЕ:
|
flowcontrol.statics.sample_frequency | Целое | Частота выборки пути. Если этот параметр установлен в 100, образцы собираются из каждых 100 запросов. Минимальное значение: 50 Значение по умолчанию: 100 |
Если все параметры установлены в null, они будут восстановлены до значений по умолчанию.
PUT /_cluster/settings{"persistent": {"flowcontrol.statics.enabled": false}}
PUT /_cluster/settings{"persistent": {"flowcontrol.break.enabled": true}}
PUT /_cluster/settings{"persistent": {"flowcontrol.break.enabled": false}}
GET /_nodes/stats/filter
GET /_nodes/{nodeId}/stats/filter
{nodeId} указывает ID узла, который вы хотите проверить.
Пример ответа: В ответе информация каждого узла разделена. Поле http фиксирует количество одновременных соединений и новых соединений. memory фиксирует статистику контроля потока памяти. Поле ip_address фиксирует последние IP-адреса клиентов, к которым обращались недавно. Поле url_sample фиксирует последние URL, которые запрашивались наиболее часто. Поле cpu фиксирует статистику контроля потока CPU.
Параметр | Описание |
|---|---|
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. |
Параметр | Описание |
|---|---|
ip | IP-адрес источника для доступа к узлу. |
method | Количество запросов доступа с IP-адреса. |
Параметр | Описание |
|---|---|
url | Request URL |
method | Метод, соответствующий пути запроса |
remote_address | IP-адрес источника и номер порта в запросе |
count | Сколько раз путь отбирается |
PUT /_access_log?duration_limit=30s&capacity_limit=1mb
PUT /_access_log/{nodeId}?duration_limit=30s&capacity_limit=1mb
{nodeId} указывает идентификатор узла.
Элемент конфигурации | Тип | Описание |
|---|---|---|
duration_limit | String | Максимальная продолжительность записей журнала доступа. Когда эта продолжительность достигается, запись прекращается. Диапазон значений: от 10 до 120 Единица измерения: s Значение по умолчанию: 30 |
capacity_limit | String | Максимальный размер памяти для записи журналов доступа. Когда размер журнала доступа достигает этого значения, запись журнала доступа прекращается. Диапазон значений: от 1 до 5 Единица измерения: MB Значение по умолчанию: 1 |
GET /_access_log
GET /_access_log/{nodeId}
{nodeId} указывает идентификатор узла.
Пример ответа:
Параметр | Описание |
|---|---|
name | Имя узла |
host | IP-адрес узла |
count | Количество запросов доступа к узлам за статистический период |
access | Подробная информация о запросах доступа к узлам за статистический период. Для подробностей см. Table 11. |
Parameter | Description |
|---|---|
time | Время запроса |
remote_address | IP-адрес источника и номер порта в запросе |
url | Исходный URL запроса |
method | Метод, соответствующий пути запроса |
content | Содержимое запроса |
API для удаления журналов доступа со всех узлов:
Обычно вы записываете журналы доступа в файлы для обнаружения неисправностей. После устранения неисправностей их следует отключить.
PUT /_cluster/settings{"persistent": {"flowcontrol.log.file.enabled": true}}
Параметр | Тип | Описание |
|---|---|---|
flowcontrol.log.file.enabled | Boolean | Записывать ли детали каждого запроса в файл журнала доступа. Имя файла журнала доступа: Cluster name_access_log.log. Этот файл можно просматривать только через функцию резервного копирования журналов. Значение может быть: |
PUT /_cluster/settings{"persistent": {"flowcontrol.log.file.enabled": false}}
PUT /_cluster/settings{"persistent": {"flowcontrol.cpu.enabled": true,"flowcontrol.cpu.percent_limit": 80,"flowcontrol.cpu.allow_path": ["index/_search"]}}
Элемент конфигурации | Тип | Описание |
|---|---|---|
flowcontrol.cpu.enabled | Boolean | Нужно ли включать CPU flow control. Значение может быть: |
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 достигает порога. Пример:
Можно настроить не более 10 путей. Путь может содержать до 32 символов. Значение по умолчанию — null. |
Если все параметры установлены в null, они будут восстановлены к их значениям по умолчанию.
PUT /_cluster/settings{"persistent": {"flowcontrol.cpu.enabled": false}}