Partager via


Surveiller les solutions Batch en comptant les tâches et les nœuds par état

Pour surveiller et gérer des solutions Azure Batch à grande échelle, vous devrez peut-être déterminer le nombre de ressources dans différents états. Azure Batch fournit des opérations efficaces pour obtenir le nombre de tâches Batch et de nœuds de calcul. Vous pouvez utiliser ces opérations au lieu de requêtes de liste potentiellement fastidieuses qui retournent des informations détaillées sur les grandes collections de tâches ou de nœuds.

  • Obtenir le total des tâches obtient un décompte agrégé des tâches actives, en cours d'exécution, terminées dans un projet, ainsi que des tâches réussies ou échouées. En comptant les tâches dans chaque état, vous pouvez facilement afficher la progression du travail à un utilisateur, ou détecter des retards ou des échecs inattendus susceptibles d’affecter le travail.

  • Répertorier le nombre de nœuds des pools permet d’obtenir le nombre de nœuds de calcul dédiés et de nœuds de calcul spot de chaque pool et de connaître leur état : en cours de création, inactif, hors connexion, préempté, en cours de redémarrage, réinitialisation, démarrage, etc. En comptant les nœuds dans chaque état, vous pouvez déterminer quand vous disposez de ressources de calcul adéquates pour exécuter vos travaux et identifier les problèmes potentiels avec vos pools.

Parfois, les nombres retournés par ces opérations peuvent ne pas être à jour. Si vous devez vous assurer qu’un nombre est exact, utilisez une requête de liste pour compter ces ressources. Les requêtes de liste vous permettent également d’obtenir des informations sur d’autres ressources Batch telles que les applications. Pour plus d’informations sur l’application de filtres à des requêtes de liste, consultez Créer des requêtes pour répertorier efficacement les ressources Batch.

Nombre d’états des tâches

L'opération de comptage des tâches Get compte les tâches selon les états suivants :

  • Actif : tâche mise en file d’attente et prête à s’exécuter, mais n’est actuellement affectée à aucun nœud de calcul. Une tâche est également active si elle dépend d’une tâche parente qui n’a pas encore été terminée.
  • En cours d’exécution : tâche qui a été affectée à un nœud de calcul, mais qui n’a pas encore terminé. Une tâche est comptabilisée comme running lorsque son état est l’un preparing ou runningl’autre, comme indiqué par les Getinformations relatives à une opération de tâche.
  • Terminé : tâche qui n’est plus éligible à l’exécution, car elle s’est terminée correctement ou a échoué et a également épuisé sa limite de nouvelles tentatives.
  • Réussite : tâche où le résultat de l’exécution de la tâche est success. Batch détermine si une tâche a réussi ou échoué en vérifiant la TaskExecutionResult propriété de la propriété executionInfo .
  • Échec : tâche où le résultat de l’exécution de la tâche est failure.

L’exemple de code .NET suivant montre comment récupérer le nombre de tâches par état.

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

Vous pouvez utiliser un modèle similaire pour REST et d’autres langues prises en charge pour obtenir le nombre de tâches d’un travail.

Nombre d’états des nœuds

L’opération Liste des nombres de nœuds de pool compte les nœuds de calcul en fonction des états suivants dans chaque pool. Des comptages agrégés distincts sont fournis pour les nœuds dédiés et pour les nœuds spot de chaque pool.

  • Création : machine virtuelle allouée par Azure qui n’a pas encore commencé à rejoindre un pool.
  • Inactif : nœud de calcul disponible et qui n’exécute actuellement aucune tâche.
  • LeavingPool : un nœud qui quitte le pool, soit parce que l'utilisateur l'a supprimé explicitement, soit parce que le pool est en cours de redimensionnement ou de réduction automatique.
  • Hors connexion : nœud que Batch ne peut pas utiliser pour planifier de nouvelles tâches.
  • Préempté : nœud Spot supprimé du pool, car Azure a récupéré la machine virtuelle. Un preempted nœud peut être réinitialisé lorsque la capacité de machine virtuelle Spot de remplacement est disponible.
  • Redémarrage : nœud qui redémarre.
  • Reimaging : nœud où le système d’exploitation est réinstallé.
  • Exécution : nœud qui exécute une ou plusieurs tâches (autres que la tâche de démarrage).
  • Démarrage : nœud dans lequel le service Batch démarre.
  • StartTaskFailed : nœud où la tâche de démarrage a échoué après toutes les nouvelles tentatives et waitForSuccess est activée. Ce nœud ne peut pas exécuter de tâches.
  • Inconnu : nœud qui a perdu le contact avec le service Batch et dont l’état n’est pas connu.
  • Inutilisable : nœud qui ne peut pas être utilisé pour l’exécution des tâches en raison d’erreurs.
  • WaitingForStartTask : nœud sur lequel la tâche de démarrage est en cours d’exécution, mais waitForSuccess est activé et n’a pas terminé.

L’extrait de code C# suivant montre comment répertorier les nombres de nœuds pour tous les pools du compte actuel :

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

L’extrait de code C# suivant montre comment répertorier les nombres de nœuds pour un pool donné dans le compte actuel.

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

Vous pouvez utiliser un modèle similaire pour REST et d’autres langages pris en charge pour obtenir le nombre de nœuds pour les pools.

Étapes suivantes