Amazon CloudWatch Logs를 사용할 때 작업할 때 “RequestLimitExceeded” 또는 “ThrottlingException” 오류가 표시되고 API 직접 호출이 스로틀링됩니다.
간략한 설명
CloudWatch Logs를 사용할 때 API 속도 할당량을 초과할 수 있습니다. 이 경우 API 직접 호출이 스로틀링되고, RequestLimitExceeded 또는 ThrottlingException 오류가 발생합니다. 이러한 오류를 해결하려면 스로틀링 오류가 발생하는 위치와 시기를 식별해야 합니다. 이후 정보를 활용하여 속도 할당량 인상을 요청하십시오.
해결 방법
로그에 액세스할 때 CloudWatch Logs에서 간헐적으로 스로틀링 오류 발생
로그 이벤트 또는 로그 스트림을 나열하려면 FilterLogEvents 또는 GetLogEvents API 직접 호출을 사용하십시오. 이러한 API 직접 호출은 할당량 증가에 해당되지 않습니다. 하지만 FilterLogEvents API를 사용하여 지정된 로그 그룹에서 로그 이벤트를 검색하는 경우, 할당량이 발생합니다. 할당량은 AWS 계정 또는 AWS 리전당 5 TPS(초당 트랜잭션)입니다. 이 할당량에 도달하면 속도 RateExceeded 오류가 발생합니다.
스로틀링 오류를 방지하려면 구독 필터를 사용하여 CloudWatch Logs에서 실시간으로 로그 데이터를 즉시 검색합니다. 자세한 내용은 로그 그룹 수준 구독 필터 및 구독을 통한 로그 데이터의 실시간 처리를 참조하십시오.
또한 CloudWatch Logs Insights를 사용하여 CloudWatch Logs에서 로그 데이터를 신속하게 가져오는 것도 바람직합니다. 특정 로그 그룹을 보려면 쿼리를 사용하여 로그를 필터링합니다. 배치 사용 사례의 경우 Amazon Simple Storage Service(Amazon S3)로 로그 데이터를 내보내야 합니다.
참고: CloudWatch Logs에서 데이터를 내보내기 전에 로그 데이터를 처리하는 데 최대 12시간이 걸릴 수 있습니다. 실시간 분석 및 처리에 이 방법을 사용하는 것은 바람직하지 않습니다.
스크립트를 사용하여 CloudWatch 로그 데이터를 검색할 때 ThrottlingException 오류 발생
CloudWatch Logs를 수집하기 위해 수집기 스크립트를 작성할 수 있습니다. 동일한 로그 그룹의 서로 다른 로그 스트림 또는 서로 다른 시간대에서 데이터를 가져오려면 DescribeLogStreams 또는 GetLogEvents API를 직접 호출하는 스트립트를 생성하십시오. 하지만 FilterLogEvents, GetLogEvents 및 DescribeLogStreams와 같은 API 직접 호출은 자동화가 아닌 사용자 상호 작용을 위해 설계되었습니다. 스크립트에서 이러한 API를 사용하는 경우 API 직접 호출이 스로틀링되고 오류가 발생합니다.
이 사용 사례에서 스로틀링 오류를 방지하려면 API 직접 호출 시 지수 백오프 및 재시도를 사용하십시오. 자세한 내용은 지수 백오프 및 지터와 재시도 동작을 참조하십시오. 시간에 따라 API 직접 호출을 분산해야 합니다. 일정 시간 동안 작업이 분산되도록 무작위로 작업을 예약하십시오.
API 직접 호출을 빠르게 연속해서 전송할 경우 속도 오류가 발생할 수 있습니다. 이 문제를 방지하려면 연속된 API 직접 호출 사이에 절전 간격을 추가합니다. 또한 동일한 스크립트나 애플리케이션이 전송하는 API 직접 호출 간에 지연을 추가합니다.
Splunk와 같은 SIEM(보안 정보 및 이벤트 관리) 솔루션을 사용하여 CloudWatch에서 로그를 검색할 때 Splunk 플러그인으로 인해 API 스로틀링 오류가 발생할 수 있습니다. 이 문제를 방지하려면 Amazon Data Firehose로 CloudWatch Logs 구독 필터를 생성하십시오. 이후 로그 데이터를 Splunk에 전달하십시오. 자세한 내용은 Splunk 웹사이트에서 Introduction to the Splunk Add-on for Amazon Web Services를 참조하십시오.
PutLogEvents API 직접 호출을 Lambda 함수와 통합할 때 스로틀링 오류 발생
PutLogEvents API 직접 호출을 AWS Lambda 함수와 통합하면 PutLogEvents는 로그를 지정된 로그 스트림에 1MB 배치 단위로 업로드합니다. 이 API의 속도 할당량은 리전별로 계정당 5,000 TPS(초당 트랜잭션)입니다.
자세한 내용을 알아보고 할당량 증가를 요청하려면 CloudWatch Logs 할당량을 참조하십시오.
CloudWatch Logs 서비스 할당량 관리
AWS는 성능을 보호하고 가용성을 보장하기 위해 서비스 할당량을 정의합니다. CloudWatch에는 지표, 경보, API 요청 및 경보 이메일 알림에 대한 할당량이 있습니다. 서비스 할당량을 확인하고 임계값에 도달하는 경우 경보를 설정하려면 다음 단계를 완료하십시오.
- Service Quotas 콘솔을 엽니다.
- 탐색 창에서 **AWS services(AWS 서비스)**를 선택합니다.
- AWS services(AWS 서비스) 목록에서 Amazon CloudWatch Logs를 검색합니다.
- Service quotas(서비스 할당량) 목록에는 서비스 할당량 이름, 적용된 값(사용 가능한 경우), AWS 기본 할당량, 할당량 값 조정 가능 여부 등 여러 속성 또는 옵션이 표시됩니다.
- 서비스 할당량에 대한 자세한 정보를 보려면 할당량 이름을 선택하십시오. 예를 들어 GetLogEvents throttle limit in transactions per second를 선택하면 다음 항목이 표시됩니다.
설명
할당량 코드
할당량 ARN
사용률: %
적용된 할당량 값
AWS 기본 할당량 값
조정 가능: Y/N
- Amazon CloudWatch alarms(Amazon CloudWatch 경보) 섹션에서 **Create alarm(경보 생성)**을 선택하고, 경보 임계값 및 경보 이름을 입력합니다.
관련 정보
CloudWatch API에서 PutMetricData를 직접 호출할 때 스로틀링을 방지하려면 어떻게 해야 합니까?