Настройте политики управления потоком для вашего Elasticsearch кластера как во входящих, так и в исходящих направлениях, обеспечивая стабильность кластера за счёт защиты от аномального трафика.
Elasticsearch кластер может перегрузиться из‑за всплесков трафика, вредоносных запросов и внутренней конкуренции за ресурсы, что может даже привести к отказам узлов. С помощью политик, таких как ограничение запросов клиентов, обратное давление записи и анализ шаблонов трафика, управление потоком обеспечивает правильное распределение ресурсов, тем самым защищая кластеры от перегрузки. Он охватывает следующие сценарии:
Политика | Как это работает | Подробности |
|---|---|---|
HTTP/HTTPS контроль потока |
| |
Контроль потока памяти | Контроль потока памяти ограничивает пути запросов на основе использования кучи памяти. Вы можете настроить белый список для контроля потока памяти, глобальный порог использования памяти и пороги кучи памяти для отдельных путей. Глобальный порог контроля потока памяти имеет приоритет над порогом памяти отдельного пути. Пути, находящиеся в белом списке, освобождаются от контроля потока памяти. | |
Глобальный белый список путей для управления потоками | Вы можете при необходимости настроить глобальный белый список путей для управления потоками, когда требуется использовать пользовательские плагины. | |
Сэмплирование запросов | Сэмплирование запросов может фиксировать количество запросов доступа от IP‑адресов клиентов и пути запросов от отобранных пользователей. На основе статистики вы можете идентифицировать и анализировать трафик доступа по IP‑адресам клиентов и путям запросов. | |
Блокировка трафика в один клик | Блокировка трафика в один клик блокирует все клиентские соединения к узлу. При этом соединения для доступа к Kibana или API мониторинга Elasticsearch не включаются. | |
Управление потоками | Управление потоками предоставляет независимый API для проверки статистики трафика и фиксирует количество вызовов API. Вы можете оценивать порог управления потоками и анализировать нагрузку кластера на основе этой статистики. | |
Ведение журнала доступа | Журналы доступа записывают URL-адреса и тела запросов HTTP/HTTPS, полученных узлами за определённый период времени. Вы можете анализировать текущую нагрузку трафика на основе журналов доступа. | |
Ведение журнала доступа в файлах | Любой доступ к кластеру записывается в {Имя кластера_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}}
Элемент конфигурации | Тип | Описание |
|---|---|---|
flowcontrol.http.enabled | Boolean | Включать ли управление потоком HTTP/HTTPS. Управление потоком HTTP/HTTPS отключено по умолчанию. Включение может повлиять на производительность доступа к узлу. Значение: true или false Значение по умолчанию: false |
flowcontrol.http.allow | List<String> | Белый список IP-адресов. Он может содержать несколько IP-адресов и маски подсети, либо списки IP-адресов. Используйте запятые (,) для разделения разных элементов. Пример: 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-адресов. Он может содержать несколько IP-адресов и масок подсети, или списки IP-адресов. Используйте запятые (,) для разделения разных элементов. Значение по умолчанию — null. |
flowcontrol.http.concurrent | Integer | Maximum concurrent HTTP/HTTPS connections. Значение по умолчанию: число доступных ядер на узле × 600. |
flowcontrol.http.newconnect | Integer | Maximum new connections that can be created for HTTP/HTTPS requests per second. Значение по умолчанию: число доступных ядер на узле × 200. |
flowcontrol.http.warmup_period | Integer | Время, необходимое для того, чтобы скорость установки HTTP/HTTPS‑соединения достигла максимума. If 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 не установлен, это указывает, что все пути, кроме путей в whitelist, находятся под контролем. whitelist имеет приоритет над правилом единственного пути. Если путь указан в обоих 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 | Порог использования кучи памяти для путей запросов. Если использование кучи памяти превышает порог, будет запущено управление потоком. Диапазон значений: 0–100% Значение по умолчанию: 90% |
Если все параметры установлены в null, они будут восстановлены к их значениям по умолчанию.
Перед отключением управления потоком памяти необходимо удалить конфигурацию управления потоком памяти для пути per-request.
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"}}
Элемент конфигурации | Тип | Описание |
|---|---|---|
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 или false Значение по умолчанию: false |
flowcontrol.statics.threshold | Целое | Количество недавних запросов доступа, статистика которых собирается. Значение 100 указывает, что статистика будет собираться для 100 IP-адресов и 100 URL-адресов, которые наиболее часто запрашиваются. Минимальное значение: 10 Максимальное значение: 1000 Значение по умолчанию: 100 NOTE:
|
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 узла, который вы хотите проверить.
Пример ответа:
В ответе информация каждого узла разделена. The http поле фиксирует количество одновременных соединений и новых соединений. The memory фиксирует статистику управления потоком памяти. The ip_address поле фиксирует последние IP-адреса клиентов, к которым обращались недавно. The url_sample поле фиксирует последние URL-адреса, которые запрашивались наиболее часто. The 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}]}}}
Параметр | Описание |
|---|---|
concurrent_req | Количество TCP‑соединений узла, которое фиксируется независимо от того, включено ли управление потоком. Это значение похоже на значение current_open из GET /_nodes/stats/http API, но меньше, потому что 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 | |
url_sample | Отбор путей запросов. Количество URL‑адресов запроса собирается в соответствии с настроенным временем и интервалом отбора. Для получения подробностей см Table 8. |
Параметр | Описание |
|---|---|
ip | IP‑адрес источника для доступа к узлу. |
метод | Количество запросов доступа с IP‑адреса. |
Параметр | Описание |
|---|---|
url | Запрос URL |
метод | Метод, соответствующий пути запроса |
remote_address | IP-адрес источника и номер порта в запросе |
количество | Сколько раз путь отбирается |
PUT /_access_log?duration_limit=30s&capacity_limit=1mb
PUT /_access_log/{nodeId}?duration_limit=30s&capacity_limit=1mb
{nodeId} указывает ID узла.
Элемент конфигурации | Тип | Описание |
|---|---|---|
duration_limit | String | Максимальная длительность записей журнала доступа. Когда эта длительность достигается, запись останавливается. Диапазон значений: от 10 до 120 Единица измерения: s Значение по умолчанию: 30 |
capacity_limit | String | Максимальный размер памяти для записи журналов доступа. Когда размер журнала доступа достигает этого значения, ведение журнала доступа останавливается. Диапазон значений: от 1 до 5 Единица измерения: MB Значение по умолчанию: 1 |
GET /_access_log
GET /_access_log/{nodeId}
{nodeId} указывает ID узла.
Пример ответа:
{"_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" : ""}]}}}
Параметр | Описание |
|---|---|
имя | Имя узла |
хост | IP-адрес узла |
количество | Количество запросов доступа к узлам за статистический период |
доступ | Подробная информация о запросах доступа к узлам за статистический период Для подробностей см. Таблица 11. |
Параметр | Описание |
|---|---|
время | Время запроса |
remote_address | IP-адрес источника и номер порта в запросе |
url | Исходный URL запроса |
метод | Метод, соответствующий пути запроса |
содержание | Содержание запроса |
API для удаления журналов доступа со всех узлов:
DELETE /_access_log
Обычно вы записываете журналы доступа в файлы для поиска неисправностей. После устранения неисправностей следует отключить их.
PUT /_cluster/settings{"persistent": {"flowcontrol.log.file.enabled": true}}
Параметр | Тип | Описание |
|---|---|---|
flowcontrol.log.file.enabled | Boolean | Записывать ли детали каждого запроса в файл журнала доступа. Имя файла журнала — Кластер 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 | Булево | Включать ли управление потоком CPU. Значение может быть:
|
flowcontrol.cpu.percent_limit | Целое | Максимальное использование CPU (%) узлом до срабатывания управления потоком. Значение по умолчанию: 90 |
flowcontrol.cpu.allow_path | List<String> | Белый список путей для контроля CPU. Пути, указанные с помощью этого параметра, исключаются из контроля CPU. По умолчанию запросы API, контролируемые кластером, также исключаются из контроля CPU. Это предотвращает сбой запросов информации о кластере, когда использование CPU достигает порога. Пример:
Можно настроить максимум 10 путей. Путь может содержать до 32 символов. Значение по умолчанию — null. |
Если все параметры установлены в null, они будут восстановлены к значениям по умолчанию.
PUT /_cluster/settings{"persistent": {"flowcontrol.cpu.enabled": false}}