Compartilhar via


Monitorar soluções do Lote pela contagem de tarefas e nós por estado

Para monitorar e gerenciar soluções do Lote do Azure em larga escala, talvez seja necessário determinar contagens de recursos em vários estados. O Lote do Azure fornece operações eficientes para obter contagens de tarefas e nós de computação do Lote. Você pode usar essas operações em vez de consultas de lista potencialmente demoradas que retornam 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 em um trabalho e de tarefas que tiveram êxito ou falharam. Ao contar tarefas em cada estado, você pode exibir facilmente o progresso do trabalho para um usuário ou detectar atrasos ou falhas inesperadas que possam afetar o trabalho.

  • Listar Contagens de Nó de Pool obtém o número de nós de computação spot e dedicados em cada pool que estão em vários estados: criando, ocioso, offline, que admitiu preempção, reinicializando, refazendo a imagem, iniciando e outros. Pela contagem de nós em cada estado, você pode determinar quando você tem recursos computacionais adequados para executar seus trabalhos e identificar possíveis problemas com seus pools.

Às vezes, os números retornados por essas operações podem não estar atualizados. Se você precisar ter certeza de que uma contagem é precisa, use uma consulta de lista para contar esses recursos. As consultas de lista também permitem obter informações sobre outros recursos do serviço Batch, como aplicações. Para obter mais informações sobre como aplicar filtros a consultas de lista, consulte Criar consultas para listar recursos do Lote com eficiência.

Contagens de estados de tarefa

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

  • Ativo: uma tarefa na fila e pronta para ser executada, mas que não está atribuída a nenhum nó de computação. Uma tarefa também active se é depende de uma tarefa pai que ainda não foi concluída.
  • Em execução: uma tarefa que foi atribuída a um nó de computação, mas ainda não foi concluída. Uma tarefa é contada como running quando seu estado é preparing ou running, conforme indicado pelas Getinformações sobre uma operação de tarefa .
  • Concluída: uma tarefa que não está mais qualificada para ser executada, porque ela terminou com êxito ou terminou sem êxito e também esgotou seu limite de repetição.
  • Bem-sucedida: uma tarefa em que o resultado da execução da tarefa é success. Batch determina se uma tarefa foi bem-sucedida ou falhou verificando a propriedade TaskExecutionResult da executionInfo.
  • Falha: uma tarefa em que o resultado da execução da tarefa é failure.

O exemplo de código .NET a seguir mostra como recuperar 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);

Você pode usar um padrão semelhante para REST e outros idiomas com suporte para obter contagens de tarefas para um trabalho.

Contagens de estados de nós

A operação Listar Contagens de Nós de Pool lista nós de computação pelos seguintes estados em cada pool. Contagens de agregação separadas são fornecidas para nós dedicados e nós spot em cada pool.

  • Criando: uma VM alocada pelo Azure que ainda não começou a ingressar em um pool.
  • Ocioso: Um nó de computação disponível que atualmente não executa nenhuma tarefa.
  • LeavingPool: um nó que está saindo do pool, seja porque o usuário o removeu explicitamente ou porque o pool está redimensionando ou reduzindo verticalmente de modo automático.
  • Offline: um nó que o Lote não pode usar para agendar novas tarefas.
  • Admitiu preempção: um nó spot que foi removido do pool porque o Azure recuperou a VM. Um nó preempted pode ser reinicializado quando a capacidade da VM spot substituta está disponível.
  • Reinicializando: um nó que está reinicializando.
  • Refazendo imagem: um nó onde o sistema operacional está sendo reinstalado.
  • Em execução: um nó que está executando uma ou mais tarefas (exceto a tarefa iniciar).
  • Iniciando: um nó onde o serviço de Lote está sendo iniciado.
  • StartTaskFailed: um nó em que a tarefa inicial falhou após todas as novas tentativas e waitForSuccess está habilitada. Esse nó não pode executar tarefas.
  • Desconhecido: um nó que perdeu contato com o serviço de Lote e cujo estado não é conhecido.
  • Inutilizável: um nó que não pode ser utilizado na execução de tarefas devido a erros.
  • WaitingForStartTask: um nó no qual a tarefa inicial está em execução, mas waitForSuccess está habilitada e não foi concluída.

O snippet C# a seguir mostra como listar o número de nós para todos os pools da 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 trecho de código C# a seguir mostra como listar o número de nós para um pool específico 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);
}

Você pode usar um padrão semelhante para REST e outras linguagens com suporte para obter contagens de nós dos pools.

Próximas etapas