Monitorare le soluzioni Batch conteggiando attività e nodi in base allo stato

Per monitorare e gestire soluzioni di Azure Batch su larga scala, potrebbe essere necessario determinare i conteggi delle risorse in vari stati. Azure Batch fornisce operazioni efficienti per ottenere i conteggi per le attività e i nodi di calcolo batch. È possibile usare queste operazioni anziché le query di elenco che richiedono molto tempo che restituiscono informazioni dettagliate sulle raccolte di attività o nodi di grandi dimensioni.

  • L'operazione di recupero dei conteggi delle attività consente di avere un conteggio aggregato delle attività attive, in corso e completate in un processo e delle attività che hanno avuto esito positivo o negativo. Conteggiando le attività in ogni stato, è possibile visualizzare più facilmente lo stato di avanzamento di un processo a un utente o rilevare ritardi o errori imprevisti che possono influire sul processo.

  • I conteggi dei nodi del pool di elenco ottengono il numero di nodi di calcolo dedicati e spot in ogni pool in vari stati: creazione, inattività, offline, preempted, riavvio, ripetizione , avvio e altri. Conteggiando i nodi in ogni stato, è possibile determinare quando sono disponibili le risorse di calcolo adeguata per eseguire i processi e identificare potenziali problemi nei pool.

Si noti che a volte i numeri restituiti da queste operazioni potrebbero non essere aggiornati. Se è necessario assicurarsi che un conteggio sia accurato, usare una query di elenco per contare queste risorse. Elencare anche le query che consentono di ottenere informazioni su altre risorse batch, ad esempio le applicazioni. Per altre informazioni sull'applicazione dei filtri alle query di elenco, vedere Creare query per elencare le risorse di Batch in modo efficiente.

Conteggi delle attività in base allo stato

L'operazione di recupero dei conteggi delle attività conta le attività in base agli stati seguenti:

  • Attivo: un'attività in coda e in grado di eseguire, ma non è attualmente assegnata a un nodo di calcolo. Un'attività è active anche se dipende da un'attività padre non ancora completata.
  • Esecuzione: un'attività assegnata a un nodo di calcolo, ma non è ancora stata completata. Un'attività viene conteggiata come running quando il suo stato è preparing o running, come indicato dall'operazione di recupero delle informazioni su un'attività.
  • Completato: un'attività che non è più idonea per l'esecuzione, perché è stata completata correttamente o completata correttamente e ha esaurito anche il limite di tentativi.
  • Riuscita: attività in cui il risultato dell'esecuzione dell'attività è success. Batch determina se un'attività ha avuto esito positivo o negativo controllando la proprietà TaskExecutionResult della proprietà executionInfo.
  • Impossibile: un'attività in cui il risultato dell'esecuzione dell'attività è failure.

L'esempio di codice .NET seguente illustra come recuperare i conteggi delle attività in base allo stato.

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

Per ottenere i conteggi delle attività per un processo, è possibile usare un criterio simile per REST e per altri linguaggi supportati.

Conteggi dei nodi in base allo stato

L'operazione di conteggio dei nodi del pool conta i nodi di calcolo di ogni pool in base agli stati seguenti. I conteggi di aggregazione separati vengono forniti per i nodi dedicati e i nodi Spot in ogni pool.

  • Creazione: una macchina virtuale allocata di Azure che non ha ancora avviato l'aggiunta a un pool.
  • Inattività: nodo di calcolo disponibile che non esegue attualmente un'attività.
  • LeavingPool: nodo che sta lasciando il pool, perché l'utente lo ha rimosso in modo esplicito o perché il pool sta ridimensionando o ridimensionando automaticamente.
  • Offline: nodo che Batch non può usare per pianificare nuove attività.
  • Preempted: nodo Spot rimosso dal pool perché Azure ha recuperato la macchina virtuale. Un preempted nodo può essere reinizializzato quando è disponibile la capacità di macchina virtuale spot sostitutiva.
  • Riavvio: nodo che viene riavviato.
  • Reimaging: nodo in cui viene reinstallato il sistema operativo.
  • Esecuzione : nodo che esegue una o più attività (diversa dall'attività di avvio).
  • Avvio: nodo in cui viene avviato il servizio Batch.
  • StartTaskFailed: nodo in cui l'attività iniziale non è riuscita ed è stata esaurita tutte le tentative e su cui waitForSuccess è impostata l'attività iniziale. Il nodo non può essere usato per l'esecuzione di attività.
  • Sconosciuto: nodo che ha perso il contatto con il servizio Batch e il cui stato non è noto.
  • Non utilizzabile: nodo che non può essere usato per l'esecuzione dell'attività a causa di errori.
  • WaitingForStartTask: nodo in cui l'attività iniziale è stata avviata, ma waitForSuccess è impostata e l'attività di avvio non è stata completata.

Il frammento di codice C# seguente indica come elencare i conteggi dei nodi per tutti i pool dell'account corrente:

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

Il frammento di codice C# seguente indica come elencare i conteggi dei nodi per un pool specifico dell'account corrente.

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

Per ottenere i conteggi dei nodi per i pool, è possibile usare un criterio simile per REST e altri linguaggi supportati.

Passaggi successivi