次の方法で共有


状態別にタスクとノードをカウントして Batch ソリューションを監視する

大規模な Azure Batch ソリューションを監視および管理するには、さまざまな状態のリソースの数を決定することが必要になる場合があります。 Azure Batch では、Batch タスクとコンピューティング ノードのカウントを取得するための効率的な操作が提供されます。 これらの操作は、タスクまたはノードの大規模なコレクションに関する詳細情報を返す、時間がかかる可能性のあるリスト クエリの代わりに使用できます。

  • Get Task Counts は、ジョブ内のアクティブ、実行中、完了したタスクと、成功または失敗したタスクの集計カウントを取得します。 各状態のタスクをカウントすることで、ジョブの進行状況をユーザーに簡単に表示したり、ジョブに影響を与える可能性のある予期しない遅延や失敗を検出したりできます。

  • List Pool Node Counts は、作成、アイドル、オフライン、割り込み、再起動、再イメージ化、開始など、さまざまな状態にある各プール内の専用および スポット コンピューティング ノード の数を取得します。 各状態のノードをカウントすることで、ジョブを実行するための十分なコンピューティング リソースがいつあるかを判断し、プールに関する潜在的な問題を特定できます。

場合によっては、これらの操作によって返される数値が最新でない場合があります。 カウントが正確であることを確認する必要がある場合は、リスト クエリを使用してこれらのリソースをカウントします。 リスト クエリを使用すると、アプリケーションなどの他の Batch リソースに関する情報を取得することもできます。 リスト クエリにフィルターを適用する方法の詳細については、「 クエリを作成して Batch リソースを効率的に一覧表示する」を参照してください。

タスクの状態の数

Get タスク数操作では、タスクが次の状態でカウントされます。

  • アクティブ: キューに登録され、実行する準備ができているが、現在はコンピューティング ノードに割り当てられていないタスク。 タスクがまだ完了していないactiveしている場合、そのタスクもの対象となります。
  • 実行中: コンピューティング ノードに割り当てられているが、まだ完了していないタスク。 タスクの状態がrunningまたはpreparingの場合、タスクはrunningとしてカウントされます(タスク操作に関するGet情報で示されます)。
  • 完了: タスクが正常に終了したか、または正常に完了せず、再試行制限も使い果たされたため、実行の対象ではなくなったタスク。
  • 成功: タスクの実行結果が successされるタスク。 Batch は、TaskExecutionResult プロパティの プロパティを調べて、タスクが成功したか失敗したかを判断します。
  • 失敗: タスクの実行結果が failureされるタスク。

次の .NET コード サンプルは、状態別にタスク数を取得する方法を示しています。

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

REST やその他のサポートされている言語にも同様のパターンを使用して、ジョブのタスク数を取得できます。

ノードの状態の数

List Pool Node Counts 操作は、各プールの次の状態で計算ノードをカウントします。 専用ノードと各プール内のスポット ノードに対して個別の集計カウントが提供されます。

  • 作成中: プールへの参加をまだ開始していない Azure に割り当てられた VM。
  • アイドル状態: 現在タスクを実行していない、使用可能なコンピューティング ノード。
  • LeavingPool: ユーザーがプールを明示的に削除したか、プールのサイズ変更または自動スケールダウンが原因で、プールから離れるノード。
  • オフライン: Batch が新しいタスクのスケジュール設定に使用できないノード。
  • 割り込み: Azure が VM を回収したためにプールから削除されたスポット ノード。 preempted ノードは、代替スポット VM 容量が使用可能な場合に再初期化できます。
  • 再起動中: 再起動中のノード。
  • 再イメージ化: OS が再インストールされているノード。
  • 実行中 : 1 つ以上のタスク (開始タスク以外) を実行しているノード。
  • 開始: Batch サービスが起動しているノード。
  • StartTaskFailed: すべての再試行後に 開始タスク が失敗し、 waitForSuccess が有効になっているノード。 このノードはタスクを実行できません。
  • 不明: Batch サービスとの接続を失い、状態が不明なノード。
  • 使用できない: エラーが原因でタスクの実行に使用できないノード。
  • WaitingForStartTask: 開始タスクが実行されているが、 waitForSuccess が有効になっていて、完了していないノード。

次の C# スニペットは、現在のアカウント内のすべてのプールのノード数を一覧表示する方法を示しています。

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

次の C# スニペットは、現在のアカウント内の特定のプールのノード数を一覧表示する方法を示しています。

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

REST やその他のサポートされている言語にも同様のパターンを使用して、プールのノード数を取得できます。

次のステップ