Compartir a través de


Supervisión de soluciones de Batch mediante el recuento de tareas y nodos por estado

Para supervisar y administrar soluciones de Azure Batch a gran escala, es posible que tenga que determinar los recuentos de recursos en 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 podrían consumir mucho tiempo y devuelvan información detallada sobre grandes colecciones de tareas o nodos.

  • Obtener recuentos de tareas obtiene un recuento agregado de tareas activas, en curso y completadas en un trabajo, y de tareas que se realizaron correctamente o fallaron. Al contar tareas en cada estado, puede mostrar fácilmente el progreso del trabajo a un usuario o detectar retrasos o errores inesperados que puedan afectar al trabajo.

  • 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 nodos en cada estado, puede determinar cuándo tiene los recursos informáticos adecuados para ejecutar las tareas e identificar posibles problemas con los grupos.

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 le permiten obtener información sobre otros recursos de Batch, como las aplicaciones. Para obtener más información sobre cómo aplicar filtros a consultas de lista, consulte Creación de consultas para enumerar recursos de Batch de forma eficaz.

Recuentos de estados de tareas

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

  • Activo: una tarea que está en cola y lista para ejecutarse, pero que no está asignada actualmente a ningún nodo de proceso. Una tarea también es active si depende de una tarea principal que aún no se ha completado.
  • En ejecución: tarea que se ha asignado a un nodo de proceso, pero que aún no ha finalizado. Una tarea se cuenta como running cuando su estado es preparing o running, como se indica en la Getinformación sobre una operación de tarea.
  • Completado: una tarea que ya no es apta para ejecutarse, ya que finalizó correctamente o finalizó sin éxito y también agotó su límite de reintentos.
  • Succeeded: tarea cuya ejecución da el resultado success. Batch determina si una tarea ha sido exitosa o fallida comprobando la propiedad TaskExecutionResult de executionInfo.
  • Error: una tarea en la que el resultado de la ejecución de la tarea es failure.

En el ejemplo de código de .NET siguiente 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 recuentos de tareas para 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.

  • Creando: una máquina virtual asignada por Azure que aún no ha comenzado a unirse a un grupo.
  • Inactivo: nodo de proceso que está disponible y 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.
  • Sin conexión: 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. Se puede reinicializar un preempted nodo cuando la capacidad de máquina virtual de Spot de reemplazo está disponible.
  • Reinicio: nodo que se está reiniciando.
  • Reimaging: nodo en el que se vuelve a instalar el sistema operativo.
  • En ejecución : nodo que ejecuta una o varias tareas (distintas de la tarea de inicio).
  • Inicio: nodo en el que se inicia el servicio Batch.
  • StartTaskFailed: nodo donde se produjo un error en la tarea de inicio después de todos los reintentos y waitForSuccess está habilitado. Este nodo no puede ejecutar tareas.
  • Desconocido: nodo que perdió el contacto con el servicio Batch y cuyo estado no se conoce.
  • Inutilizable: nodo que no se puede usar para la ejecución de tareas debido a errores.
  • WaitingForStartTask: nodo en el que se está ejecutando la tarea de inicio, pero waitForSuccess está habilitado y no se ha completado.

El siguiente fragmento de código de C# muestra cómo enumerar los recuentos de nodos para todos los grupos de 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 recuentos de nodos para grupos.

Pasos siguientes