Поделиться через


Мониторинг решений пакетной службы путем подсчета задач и узлов с определенным состоянием

Чтобы отслеживать крупномасштабные решения пакетной службы 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 и других поддерживаемых языков.

Дальнейшие действия