Мониторинг решений пакетной службы путем подсчета задач и узлов с определенным состоянием
Чтобы отслеживать крупномасштабные решения пакетной службы Azure и управлять ими, может потребоваться определить количество ресурсов в различных состояниях. Пакетная служба Azure предоставляет эффективные операции для получения счетчиков для задач и вычислительных узлов пакетной службы. Эти операции можно использовать вместо потенциально времязатратных запросов на вывод списка, которые возвращают подробные сведения о больших коллекциях задач или узлов.
Операция Получить количество задач позволяет статистически подсчитать число активных, выполняющихся и завершенных задач в задании, а также успешно и неудачно выполненных задач. Узнав количество задач в каждом из состояний, вы можете легко отобразить ход выполнения задания пользователю или обнаружить непредвиденные задержки или ошибки, которые могут повлиять на задание.
Перечислить число узлов пула возвращает число выделенных и точечных вычислительных узлов в каждом пуле, находящихся в различных состояниях: создание, простой, вне сети, замещение, перезагрузка, повторное создание образа, запуск и другие. Подсчитав число узлов в каждом из состояний, можно определить, когда вы получите достаточно вычислительных ресурсов для выполнения заданий, а также выявлять потенциальные проблемы с пулами.
Обратите внимание, что иногда числа, возвращаемые этими операциями, могут быть неактуальными. Если необходимо обеспечить точность подсчета, используйте запрос списка для подсчета этих ресурсов. Запросы списка также позволяют получить сведений о других ресурсах пакетной службы, таких как приложения. Дополнительные сведения о применении фильтров к запросам перечисления см. в разделе Эффективное создание запросов на вывод списка ресурсов пакетной службы.
Подсчет состояний задач
Операция Get Task Counts подсчитывает задачи по следующим состояниям:
-
Активна — задача находится в очереди и может быть запущена, но еще не назначена вычислительному узлу. Задача также является
active
, если она зависит от родительской задачи, которая еще не завершена. -
Выполняется — задача назначена вычислительному узлу, но еще не завершена. Задача считается
running
, если она находится в состоянииpreparing
илиrunning
, как указывает операция Получить информацию о задаче. - Завершена — задача, которую больше невозможно запустить, так как она завершились успешно или неудачно и исчерпала предел повторных попыток.
-
Успешно выполнена — задача, результатом выполнения которой является состояние
success
. Пакетная служба определяет, успешно ли выполнена задача, проверяя свойствоTaskExecutionResult
свойства executionInfo. -
Не выполнена — задача, результатом выполнения которой является состояние
failure
.
В следующем примере кода .NET показано, как получить число задач по состоянию.
var taskCounts = await batchClient.JobOperations.GetJobTaskCountsAsync("job-1");
Console.WriteLine("Task count in active state: {0}", taskCounts.Active);
Console.WriteLine("Task count in preparing or running state: {0}", taskCounts.Running);
Console.WriteLine("Task count in completed state: {0}", taskCounts.Completed);
Console.WriteLine("Succeeded task count: {0}", taskCounts.Succeeded);
Console.WriteLine("Failed task count: {0}", taskCounts.Failed);
Чтобы получить количество задач для задания, можно использовать аналогичный шаблон для REST и других поддерживаемых языков.
Подсчет состояний узлов
Операция List Pool Node Counts подсчитывает число вычислительных узлов с указанными ниже состояниями в каждом пуле. Для выделенных и точечных узлов в каждом пуле предоставляются отдельные статистические счетчики.
- Creating — выделенная в Azure виртуальная машина, которая еще не запущена для присоединения к пулу.
- Idle — доступный вычислительный узел, который сейчас не выполняет никакую задачу.
- LeavingPool — узел, который покидает пул, либо потому что пользователь явно удалил его, либо потому что выполняется изменение размера или автомасштабирование пула (в сторону уменьшения).
- Offline — узел, который пакетная служба не может использовать для планирования новых задач.
-
Preempted — точечный узел, который был удален из пула, так как служба Azure освободила виртуальную машину. Узел
preempted
можно повторно инициализировать, если доступна емкость точечной виртуальной машины для замены. - Rebooting — перезапускаемый узел.
- Reimaging — узел, на котором переустанавливается операционная система.
- Running — узел, на котором выполняется одна или несколько задач (кроме задачи запуска).
- Starting — узел, на котором запускается пакетная служба.
-
StartTaskFailed — узел, на котором задача запуска завершилась неудачно и исчерпала все повторные попытки, и для этой задачи запуска задано значение
waitForSuccess
. Этот узел невозможно использовать для выполнения задач. - Unknown — узел, который потерял связь с пакетной службой, и состояние которого неизвестно.
- Unusable — узел, который невозможно использовать для выполнения задачи из-за ошибок.
-
WaitingForStartTask — узел, на котором начала выполняться задача запуска, однако задано значение
waitForSuccess
и задача запуска не была завершена.
В следующем фрагменте кода C# показано, как перечислить количество узлов для всех пулов в текущей учетной записи:
foreach (var nodeCounts in batchClient.PoolOperations.ListPoolNodeCounts())
{
Console.WriteLine("Pool Id: {0}", nodeCounts.PoolId);
Console.WriteLine("Total dedicated node count: {0}", nodeCounts.Dedicated.Total);
// Get dedicated node counts in Idle and Offline states; you can get additional states.
Console.WriteLine("Dedicated node count in Idle state: {0}", nodeCounts.Dedicated.Idle);
Console.WriteLine("Dedicated node count in Offline state: {0}", nodeCounts.Dedicated.Offline);
Console.WriteLine("Total Spot node count: {0}", nodeCounts.LowPriority.Total);
// Get Spot node counts in Running and Preempted states; you can get additional states.
Console.WriteLine("Spot node count in Running state: {0}", nodeCounts.LowPriority.Running);
Console.WriteLine("Spot node count in Preempted state: {0}", nodeCounts.LowPriority.Preempted);
}
В следующем фрагменте кода C# показано, как перечислить количество узлов для заданного пула в текущей учетной записи.
foreach (var nodeCounts in batchClient.PoolOperations.ListPoolNodeCounts(new ODATADetailLevel(filterClause: "poolId eq 'testpool'")))
{
Console.WriteLine("Pool Id: {0}", nodeCounts.PoolId);
Console.WriteLine("Total dedicated node count: {0}", nodeCounts.Dedicated.Total);
// Get dedicated node counts in Idle and Offline states; you can get additional states.
Console.WriteLine("Dedicated node count in Idle state: {0}", nodeCounts.Dedicated.Idle);
Console.WriteLine("Dedicated node count in Offline state: {0}", nodeCounts.Dedicated.Offline);
Console.WriteLine("Total Spot node count: {0}", nodeCounts.LowPriority.Total);
// Get Spot node counts in Running and Preempted states; you can get additional states.
Console.WriteLine("Spot node count in Running state: {0}", nodeCounts.LowPriority.Running);
Console.WriteLine("Spot node count in Preempted state: {0}", nodeCounts.LowPriority.Preempted);
}
Чтобы получить количество узлов для пулов, можно использовать аналогичный шаблон для REST и других поддерживаемых языков.
Дальнейшие действия
- Узнайте подробнее о рабочем процессе и основных ресурсах пакетной службы, таких как пулы, узлы, задания и задачи.
- Сведения о применении фильтров к запросам, перечисляющим ресурсы пакетной службы, см. в разделе Эффективное создание запросов на вывод списка ресурсов пакетной службы.