다음을 통해 공유


상태별 태스크 및 노드 수를 계산하여 Batch 솔루션 모니터링

대규모 Azure Batch 솔루션을 모니터링하고 관리하려면 다양한 상태의 리소스 수를 결정해야 할 수 있습니다. Azure Batch는 Batch 태스크 및 컴퓨팅 노드의 개수를 가져오는 효율적인 작업을 제공합니다. 작업 또는 노드의 큰 컬렉션에 대한 자세한 정보를 반환하는 잠재적으로 시간이 많이 걸리는 목록 쿼리 대신 이러한 작업을 사용할 수 있습니다.

  • Get Task 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 및 기타 지원되는 언어에 유사한 패턴을 사용하여 작업에 대한 작업 수를 가져올 수 있습니다.

노드 상태 수

목록 풀 노드 개수 작업은 각 풀의 다음 상태별로 계산 노드 수를 계산합니다. 각 풀의 전용 노드 및 스폿 노드에 대해 별도의 집계 수가 제공됩니다.

  • 생성 중: 풀에 아직 추가되지 않은 Azure 할당 VM입니다.
  • 유휴: 사용 가능하고 현재 어떤 작업도 실행하지 않는 컴퓨팅 노드입니다.
  • LeavingPool: 사용자가 명시적으로 제거했거나 풀의 크기 조정 또는 자동 축소 때문에 풀을 떠나는 노드입니다.
  • 오프라인: Batch에서 새 작업을 예약하는 데 사용할 수 없는 노드입니다.
  • 선점됨: Azure가 VM을 회수했기 때문에 스폿 노드가 풀에서 제거되었습니다. preempted 교체 스폿 VM 용량을 사용할 수 있는 경우 노드를 다시 초기화할 수 있습니다.
  • 다시 부팅: 다시 시작하는 노드입니다.
  • 재이미징: OS가 다시 설치되는 노드입니다.
  • 실행 중: 하나 이상의 태스크를 실행하는 노드입니다(시작 작업 이외의).
  • 시작: 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 및 기타 지원되는 언어에 유사한 패턴을 사용하여 풀에 대한 노드 수를 가져올 수 있습니다.

다음 단계