API управления задачами
API управления задачами — это новая функция, которая всё ещё считается бета-версией. API может изменяться несовместимым образом. Для получения статуса функции, см. #51628.
Возвращает информацию о задачах, которые в настоящее время выполняются в кластере.
Запрос
GET /_tasks/<task_id>
GET /_tasks
Предварительные условия
- Если в Elasticsearch включены функции безопасности, у вас должны быть права
monitorилиmanageправа кластера для использования этого API.
Описание
API управления задачами возвращает информацию о задачах, которые в настоящее время выполняются на одном или нескольких узлах кластера.
Параметры пути
-
<task_id> - (Необязательно, строка) Идентификатор задачи для возврата (
node_id:task_number).
Параметры запроса
-
actions -
(Необязательно, строка) Список действий через запятую или выражение с подстановкой для ограничения запроса.
Опустите этот параметр, чтобы вернуть все действия.
-
detailed - (Необязательно, логическое значение) Если
true, ответ включает подробную информацию о восстановлении фрагментов. По умолчаниюfalse. -
group_by -
(Необязательно, строка) Ключ, используемый для группировки задач в ответе.
Возможные значения:
-
nodes - (По умолчанию) Идентификатор узла
-
parents - Идентификатор родительской задачи
-
none - Не группировать задачи.
-
-
node_id - (Необязательно, строка) Список идентификаторов или имён узлов через запятую, используемых для ограничения возвращаемой информации.
-
parent_task_id -
(Необязательно, строка) Идентификатор родительской задачи, используемый для ограничения возвращаемой информации.
Для возврата всех задач опустите этот параметр или используйте значение
-1. -
master_timeout - (Необязательно, единицы измерения времени) Время ожидания соединения с узлом-мастером. Если ответ не получен до истечения времени ожидания, запрос завершается ошибкой. По умолчанию
30s. -
timeout - (Необязательно, единицы измерения времени) Время ожидания ответа. Если ответ не получен до истечения времени ожидания, запрос завершается ошибкой. По умолчанию
30s. -
wait_for_completion - (Необязательно, логическое значение) Если
true, запрос блокируется до завершения операции. По умолчаниюfalse.
Коды ответов
-
404(Отсутствующие ресурсы) - Если
<task_id>указан, но не найден, этот код указывает, что ресурсов, соответствующих запросу, нет.
Примеры
GET _tasks GET _tasks?nodes=nodeId1,nodeId2 GET _tasks?nodes=nodeId1,nodeId2&actions=cluster:*
| Получает все задачи, выполняющиеся в настоящее время на всех узлах кластера. | |
| Получает все задачи, выполняющиеся на узлах | |
| Получает все задачи, относящиеся к кластеру, выполняющиеся на узлах |
API возвращает следующий результат:
{
"nodes" : {
"oTUltX4IQMOUUVeiohTt8A" : {
"name" : "H5dfFeA",
"transport_address" : "127.0.0.1:9300",
"host" : "127.0.0.1",
"ip" : "127.0.0.1:9300",
"tasks" : {
"oTUltX4IQMOUUVeiohTt8A:124" : {
"node" : "oTUltX4IQMOUUVeiohTt8A",
"id" : 124,
"type" : "direct",
"action" : "cluster:monitor/tasks/lists[n]",
"start_time_in_millis" : 1458585884904,
"running_time_in_nanos" : 47402,
"cancellable" : false,
"parent_task_id" : "oTUltX4IQMOUUVeiohTt8A:123"
},
"oTUltX4IQMOUUVeiohTt8A:123" : {
"node" : "oTUltX4IQMOUUVeiohTt8A",
"id" : 123,
"type" : "transport",
"action" : "cluster:monitor/tasks/lists",
"start_time_in_millis" : 1458585884904,
"running_time_in_nanos" : 236042,
"cancellable" : false
}
}
}
}
} Получение информации о конкретной задаче
Также можно получить информацию о конкретной задаче. Следующий пример получает информацию о задаче oTUltX4IQMOUUVeiohTt8A:124:
GET _tasks/oTUltX4IQMOUUVeiohTt8A:124
Если задача не найдена, API возвращает 404.
Чтобы получить всех потомков конкретной задачи:
GET _tasks?parent_task_id=oTUltX4IQMOUUVeiohTt8A:123
Если родительская задача не найдена, API не возвращает 404.
Получение дополнительной информации о задачах
Вы также можете использовать параметр запроса detailed, чтобы получить больше информации о выполняемых задачах. Это полезно для различения задач, но выполняется дороже. Например, получение всех поисковых запросов с использованием параметра запроса detailed:
GET _tasks?actions=*search&detailed
API возвращает следующий результат:
{
"nodes" : {
"oTUltX4IQMOUUVeiohTt8A" : {
"name" : "H5dfFeA",
"transport_address" : "127.0.0.1:9300",
"host" : "127.0.0.1",
"ip" : "127.0.0.1:9300",
"tasks" : {
"oTUltX4IQMOUUVeiohTt8A:464" : {
"node" : "oTUltX4IQMOUUVeiohTt8A",
"id" : 464,
"type" : "transport",
"action" : "indices:data/read/search",
"description" : "indices[test], types[test], search_type[QUERY_THEN_FETCH], source[{\"query\":...}]",
"start_time_in_millis" : 1483478610008,
"running_time_in_nanos" : 13991383,
"cancellable" : true,
"cancelled" : false
}
}
}
}
} Новое поле description содержит текст, читаемый человеком, который идентифицирует конкретный запрос, выполняемый задачей, например, идентификацию поискового запроса, выполняемого задачей поиска, как в примере выше. Другие типы задач имеют различные описания, например, _reindex, у которого есть источник и место назначения, или _bulk, у которого просто есть количество запросов и индексы назначения. Многие запросы будут иметь только пустое описание, поскольку более подробная информация о запросе не всегда легко доступна или особенно полезна для идентификации запроса.
_tasks запросы с detailed также могут вернуть status. Это отчет о внутреннем состоянии задачи. Поэтому его формат варьируется в зависимости от задачи. Хотя мы стараемся поддерживать status для конкретной задачи согласованной с версией, это не всегда возможно, поскольку иногда мы меняем реализацию. В этом случае мы можем удалить поля из status для конкретного запроса, поэтому любая обработка вами статуса может нарушиться в небольших выпусках.
Ожидание завершения
API задач также можно использовать для ожидания завершения конкретной задачи. Следующий вызов будет ожидать 10 секунд или до завершения задачи с идентификатором oTUltX4IQMOUUVeiohTt8A:12345.
GET _tasks/oTUltX4IQMOUUVeiohTt8A:12345?wait_for_completion=true&timeout=10s
Вы также можете дождаться завершения всех задач определенных типов действий. Эта команда будет ждать завершения всех задач reindex:
GET _tasks?actions=*reindex&wait_for_completion=true&timeout=10s
Отмена задач
Если задача длительного выполнения поддерживает отмену, ее можно отменить с помощью API отмены задач. Следующий пример отменяет задачу oTUltX4IQMOUUVeiohTt8A:12345:
POST _tasks/oTUltX4IQMOUUVeiohTt8A:12345/_cancel
Команда отмены задач поддерживает те же параметры выбора задач, что и команда списка задач, поэтому можно отменять несколько задач одновременно. Например, следующая команда отменяет все задачи переиндексации, выполняющиеся на узлах nodeId1 и nodeId2.
POST _tasks/_cancel?nodes=nodeId1,nodeId2&actions=*reindex
Задача может продолжать выполняться некоторое время после отмены, поскольку она может не иметь возможности безопасно остановить свою текущую активность сразу, или потому, что Elasticsearch должен завершить свою работу над другими задачами, прежде чем обработать отмену. API списка задач продолжит отображать эти отмененные задачи до их завершения. Флаг cancelled в ответе на API списка задач указывает, что команда отмены была обработана, и задача остановится как можно скорее. Для устранения неполадок, почему отмененная задача не завершается быстро, используйте API списка задач с параметром ?detailed для определения других задач, которые система выполняет, а также используйте API «горячие потоки узлов» узлов для получения подробной информации о работе системы вместо завершения отмененной задачи.
Группировка задач
Списки задач, возвращаемые командами API задач, можно сгруппировать по узлам (по умолчанию) или по родительским задачам с помощью параметра group_by. Следующая команда изменит группировку на родительские задачи:
GET _tasks?group_by=parents
Группировку можно отключить, указав none в качестве параметра group_by:
GET _tasks?group_by=none
Идентификация выполняемых задач
Заголовок X-Opaque-Id, при указании в заголовке HTTP-запроса, будет возвращен также в заголовке ответа, а также в поле headers для информации о задаче. Это позволяет отслеживать определенные вызовы или связывать определенные задачи с клиентом, который их запустил:
curl -i -H "X-Opaque-Id: 123456" "http://localhost:9200/_tasks?group_by=parents"
API возвращает следующий результат:
HTTP/1.1 200 OK
X-Opaque-Id: 123456
content-type: application/json; charset=UTF-8
content-length: 831
{
"tasks" : {
"u5lcZHqcQhu-rUoFaqDphA:45" : {
"node" : "u5lcZHqcQhu-rUoFaqDphA",
"id" : 45,
"type" : "transport",
"action" : "cluster:monitor/tasks/lists",
"start_time_in_millis" : 1513823752749,
"running_time_in_nanos" : 293139,
"cancellable" : false,
"headers" : {
"X-Opaque-Id" : "123456"
},
"children" : [
{
"node" : "u5lcZHqcQhu-rUoFaqDphA",
"id" : 46,
"type" : "direct",
"action" : "cluster:monitor/tasks/lists[n]",
"start_time_in_millis" : 1513823752750,
"running_time_in_nanos" : 92133,
"cancellable" : false,
"parent_task_id" : "u5lcZHqcQhu-rUoFaqDphA:45",
"headers" : {
"X-Opaque-Id" : "123456"
}
}
]
}
}
} | id как часть заголовка ответа | |
| id для задач, инициированных REST-запросом | |
| потомок задачи, инициированной REST-запросом |
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/tasks.html