Dataflow 통계 사용

Dataflow 통계를 사용하면 작업 성능을 최적화할 수 있습니다. 이 주제에서는 gcloud 또는 REST API를 사용하여 Dataflow 통계와 상호작용하는 방법을 보여줍니다. Dataflow 콘솔에서 통계를 검토할 수도 있습니다. 콘솔에서 통계를 검토하는 방법에 대한 자세한 내용은 권장사항을 참조하세요.

개요

Dataflow 통계는 작업 성능 개선, 비용 절감, 오류 문제 해결에 대한 통계를 제공합니다. Dataflow 통계는 추천자 서비스의 일부이며 google.dataflow.diagnostics.Insight 유형을 통해 제공됩니다.

Dataflow 통계를 사용할 때는 일부 권장사항은 사용 사례와 관련이 없을 수 있다는 점에 유의하세요.

시작하기 전에

Dataflow 통계를 사용하려면 먼저 다음 단계를 완료해야 합니다.

  1. Recommender API 사용 설정하기
  2. 계정에 다음 권한이 있는지 확인합니다.

    • recommender.dataflowDiagnosticsInsights.get
    • recommender.dataflowDiagnosticsInsights.list
    • recommender.dataflowDiagnosticsInsights.update

    이러한 권한을 개별적으로 부여하거나 다음 역할 중 하나를 부여할 수 있습니다.

    • roles/recommender.dataflowDiagnosticsViewer
    • roles/recommender.dataflowDiagnosticsAdmin
    • roles/dataflow.viewer
    • roles/dataflow.developer
    • roles/dataflow.admin

Dataflow 통계 요청

다음과 같이 Dataflow 통계를 나열할 수 있습니다. 다른 유형의 통계 상호작용은 Recommender API의 통계 가이드를 참조하세요.

Dataflow 통계 나열

특정 리전의 프로젝트에 대한 모든 Dataflow 통계를 나열하려면 다음 메서드 중 하나를 사용합니다.

gcloud

gcloud recommender insights list 명령어를 사용하여 지정된 리전의 프로젝트에 대한 모든 Dataflow 통계를 볼 수 있습니다.

명령어를 실행하기 전에 다음 값을 바꿉니다.

  • PROJECT_ID: 통계를 나열하려는 프로젝트의 ID
  • REGION: Dataflow 작업을 실행 중인 리전 (예시: us-west1)
gcloud recommender insights list --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

지정된 리전의 프로젝트에 대한 모든 Dataflow 통계가 출력에 나열됩니다.

REST

Recommender API의 insights.list 메서드를 사용하여 지정된 리전의 프로젝트에 대한 모든 Dataflow 통계를 나열할 수 있습니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 통계를 나열하려는 프로젝트의 ID
  • REGION: Dataflow 작업을 실행 중인 리전 (예시: us-west1)

HTTP 메서드 및 URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights

curl(Linux, macOS 또는 Cloud Shell)을 사용하여 요청을 보내려면 다음 명령어를 실행합니다.

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights"

단일 Dataflow 통계 가져오기

통계 설명, 상태, 관련 권장사항을 포함하여 단일 통계에 대한 자세한 내용을 보려면 다음 메서드 중 하나를 사용하세요.

gcloud

통계 ID와 함께 gcloud recommender insights describe 명령어를 사용하여 단일 통계에 대한 정보를 확인합니다. 명령어를 실행하기 전에 다음 값을 바꿉니다.

  • INSIGHT_ID: 보려는 통계의 ID
  • PROJECT_ID: 통계를 나열하려는 프로젝트의 ID
  • REGION: Dataflow 작업을 실행 중인 리전 (예시: us-west1)
gcloud recommender insights describe INSIGHT_ID \
  --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

출력에 통계가 자세히 표시됩니다.

REST

Recommender API의 insights.get 메서드는 단일 통계를 가져옵니다. 요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 통계를 나열하려는 프로젝트의 ID
  • REGION: Dataflow 작업을 실행 중인 리전 (예시: us-west1)
  • INSIGHT_ID: 보려는 통계의 ID

HTTP 메서드 및 URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID

curl(Linux, macOS 또는 Cloud Shell)을 사용하여 요청을 보내려면 다음 명령어를 실행합니다.

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID"

Dataflow 통계 해석

