Supervisión de las soluciones de Batch realizando un recuento de las tareas y los nodos por estado

Para supervisar y administrar soluciones de Azure Batch a gran escala, es posible que deba determinar los recuentos de los recursos de varios estados. Azure Batch proporciona operaciones eficaces para obtener estos recuentos de las tareas y los nodos de ejecución de Batch. Puede usar estas operaciones en lugar de consultas de lista que es posible que tarden mucho para devolver información detallada sobre grandes colecciones de tareas o nodos.

  • Get Task Counts obtiene un recuento agregado de tareas activas, en ejecución y completadas, así como de tareas que se realizaron correctamente o no. Si cuenta las tareas en cada estado, podrá mostrar más fácilmente el progreso del trabajo a un usuario o detectar retrasos o errores inesperados que pueden afectar a la tarea.

  • List Pool Node Counts obtiene el número de nodos de ejecución de acceso puntual y dedicados en cada grupo que se encuentran en varios estados: creating, idle, offline, preempted, rebooting, reimaging, starting, etc. Al contar los nodos de cada estado, podrá determinar cuándo tiene los recursos de proceso adecuados para ejecutar sus tareas e identificar posibles problemas con los grupos.

Tenga en cuenta que, en ocasiones, es posible que los números devueltos por estas operaciones no estén actualizados. Si necesita asegurarse de que un recuento es preciso, use una consulta de lista para contar estos recursos. Las consultas de lista también permiten obtener información sobre otros recursos de Batch, tales como aplicaciones. Para más información sobre cómo aplicar filtros a las consultas de lista, consulte Creación de consultas para enumerar los recursos de Batch con eficacia.

Recuentos de estados de tareas

La operación Get Task Counts hace un recuento de las tareas por los estados siguientes:

  • Active: tarea que está en cola y se puede ejecutar, pero no está asignada actualmente a ningún nodo de ejecución. Una tarea también es active si depende de una tarea primaria que no se ha completado.
  • Running: tarea que se ha asignado a un nodo de ejecución, pero no se ha completado. Una tarea se cuenta como running cuando su estado es preparing o running, tal como indica la operación Obtener información sobre una tarea.
  • Completed: : tarea que ya no cumple los requisitos para ejecutarse, ya sea porque se ha completado correctamente o porque no lo ha hecho y además ha agotado el límite de reintentos.
  • Succeeded: tarea cuya ejecución da el resultado success. Batch determina si una tarea se ha realizado correctamente o no comprobando la propiedad TaskExecutionResult de la propiedad executionInfo.
  • Failed: tarea cuya ejecución da el resultado failure.

En el siguiente ejemplo de código de .NET se muestra cómo recuperar recuentos de tareas por estado:

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);

Puede usar un patrón similar para REST y otros lenguajes admitidos para obtener los recuentos de tareas de un trabajo.

Recuentos de estados de nodos

La operación List Pool Node Counts hace un recuento de los nodos de ejecución por los estados siguientes en cada grupo. Se proporcionan recuentos agregados independientes para los nodos dedicados y de acceso puntual en cada grupo.

  • Creating: : máquina virtual asignada por Azure que aún no ha empezado a unirse a ningún grupo.
  • Idle: nodo de ejecución disponible que actualmente no ejecuta ninguna tarea.
  • LeavingPool: nodo que va a dejar el grupo, ya sea porque el usuario lo ha eliminado expresamente, o bien porque el grupo va a cambiar de tamaño o a reducirse verticalmente de manera automática.
  • Offline: : nodo que Batch no puede usar para programar nuevas tareas.
  • Preempted: nodo de acceso puntual que se ha eliminado del grupo porque Azure ha reclamado la máquina virtual. Un nodo preempted se puede reinicializar cuando la capacidad de la máquina virtual de acceso puntual de reemplazo está disponible.
  • Rebooting: nodo que va a reiniciarse.
  • Reimaging: nodo en el que va a instalarse de nuevo el sistema operativo.
  • Running: nodo que ejecuta una o varias tareas (distintas de la de inicio).
  • Starting: nodo en el que va a iniciarse el servicio de Batch.
  • StartTaskFailed: nodo en el que la tarea de inicio no se ha realizado correctamente y ha agotado todos los reintentos, y en el que waitForSuccess se ha establecido en la tarea de inicio. El nodo no se puede usar para las tareas en ejecución.
  • Unknown: nodo que ha perdido el contacto con el servicio de Batch y cuyo estado no se conoce.
  • Unusable: nodo que no se puede usar para la ejecución de tareas debido a errores.
  • WaitingForStartTask: nodo en el que la tarea de inicio ha empezado a ejecutarse, pero en el que se ha establecido waitForSuccess y dicha tarea no se ha completado.

El siguiente fragmento de código de C# muestra cómo enumerar los recuentos de nodos de todos los grupos en la cuenta actual:

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);
}

El siguiente fragmento de código de C# muestra cómo enumerar los recuentos de nodos de un grupo determinado en la cuenta actual.

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);
}

Puede usar un patrón similar para REST y otros lenguajes admitidos para obtener los recuentos de nodos de los grupos.

Pasos siguientes