Monitorizar soluções do Batch ao contar tarefas e nós por estado

Para monitorizar e gerir soluções de Azure Batch em grande escala, poderá ter de determinar as contagens de recursos em vários estados. Azure Batch fornece operações eficientes para obter contagens para tarefas do Batch e nós de computação. Pode utilizar estas operações em vez de consultas de lista potencialmente demoradas que devolvem informações detalhadas sobre grandes coleções de tarefas ou nós.

  • Obter Contagens de Tarefas obtém uma contagem agregada de tarefas ativas, em execução e concluídas numa tarefa e de tarefas que foram bem-sucedidas ou falharam. Ao contar tarefas em cada estado, pode apresentar mais facilmente o progresso da tarefa a um utilizador ou detetar atrasos ou falhas inesperados que possam afetar a tarefa.

  • Contagens de Nós do Conjunto de Listas obtém o número de nós de computação dedicados e Spot em cada conjunto que estão em vários estados: criar, inativo, offline, preempted, reiniciar, reimaginar, iniciar e outros. Ao contar nós em cada estado, pode determinar quando tem recursos de computação adequados para executar as suas tarefas e identificar potenciais problemas com os seus conjuntos.

Tenha em atenção que, por vezes, os números devolvidos por estas operações podem não estar atualizados. Se precisar de ter a certeza de que uma contagem é precisa, utilize uma consulta de lista para contar estes recursos. As consultas de lista também lhe permitem obter informações sobre outros recursos do Batch, como aplicações. Para obter mais informações sobre como aplicar filtros a consultas de lista, veja Criar consultas para listar recursos do Batch de forma eficiente.

Contagens de estado da tarefa

A operação Obter Contagens de Tarefas conta as tarefas pelos seguintes estados:

  • Ativo: uma tarefa que é em fila de espera e capaz de ser executada, mas que não está atualmente atribuída a um nó de computação. Uma tarefa também active é se estiver dependente de uma tarefa principal que ainda não tenha sido concluída.
  • Em execução: uma tarefa que foi atribuída a um nó de computação, mas que ainda não foi concluída. Uma tarefa é contada como running quando o respetivo estado é preparing ou running, conforme indicado pela opção Obter informações sobre uma operação de tarefa .
  • Concluída: uma tarefa que já não é elegível para ser executada, porque terminou com êxito ou terminou sem êxito e também esgotou o limite de repetições.
  • Com êxito: uma tarefa em que o resultado da execução da tarefa é success. O Batch determina se uma tarefa teve êxito ou falhou ao verificar a TaskExecutionResult propriedade da propriedade executionInfo .
  • Falha: uma tarefa em que o resultado da execução da tarefa é failure.

O seguinte exemplo de código .NET mostra como obter contagens de tarefas 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);

Pode utilizar um padrão semelhante para REST e outros idiomas suportados para obter contagens de tarefas para uma tarefa.

Contagens de estado do nó

A operação Contagens de Nós do Conjunto de Listas conta os nós de computação pelos seguintes estados em cada conjunto. São fornecidas contagens agregadas separadas para nós dedicados e nós Spot em cada conjunto.

  • A criar: uma VM alocada pelo Azure que ainda não começou a aderir a um conjunto.
  • Inativo: um nó de computação disponível que não está atualmente a executar uma tarefa.
  • LeavingPool: um nó que está a sair do conjunto, quer porque o utilizador o removeu explicitamente, quer porque o conjunto está a redimensionar ou a reduzir automaticamente.
  • Offline: um nó que o Batch não pode utilizar para agendar novas tarefas.
  • Preempted: um nó Spot que foi removido do conjunto porque o Azure recuperou a VM. Um preempted nó pode ser reinstalado quando a capacidade da VM Spot de substituição está disponível.
  • A reiniciar: um nó que está a reiniciar.
  • Reimaging: um nó no qual o sistema operativo está a ser reinstalado.
  • Em execução : um nó que está a executar uma ou mais tarefas (para além da tarefa de início).
  • A iniciar: um nó no qual o serviço Batch está a iniciar.
  • StartTaskFailed: um nó no qual a tarefa de início falhou e esgotou todas as repetições e no qual waitForSuccess está definida na tarefa de início. O nó não pode ser utilizado para executar tarefas.
  • Desconhecido: um nó que perdeu o contacto com o serviço Batch e cujo estado não é conhecido.
  • Inutilizável: um nó que não pode ser utilizado para a execução de tarefas devido a erros.
  • WaitingForStartTask: um nó no qual a tarefa de início começou a ser executada, mas waitForSuccess está definido e a tarefa de início não foi concluída.

O fragmento C# seguinte mostra como listar contagens de nós para todos os conjuntos na conta atual:

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

O fragmento C# seguinte mostra como listar as contagens de nós de um determinado conjunto na conta atual.

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

Pode utilizar um padrão semelhante para REST e outros idiomas suportados para obter contagens de nós para conjuntos.

Passos seguintes