통계를 가져온 후 콘텐츠를 검토하여 강조표시되는 리소스 사용량 패턴을 파악할 수 있습니다. Dataflow 통계는 표준 통계 속성 외에도 다음과 같은 하위유형을 제공합니다.

  • AUTOSCALING_NOT_ENABLED: 자동 확장을 사용 설정할 수 있습니다. 작업에서 CPU 사용률이 높고 설정된 최대 작업자 수를 사용합니다. 자동 확장을 사용 설정하면 성능이 향상될 수 있습니다.
  • HIGH_FAN_OUT: 동시 로드를 늘리기 위해 하나 이상의 변환 뒤에 융합 중단을 삽입할 수 있습니다.
  • MAX_NUM_WORKERS: 자동 확장: 최대 작업자 수를 늘릴 수 있습니다. 작업에서 자동 확장을 사용하며 CPU 사용률이 높고 설정된 최대 작업자 수를 사용합니다. 최대 작업자 수를 늘리면 성능이 개선될 수 있습니다.
  • WORKER_OUT_OF_MEMORY: 메모리 부족으로 인해 작업의 일부 작업자가 실패하여 작업이 느려지거나 실패할 수 있습니다.
  • PREBUILD_NOT_UTILIZED: 작업자 이미지 사전 빌드 워크플로를 사용하여 작업자 시작 시간 및 자동 확장 안정성을 개선합니다.
  • ACTIVE_KEYS(미리보기): 총 활성 키 수가 총 코어 수보다 적으며 확장해도 도움이 되지 않습니다.
  • LONG_WORK_ITEM: 융합된 단계에서의 작업을 처리하는 데 너무 오래 걸려 느리게 실행되거나 중단된 작업을 나타냅니다.

Dataflow 통계에서 식별된 문제를 완화하는 방법을 자세히 알아보려면 통계를 참조하세요.

또한 Dataflow 통계는 통계에 대한 추가 정보 및 메타데이터가 포함된 하위 필드를 포함하는 특수한 content 필드도 제공합니다. 사용 사례에 따라 다음 content 하위 필드가 유용할 수 있습니다.

  • jobName: Dataflow 작업 이름
  • description: 영어로 된 통계 설명
  • title: 영어로 된 통계 제목

통계

높은 팬아웃 감지됨

Dataflow에서 작업에 높은 팬아웃을 포함하는 하나 이상의 변환이 포함된 것으로 감지하면 다음 메시지가 표시됩니다.

High fan-out detected

이 메시지는 높은 출력-입력 요소 수 비율을 포함하는 ParDo가 후속 ParDo와 융합되었을 때 표시됩니다. 이 경우 두 번째 ParDo는 첫 번째 항목과 함께 순차적으로 실행되므로 지정된 입력의 모든 출력 요소가 동일한 작업자에 강제로 적용되고 동시 로드 수가 줄어들며 성능이 저하됩니다.

이 문제를 해결하려면 다음 단계를 따르세요.

  • GroupByKey를 삽입하고 첫 번째 ParDo 이후 그룹 해제합니다. Dataflow 서비스는 집계에서 ParDo 작업을 융합하지 않습니다. 자세한 내용은 Fusion 최적화를 참조하세요.
  • 중간 PCollection을 다른 ParDo의 부차 입력으로 전달합니다. Dataflow 서비스는 항상 부차 입력을 구체화합니다.
  • 다시 셔플 단계를 삽입합니다. 다시 셔플은 융합을 방지하고, 데이터를 체크포인트하고, 기간 전략을 재구성하여 데이터가 삭제되지 않도록 합니다. 다시 셔플은 Apache Beam 문서에서 지원 중단된 것으로 표시되었더라도 Dataflow에서 지원됩니다. 다시 셔플을 사용하면 파이프라인 실행 비용이 증가할 수 있습니다.

자동 확장: 최대 작업자 수를 늘릴 수 있음

Dataflow에서 작업이 허용되는 최대 작업자 수(maxNumWorkers)(또는 max_num_workers)를 사용 중이고 이 최댓값을 늘리면 이러한 작업에 더 많은 작업자를 사용할 수 있음을 감지하면 다음 메시지가 표시됩니다.

maximum number of workers could be increased

예를 들어, 이 권장 사항은 50명의 작업자가 모두 평균 작업자 CPU 사용률이 80%를 초과하는 상태로 사용되고 있을 때 maxNumWorkers가 50으로 설정된 배치 또는 스트리밍 작업에 대해 발생합니다. 또한 이 권장사항은 작업자 50개 모두에서 평균 작업자 CPU 사용률이 50%를 초과하고 작업 처리 예상 시간이 2분을 초과할 때 maxNumWorkers가 50으로 설정된 스트리밍 작업에 적용됩니다.

