Kinesis Data Streams 문제를 모니터링하고 해결하려면 어떤 지표를 사용해야 합니까?

최종 업데이트 날짜: 2020년 6월 30일

Amazon Kinesis Data Streams에 대한 수신 및 발신 데이터를 모니터링하려고 합니다. 어떤 지표를 사용해야 합니까?

해결 방법

스트림 수준 지표 사용

Amazon CloudWatch 지표를 사용하여 Amazon Kinesis 데이터 스트림의 성능과 처리량을 지속적으로 모니터링할 수 있습니다. 다음 지표는 생산자 및 소비자 문제를 모니터링하는 데 도움이 될 수 있습니다.

  • GetRecords.IteratorAgeMilliseconds: 모든 GetRecords 요청에 대한 스트림에서 마지막 레코드의 경과 시간(밀리초)을 측정합니다. 이 지표의 값이 0이면 레코드가 스트림 내에서 현재 상태임을 나타냅니다. 값이 작을수록 좋습니다. 성능 문제를 모니터링하려면 스트림의 소비자 수를 늘려 데이터 처리 속도를 높입니다. 애플리케이션 코드를 최적화하려면 소비자 수를 늘려 레코드 처리 지연을 줄입니다.
  • ReadProvisionedThroughputExceeded: 지정된 기간에 Kinesis Data Streams의 서비스 또는 샤드 제한을 초과하여 조절된 GetRecords 호출 수를 측정합니다. 값이 0이면 데이터 소비자가 서비스 할당량을 초과하지 않음을 나타냅니다. 다른 값은 처리량 제한을 초과하여 추가 샤드가 필요함을 나타냅니다. 이 지표는 스트림의 읽기/초/샤드가 5를 초과하지 않거나 MB/초/샤드가 2를 초과하지 않는지 확인합니다. 향상된 모니터링을 활성화하여 스트림에 핫 샤드가 없는지 확인할 수 있습니다.
  • WriteProvisionedThroughputExceeded: PUT 또는 데이터 생산자(예: ReadProvisionedThroughputExceeded)를 측정하여 스트림에 병목 현상이 발생하는지 확인할 수 있습니다. 샤드에 쓰는 경우 이 지표는 데이터 스트림에 대한 서비스 할당량을 초과합니다. PUT 요청이 1MB/초/샤드 또는 1,000레코드/샤드/초를 초과하지 않는지 확인하십시오. 파티션 키가 고르게 분산되어 있고, 스트림의 핫 샤드를 확인하는 향상된 모니터링이 활성화되어 있는지 확인합니다. 샤드 포화에 따라 처리량을 늘릴 수 있도록 스트림의 샤드 수를 업데이트하는 것이 좋습니다.
  • PutRecord.SuccessPutRecords.Success: 지정된 기간에 데이터 생산자가 스트림으로 보낸 PutRecords 요청의 레코드 수를 측정합니다. 이 지표는 실패한 레코드에 대한 효과적인 재시도 로직을 확인합니다.
  • GetRecords.Success: 스트림에서 지정된 기간에 성공한 GetRecords 요청 수를 측정합니다. 실패한 레코드에 대한 효과적인 재시도 로직을 확인합니다.
  • GetRecords.Latency: 지정된 기간에 스트림의 각 GetRecords 작업에 소요된 시간을 측정합니다. 스트림 처리량을 늘리기에 충분한 물리적 리소스 또는 레코드 처리 로직을 확인합니다. 대용량 데이터 배치를 처리하여 애플리케이션의 네트워크 및 기타 다운스트림 지연 시간을 줄입니다. Kinesis Client Library(KCL)의 경우 ProcessTask.Time 지표를 조사하여 지연되는 애플리케이션의 처리 시간을 모니터링할 수 있습니다. GetRecords.Latency 지표는 IDLE_TIME_BETWEEN_READS_IN_MILLIS 설정이 스트림 처리 속도를 따르도록 설정되어 있는지 확인합니다.
  • PutRecords.Latency: 지정된 기간에 스트림의 각 PutRecords 작업에 소요된 시간을 측정합니다. PutRecords.Latency 값이 높으면 레코드를 더 큰 파일로 집계하여 배치 데이터를 Kinesis 데이터 스트림에 배치합니다. 여러 스레드를 사용하여 데이터를 쓸 수도 있습니다. PutRecords API의 조절 및 재시도 로직은 스트림의 각 PutRecords 작업에 대한 지연 시간 및 소요 시간에 영향을 줄 수 있습니다.

