데이터 샘플링을 사용하면 Dataflow 파이프라인의 각 단계에서 데이터를 관찰할 수 있습니다. 이 정보는 실행 중이거나 완료된 작업의 실제 입력과 출력을 보여주므로 파이프라인 문제를 디버깅하는 데 도움이 될 수 있습니다.
데이터 샘플링 용도에는 다음이 포함됩니다.
- 개발 중에 파이프라인 전체에서 생성되는 요소를 확인합니다. 
- 파이프라인에서 예외가 발생하면 해당 예외와 관련된 요소를 확인합니다. 
- 디버깅할 때 변환의 출력을 확인하여 출력이 올바른지 확인합니다. 
- 파이프라인 코드를 조사하지 않고도 파이프라인의 동작을 이해합니다. 
- 나중에 작업이 끝난 후 샘플링된 요소를 확인하거나 샘플링된 데이터를 이전 실행과 비교합니다. 
개요
Dataflow는 다음과 같은 방법으로 파이프라인 데이터를 샘플링할 수 있습니다.
- 주기적 샘플링. 이 유형의 샘플링에서 Dataflow는 작업이 실행될 때 샘플을 수집합니다. 샘플링된 데이터를 사용하여 파이프라인이 예상대로 요소를 처리하는지 확인하고 핫 키 또는 잘못된 출력과 같은 런타임 문제를 진단할 수 있습니다. 자세한 내용은 이 문서의 주기적인 데이터 샘플링 사용을 참조하세요. 
- 예외 샘플링. 이 유형의 샘플링에서 Dataflow는 파이프라인에서 예외가 발생하는 경우 샘플을 수집합니다. 샘플을 사용하면 예외가 발생할 때 처리 중인 데이터를 볼 수 있습니다. 예외 샘플링은 기본적으로 사용 설정되며 사용 중지할 수 있습니다. 자세한 내용은 이 문서의 예외 샘플링 사용을 참조하세요. 
Dataflow는 샘플링된 요소를 Java의 경우 gcpTempLocation 파이프라인 옵션으로, Python 및 Go의 경우 temp_location으로 지정된 Cloud Storage 경로에 씁니다. Google Cloud 콘솔에서 샘플링된 데이터를 보거나 Cloud Storage에서 원시 데이터 파일을 조사할 수 있습니다. 파일은 삭제될 때까지 Cloud Storage에 유지됩니다.
Dataflow 작업자가 데이터 샘플링을 실행합니다. 샘플링은 최선의 방식으로 실행됩니다. 일시적인 오류가 발생하면 샘플이 누락될 수 있습니다.
요구사항
데이터 샘플링을 사용하려면 Runner v2를 사용 설정해야 합니다. 자세한 내용은 Dataflow Runner v2 사용 설정을 참조하세요.
Google Cloud 콘솔에서 샘플링된 데이터를 보려면 다음 Identity and Access Management 권한이 필요합니다.
- storage.buckets.get
- storage.objects.get
- storage.objects.list
정기적 샘플링을 사용하려면 다음 Apache Beam SDK가 필요합니다.
- Apache Beam Java SDK 2.47.0 이상
- Apache Beam Python SDK 2.46.0 이상
- Apache Beam Go SDK 2.53.0 이상
예외 샘플링에는 다음 Apache Beam SDK가 필요합니다.
- Apache Beam Java SDK 2.51.0 이상
- Apache Beam Python SDK 2.51.0 이상
- Apache Beam Go SDK는 예외 샘플링을 지원하지 않습니다.
이러한 SDK부터 Dataflow는 기본적으로 모든 작업에 예외 샘플링을 사용 설정합니다.
주기적 데이터 샘플링 사용
이 섹션에서는 작업이 실행될 때 파이프라인 데이터를 지속적으로 샘플링하는 방법을 설명합니다.
주기적 데이터 샘플링 사용 설정
주기적 샘플링은 기본적으로 사용 중지되어 있습니다. 이를 사용 설정하려면 다음 파이프라인 옵션을 설정합니다.
자바
--experiments=enable_data_sampling
Python
--experiments=enable_data_sampling
Go
--experiments=enable_data_sampling
프로그래매틱 방식 또는 명령줄을 사용하여 옵션을 설정할 수 있습니다. 자세한 내용은 실험용 파이프라인 옵션 설정을 참조하세요.
Dataflow 템플릿을 실행할 때 additional-experiments 플래그를 사용하여 데이터 샘플링을 사용 설정합니다.
--additional-experiments=enable_data_sampling
주기적 샘플링이 사용 설정된 경우 Dataflow가 작업 그래프의 각 PCollection에서 샘플을 수집합니다. 샘플링 레이트는 대략 30초마다 1개의 샘플입니다.
데이터 볼륨에 따라서는 주기적 데이터 샘플링으로 인해 상당한 성능 오버헤드가 추가될 수 있습니다. 따라서 테스트 중에만 주기적 샘플링을 사용 설정하고 프로덕션 워크로드에서는 사용 중지하는 것이 좋습니다.
샘플 데이터 보기
Google Cloud 콘솔에서 샘플링된 데이터를 보려면 다음 단계를 수행합니다.
- Google Cloud 콘솔에서 Dataflow 작업 페이지로 이동합니다. 
- 작업을 선택합니다. 
- 하단 패널의 keyboard_capslock을 클릭하여 로그 패널을 확장하세요. 
- 데이터 샘플링 탭을 클릭합니다. 
- 단계 필드에서 파이프라인 단계를 선택합니다. 작업 그래프에서 단계를 선택할 수도 있습니다. 
- 컬렉션 필드에서 - PCollection을 선택합니다.
해당 PCollection에 대해 Dataflow에서 샘플을 수집한 경우 샘플링된 데이터가 탭에 표시됩니다. 탭에 각 샘플의 생성일과 출력 요소가 표시됩니다. 출력 요소는 컬렉션 요소의 직렬화된 표현이며 요소 데이터, 타임스탬프, 기간 및 창 정보를 포함합니다.
다음 예시에서는 샘플링된 요소를 보여줍니다.
자바
TimestampedValueInGlobalWindow{value=KV{way, [21]},
timestamp=294247-01-09T04:00:54.775Z, pane=PaneInfo{isFirst=true, isLast=true,
timing=ON_TIME, index=0, onTimeIndex=0}}
Python
(('THE', 1), MIN_TIMESTAMP, (GloblWindow,), PaneInfo(first: True, last: True,
timing: UNKNOWN, index: 0, nonspeculative_index: 0))
Go
KV<THE,1> [@1708122738999:[[*]]:{3 true true 0 0}]
다음 이미지는 샘플링된 데이터가Google Cloud 콘솔에 표시되는 방식을 보여줍니다.
 
 
예외 샘플링 사용
파이프라인에서 처리되지 않은 예외가 발생하면 해당 예외와 상관 관계가 있는 입력 요소 및 예외를 모두 볼 수 있습니다. 예외 샘플링은 지원되는 Apache Beam SDK를 사용할 때 기본적으로 사용 설정됩니다.
예외사항 보기
예외사항을 보려면 다음 단계를 수행합니다.
- Google Cloud 콘솔에서 Dataflow 작업 페이지로 이동합니다. 
- 작업을 선택합니다. 
- 로그 패널을 확장하려면 로그 패널에서 keyboard_capslock 패널 전환을 클릭합니다. 
- 데이터 샘플링 탭을 클릭합니다. 
- 단계 필드에서 파이프라인 단계를 선택합니다. 작업 그래프에서 단계를 선택할 수도 있습니다. 
- 컬렉션 필드에서 - PCollection을 선택합니다.- 예외 열에 예외 세부정보가 포함됩니다. 예외에는 출력 요소가 없습니다. 대신 출력 요소 열에 - Failed to process input element: INPUT_ELEMENT메시지가 포함됩니다. 여기서 INPUT_ELEMENT는 상관관계인 입력 요소입니다.
- 새 창에서 입력 샘플과 예외 세부정보를 보려면 새로 열기를 클릭합니다. 
다음 이미지는Google Cloud 콘솔에서 예외가 표시되는 방식을 보여줍니다.
 
 
예외 샘플링 사용 중지
예외 샘플링을 사용 중지하려면 다음 파이프라인 옵션을 설정합니다.
자바
--experiments=disable_always_on_exception_sampling
Python
--experiments=disable_always_on_exception_sampling
프로그래매틱 방식 또는 명령줄을 사용하여 옵션을 설정할 수 있습니다. 자세한 내용은 실험용 파이프라인 옵션 설정을 참조하세요.
Dataflow 템플릿을 실행할 때 additional-experiments 플래그를 사용하여 예외 샘플링을 사용 중지합니다.
--additional-experiments=disable_always_on_exception_sampling
보안 고려사항
Dataflow는 샘플링된 데이터를 개발자가 만들고 관리하는 Cloud Storage 버킷에 씁니다. Cloud Storage의 보안 기능을 사용하여 데이터의 보안을 강화하세요. 특히 다음과 같은 추가 보안 조치를 고려하세요.
- 고객 관리 암호화 키(CMEK)를 사용하여 Cloud Storage 버킷을 암호화합니다. 암호화 옵션 선택에 대한 자세한 내용은 니즈에 맞는 암호화 선택을 참조하세요.
- 데이터 파일이 일정 기간 후에 자동으로 삭제되도록 Cloud Storage 버킷에 TTL(수명)을 설정합니다. 자세한 내용은 버킷의 수명 주기 구성 설정을 참조하세요.
- Cloud Storage 버킷에 IAM 권한을 할당할 때 최소 권한의 원칙을 사용합니다.
샘플링된 데이터에 원시 값이 표시되지 않도록 PCollection 데이터 유형의 개별 필드를 난독화할 수도 있습니다.
- Python: __repr__또는__str__메서드를 재정의합니다.
- Java: toString메서드를 재정의합니다.
그러나 I/O 커넥터의 입력과 출력을 난독화하려면 커넥터 소스 코드를 수정해야 합니다.
결제
Dataflow가 데이터 샘플링을 수행하면 Cloud Storage 데이터 스토리지 및 Cloud Storage에서 읽기 및 쓰기 작업에 대한 요금이 청구됩니다. 자세한 내용은 Cloud Storage 가격 책정을 참조하세요.
각 Dataflow 작업자는 샘플을 일괄 기록하며 배치당 하나의 읽기 및 쓰기 작업이 발생합니다.
문제 해결
이 섹션에는 데이터 샘플링을 사용할 때의 일반적인 문제에 대한 정보가 포함되어 있습니다.
권한 오류
샘플을 볼 수 있는 권한이 없으면 Google Cloud 콘솔에 다음 오류가 표시됩니다.
You don't have permission to view a data sample.
이 오류를 해결하려면 필요한 IAM 권한이 있는지 확인합니다. 오류가 계속 발생하면 IAM 거부 정책이 적용되는 상황일 수 있습니다.
샘플이 표시되지 않음
샘플이 표시되지 않으면 다음을 확인합니다.
- enable_data_sampling옵션을 설정하여 데이터 샘플링을 사용 설정했는지 확인합니다. 데이터 샘플링 사용 설정을 참조하세요.
- Runner v2를 사용 중인지 확인합니다.
- 작업자가 시작되었는지 확인합니다. 작업자가 시작되어야 샘플링이 시작됩니다.
- 작업과 작업자가 정상 상태인지 확인합니다.
- 프로젝트의 Cloud Storage 할당량을 다시 한번 확인합니다. Cloud Storage 할당량 한도를 초과하면 Dataflow에서 샘플 데이터를 쓸 수 없습니다.
- 데이터 샘플링은 반복 가능한 항목에서 샘플링할 수 없습니다. 이러한 유형의 스트림에서는 샘플을 사용할 수 없습니다.