일반적으로 maxNumWorkers를 늘리면 파이프라인 처리량이 증가합니다. 일괄 파이프라인은 더 짧은 시간에 완료될 수 있고 스트리밍 파이프라인은 급증한 데이터를 처리하고 초당 더 많은 요소를 처리할 수 있습니다. 그러나 이 경우 비용이 증가할 수 있습니다. 자세한 내용은 작업자 리소스 가격 책정을 참조하세요. 자동 확장 알고리즘의 작동 방식과 구성 방법은 자동 확장 가이드를 참조하세요.

이 문제를 해결하려면 다음 단계를 따르세요.

  • maxNumWorkers 파이프라인 옵션을 늘리거나 삭제합니다. 이 옵션이 없으면 Dataflow는 자동 확장 가이드에 나열된 기본값을 사용합니다.
  • 파이프라인 성능이 적절하면 아무 것도 수행하지 않아도 됩니다.
    • 배치 파이프라인의 경우 총 실행 시간이 요구사항을 충족하는지 확인합니다.
    • 스트리밍 파이프라인의 경우 작업 페이지의 작업 측정항목 탭에서 데이터 최신 상태 그래프를 확인합니다. 그래프의 값이 계속 증가하지 않는지 허용 가능한 범위 내에 있는지 확인합니다.

자동 확장: 초기 작업자 수를 설정하면 작업 성능 향상 가능

Dataflow에서 실행 시간의 50%를 초과하는 동안 특정 수의 작업자를 사용하고 있는 작업을 감지하는 경우 초기 작업자 수를 권장 값으로 설정하면 일괄 작업 실행 시간을 단축하거나 스트리밍 작업을 업데이트할 때 백로그 증가를 방지하여 작업 성능을 향상시킬 수 있습니다.

OutOfMemory 오류로 인한 작업자 실패

Dataflow가 메모리 부족 오류로 인한 작업자 실패를 감지하면 다음 메시지가 표시됩니다.

Some workers are out of memory

메모리 부족으로 인해 일부 작업자가 실패했습니다. 작업이 완료될 수는 있지만 이러한 오류로 인해 작업이 성공적으로 완료되거나 성능이 저하될 수도 있습니다.

다음 권장사항을 시도해 보세요.

  • 작업자가 사용할 수 있는 메모리 양을 수동으로 늘립니다.
  • 메모리 사용량을 프로파일링하여 필요한 메모리 양을 줄입니다. 자세한 내용은 Dataflow의 메모리 부족 오류 문제 해결을 참조하세요.

사전 빌드 워크플로 사용되지 않음

Dataflow가 작업자 이미지 사전 빌드 워크플로가 사용되지 않는 파이프라인을 감지하면 다음 메시지가 표시됩니다.

pre-build workflow not utilized

작업자 이미지 사전 빌드 워크플로가 사용되지 않으면 파이프라인에 런타임 시 반복적으로 설치되는 종속 항목이 포함됩니다. 이 구성은 작업자 시작 시간을 지연시켜 작업 처리량을 저하시키고 불안정한 자동 확장 동작을 유발합니다.

이 문제를 해결하려면 파이프라인을 실행할 때 작업자 이미지 사전 빌드 워크플로를 사용합니다. 자세한 내용은 Python 종속 항목 사전 빌드를 참조하세요.

사전 빌드된 맞춤설정 컨테이너가 이미 사용 중인 경우 불필요한 설치를 방지하기 위해 '--sdk_location=container' 옵션을 추가하고 다음 옵션을 삭제합니다.

  • '--setup_file'
  • '--requirements_file'
  • '--extra_package(s)'

활성 키가 적음

Dataflow에서 활성 키 수가 총 코어 수보다 적고 수직 확장해도 도움이 되지 않아 작업이 지연됨을 감지하면 다음 메시지가 표시됩니다.

Active keys can be increased

작업에서 사용자 코드를 실행하기 위해 Dataflow에서 작업자를 사용합니다. 각 스레드는 처리할 데이터 세트를 담당하는 키에 매핑되며 키는 정확성을 위해 한 번에 단일 코어에서만 실행될 수 있습니다.

일부 코어가 과부하되고 다른 코어는 유휴 상태인 경우가 있습니다. 이 문제를 해결하려면 키 수를 늘리고 활성 스레드 수도 늘립니다.