그런 다음 나열된 지표에 대해 Average 통계를 사용하여 스트림의 성능과 처리량을 모니터링합니다.

참고: GetRecords.IteratorAgeMilliseconds의 경우 Maximum 통계를 사용하여 읽기 작업이 지연되는 소비자에 대한 데이터 손실 위험을 줄여야 합니다. 지표를 평가할 데이터 포인트를 트리거하도록 CloudWatch 경보를 구성하십시오. CloudWatch 경보에 대한 자세한 내용은 Amazon CloudWatch 경보 사용을 참조하십시오.

향상된 팬아웃 기능을 사용하는 경우 다음 지표를 사용하여 Kinesis Data Streams를 모니터링합니다.

  • SubscribeToShard.RateExceeded: 작업에 허용되는 초당 호출 수 초과 또는 이미 있는 활성 구독으로 인해 구독 시도가 실패하는 시간을 측정합니다.
  • SubscribeToShard.Success: SubscribeToShard 작업의 성공 여부를 확인합니다.
  • SubscribeToShardEvent.Success: 활성 구독에 대한 이벤트가 성공적으로 게시되는지 확인합니다.
  • SubscribeToShardEvent.Bytes: 지정된 기간에 샤드에 수신된 바이트 수를 측정합니다.
  • SubscribeToShardEvent.Records: 지정된 기간에 샤드에 수신된 레코드 수를 측정합니다.
  • SubscribeToShardEvent.MillisBehindLatest: 스트림에 기록된 SubscribeToShard 이벤트의 현재 시간과 마지막 레코드의 차이를 측정합니다.

향상된 샤드 수준 지표 활성화

CloudWatch에서 샤드 수준 지표를 활성화하여 특정 작업을 모니터링하고 데이터 생산자 및 소비자 문제를 해결할 수 있습니다. 예를 들어 샤드 수준 지표를 활성화하면 고르지 않은 워크로드 배포와 같은 문제를 식별하는 데 도움이 될 수 있습니다.

향상된 모니터링을 활성화하려면 다음 단계를 수행하십시오.

참고: EnableEnhancedMonitoring API 요청 또는 enable-enhanced-monitoring AWS CLI를 사용할 수도 있습니다.

1.    Kinesis 콘솔을 엽니다.

2.    특정 리전을 선택합니다.

3.    탐색 창에서 [데이터 스트림]을 선택합니다.

4.    [데이터 스트림 이름]에서 Kinesis 데이터 스트림을 선택합니다.

5.    [구성]을 선택합니다.

6.    [향상된(샤드 수준) 지표]에서 [편집]을 선택합니다.

7.    드롭다운 메뉴에서 향상된 모니터링에 대한 지표를 선택합니다.

8.    [변경 사항 저장]을 선택하여 구성 설정을 적용합니다.

API 호출 관련 추가 문제 해결

다음 API 호출을 사용하여 Kinesis Data Streams에서 데이터를 읽거나 쓸 수도 있습니다.

  • CreateStream: 각 계정에 대해 초당 5개 트랜잭션으로 제한됩니다.
  • DeleteStream: 각 계정에 대해 초당 5개 트랜잭션으로 제한됩니다.
  • ListStreams: 각 계정에 대해 초당 5개 트랜잭션으로 제한됩니다.
  • GetShardIterator: 열린 각 샤드에 대해 계정별로 초당 5개 트랜잭션으로 제한됩니다.
  • MergeShards: 각 계정에 대해 초당 5개 트랜잭션으로 제한됩니다.
  • DescribeStream: 각 계정에 대해 초당 10개 트랜잭션으로 제한됩니다.
  • DescribeStreamSummary: 각 계정에 대해 초당 20개 트랜잭션으로 제한됩니다.

이러한 API 호출을 사용하면 AWS CloudTrail 로그에서 조절을 모니터링할 수 있습니다. Kinesis Data Streams API 호출 및 CloudTrail에 대한 자세한 내용은 AWS CloudTrail을 사용하여 Amazon Kinesis Data Streams API 호출 로깅을 참조하십시오.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?