Dead-letter queues
출처: 문서
본문
데드 레터 큐
OpenSearch Data Prepper 파이프라인은 실패한 이벤트를 오프로드하고 분석에 접근할 수 있도록 데드 레터 큐(DLQ)를 지원해요.
Data Prepper 2.3부터는 s3 소스만 DLQ를 지원해요.
DLQ 작성기 구성
s3 소스에 DLQ 작성기를 구성하려면 pipeline.yaml 파일에 다음을 추가해요.
sink:
- opensearch:
hosts: ["https://opensearch:9200"]
index: my-index
username: admin
password: admin-password
insecure: true
dlq:
s3:
bucket: my-dlq-bucket
key_path_prefix: dlq-files/
region: us-west-2
sts_role_arn: arn:aws:iam::123456789012:role/dlq-role
bucket_owner: 123456789012
결과 DLQ 파일은 DLQ 객체의 JSON 배열로 출력돼요. s3 DLQ에 작성된 모든 파일은 다음 이름 패턴을 포함해요.
dlq-v${version}-${pipelineName}-${pluginId}-${timestampIso8601}-${uniqueId}
이름 패턴에서 다음 정보가 대체돼요.
version: Data Prepper 버전.pipelineName:pipelines.yaml에 표시된 파이프라인 이름.pluginId: DLQ 이벤트와 연결된 플러그인의 ID.
구성
DLQ는 다음 구성 옵션을 지원해요.
| 옵션 | 필수 | 유형 | 설명 |
|---|---|---|---|
bucket |
예 | String | DLQ가 실패한 레코드를 출력하는 버킷의 이름. |
key_path_prefix |
아니요 | String | Amazon Simple Storage Service(Amazon S3) 버킷에서 사용되는 key_prefix예요. 기본값은 ""이에요. /%{yyyy}/%{MM}/%{dd}와 같은 시간 값 패턴 변수를 지원하며, Java DateTimeFormatter에 나열된 변수를 포함해요. 예를 들어 /%{yyyy}/%{MM}/%{dd} 패턴을 사용할 때 key_prefix를 /2023/01/24로 설정할 수 있어요. |
region |
아니요 | String | S3 버킷의 AWS 리전이에요. 기본값은 us-east-1이에요. |
sts_role_arn |
아니요 | String | DLQ가 AWS S3 버킷에 쓰기 위해 사용하는 STS 역할이에요. 기본값은 null이며, 자격 증명에 표준 SDK 동작을 사용해요. 이 옵션을 사용하려면 S3 버킷에 s3:PutObject 권한이 구성되어 있어야 해요. |
bucket_owner |
아니요 | String | S3 버킷 소유자의 AWS 계정 ID예요. 설정하면 Data Prepper가 이 값을 expectedBucketOwner로 S3에 전달하고, 실제 버킷 소유자와 일치하지 않으면 S3가 쓰기를 거부해요. 기본값은 null이며, 명시적인 버킷 소유자 확인을 수행하지 않아요. |
OpenSearch 싱크와 함께 DLQ를 사용할 때 max_retries 옵션을 구성하여 싱크가 최대 재시도 횟수에 도달한 후 실패한 레코드를 DLQ로 보낼 수 있어요.
메트릭
DLQ는 다음 메트릭을 지원해요.
Counter
dlqS3RecordsSuccess: S3로 전송된 성공적인 레코드 수를 측정해요.dlqS3RecordsFailed: S3로 전송에 실패한 레코드 수를 측정해요.dlqS3RequestSuccess: 성공적인 S3 요청 수를 측정해요.dlqS3RequestFailed: 실패한 S3 요청 수를 측정해요.
Distribution summary
dlqS3RequestSizeBytes: S3 요청 페이로드 크기(바이트)의 분포를 측정해요.
Timer
dlqS3RequestLatency: 각 S3 요청을 보낼 때의 지연 시간(재시도 포함)을 측정해요.
DLQ 객체
DLQ는 다음 DLQ 객체를 지원해요.
pluginId: DLQ로 전송된 이벤트를 발생시킨 플러그인의 ID예요.pluginName: 플러그인의 이름이에요.failedData: 실패한 객체와 그 옵션을 포함하는 객체예요. 이 객체는 각 플러그인에 고유해요.pipelineName: 이벤트가 실패한 Data Prepper 파이프라인의 이름이에요.timestamp: 실패의 타임스탬프(ISO8601 형식)예요.