키를 늘릴 수 있는 해결책: - 보다 구체적인 키 유형을 사용하여 키 수를 늘릴 수 있습니다. 예를 들어 키 유형이 IP address이면 사용 가능한 키 수가 줄어듭니다. 그러나 키 유형을 IP + [user identifier]로 변경하면 더 많은 키를 사용할 수 있으므로 동시 로드가 증가합니다. - 싱크로 인해 병목 현상이 발생할 수 있는 BigQuery에 기록하는 파이프라인의 경우 이 문서를 참조하세요. - 다른 소스/싱크의 경우 numShards 매개변수가 있는지 확인하고 늘립니다. 일반적으로 샤드 하나는 키 하나에 매핑됩니다. - 실행 모델에 대한 자세한 내용은 이 문서를 참조하세요. - 팬아웃을 사용하면 단일 입력 키를 사용하고 해시를 추가하여 여러 출력 키를 생성할 수 있습니다. 참조

단계에서 시간이 너무 오래 걸림

Dataflow에서 작업 처리를 완료하는 데 너무 오래 걸리는 경우가 자주 감지되면 다음 메시지가 표시됩니다.

Stage spending too long on work

Dataflow는 처리할 요소 번들의 융합된 단계로 작업을 전송하며, 각 번들은 모든 요소와 스테이지의 출력이 처리되면 완료된 것으로 간주됩니다. 스트리밍 파이프라인은 완전히 처리하는 데 1분도 걸리지 않는 작업 번들에 최적화되어 있어, 처리 시간이 길어지면 파이프라인에 추가적인 성능 문제가 발생할 수 있습니다.

이 문제는 사용자 변환이 중단되거나 느리면 발생할 수 있습니다. 이러한 변환은 Cloud Logging 및 진단 탭에서 발생하는 경고와 '작업 진행 중' 또는 '처리 정체' 키 문구로 식별될 수 있습니다. 이 문제가 사용자 변환으로 인해 발생했는지 진단하려면 Cloud Profiler를 사용하여 사용자 변환의 성능을 검사합니다. 속도 저하의 원인인 코드와 빈도를 추적합니다. 자세한 내용은 일반적인 Dataflow 오류 문제 해결을 참조하세요.

조사 결과 장시간의 처리 시간이 사용자 변환으로 인해 발생한 것이 아닌 것으로 확인되면 Cloud 지원에 연락하고 조사 단계를 설명하는 것이 좋습니다.

작업이 작업 항목에서 멈춤

단일 작업 항목이 반복적으로 실패하여 재시도됨으로 인해 Dataflow에서 키 멈춤을 감지하면 다음 메시지가 표시됩니다.

Job is stuck due to failed and retried work item

Dataflow에서는 파이프라인의 모든 메시지가 특정 키에서 처리됩니다. 메시지를 처리하는 동안 오류가 발생하면 해당 메시지가 재시도됩니다. 메시지가 2~3회 재시도되어도 괜찮습니다. 그러나 연속으로 10회와 같이 오류가 반복해서 발생하는 경우 일반적으로 파이프라인 코드에 근본적인 문제가 있음을 나타냅니다. 키에서 특정 메시지가 재시도되면 같은 키의 다른 메시지가 진행될 수 없습니다. 메시지가 10회 이상 실패하면 자체적으로 문제가 해결되지 않을 수 있습니다. 이 메시지 오류로 인해 다음과 같은 파이프라인 문제가 발생할 수 있습니다.

  • 워터마크 지연
  • 백로그 누적
  • 드레이닝 작업이 완료되지 않도록 방지

이 문제를 디버깅하려면 권장사항에서 보고된 단계를 조사하고 로그를 검토하여 문제가 있는 코드를 식별합니다. 그런 다음 작업이 중단되지 않도록 새 파이프라인 코드로 작업을 업데이트합니다.

Streaming Engine이 사용 설정되지 않음

Dataflow에서 스트리밍 작업에 Streaming Engine이 사용 설정되어 있지 않은 것을 감지하면 다음 메시지가 표시됩니다.

This job isn't using Streaming Engine. It might benefit from having Streaming Engine enabled.

Streaming Engine을 사용하면 수평 자동 확장 개선, 지원 용이성 향상, 작업자 VM의 CPU, 메모리, Persistent Disk 스토리지 리소스 사용량 감소를 포함한 다양한 잠재적 이점을 얻을 수 있습니다. 또한 Streaming Engine은 리소스 기반 결제를 지원합니다.