CloudWatch Logs에서 제한을 결정하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 4월 6일

Amazon CloudWatch Logs로 작업할 때 RequestLimitExceeded 또는 ThrottlingException 오류가 발생하여 API 호출이 제한되었습니다. CloudWatch Logs에서 제한을 방지하려면 어떻게 해야 하나요?

간략한 설명

CloudWatch Logs로 작업할 때 API 속도 제한을 초과할 수 있습니다. 이 경우 RequestLimitExceeded 또는 ThrottlingException 오류가 발생하고 API 호출이 제한됩니다. 이러한 오류를 해결하고 정보에 입각한 속도 제한 증가 요청을 할 수 있도록 제한이 발생하는 위치와 시기를 식별해야 합니다.

해결 방법

로그에 액세스할 때 CloudWatch Logs에서 간헐적으로 제한

FilterLogEvents 또는 GetLogEvents API 호출을 사용하여 로그 이벤트 또는 로그 스트림을 나열할 수 있습니다. 이러한 API 호출에는 엄격한 제한이 있으며 이는 한도 증가 대상이 아닙니다. 다시 말해, FilterLogEvents API를 사용하여 지정된 로그 그룹에서 로그 이벤트를 검색하는 경우 기본 quaAPI의 기본 할당량은 계정/리전당 초당 트랜잭션(TPS) 5건입니다. 이 제한에 도달하면 RateExceeded 오류가 표시됩니다.

이 사용 사례의 제한 오류를 방지하려면 다음 모범 사례를 사용하세요.

  • 구독 필터를 사용하여 CloudWatch Logs에서 실시간으로 로그 데이터를 즉시 검색합니다. 자세한 내용은 CloudWatch Logs 구독 필터 사용 및 구독을 사용한 로그 데이터의 실시간 처리 단원을 참조하세요.
  • CloudWatch Logs Insights를 사용하여 CloudWatch Logs에서 로그 데이터를 빠르게 가져올 수 있습니다. 쿼리를 사용하여 로그를 필터링하여 특정 로그 그룹을 볼 수도 있습니다.
  • 배치 사용 사례를 위해 Amazon Simple Storage Service(Amazon S3)로 로그 데이터 내보내기. 이 방법은 CloudWatch Logs에서 로그 데이터를 내보낼 수 있기까지 최대 12시간이 걸릴 수 있으므로 실시간 분석 및 처리에는 권장되지 않습니다.

애플리케이션/스크립트를 사용하여 CloudWatch Logs 데이터를 가져올 때 발생하는 ThrottlingException 오류

CloudWatch Logs를 수집하기 위해 수집기 스크립트를 개발할 수 있습니다. 이 스크립트는 동일한 로그 그룹의 서로 다른 로그 스트림 또는 다른 시간 프레임에서 데이터를 가져오기 위해 DescribeLogStream 또는 GetLogEvents API 호출을 시도합니다. 하지만 FilterLogEvents, GetLogEvents 및 DescribeLogStreams와 같은 API 호출은 자동화가 아닌 사람의 상호 작용을 위해 설계되었으므로 오류가 발생하고 API 호출이 제한됩니다.

이 사용 사례에서 제한을 방지하려면 다음 모범 사례를 사용하세요.

  • API 호출을 할 때 지수 백오프 및 재시도를 사용합니다. 자세한 내용은 지수 백오프 및 지터AWS의 오류 재시도 및 지수 백오프 단원을 참조하세요.
  • 시간이 지남에 따라 API 호출을 배포합니다. 일정 기간 동안 분산되도록 일부 무작위를 사용하여 작업을 예약합니다.
  • 연속 API 호출 사이에 중지 간격을 추가합니다. 동일한 스크립트 또는 애플리케이션에서 전송되는 API 호출 사이에 약간의 지연을 추가합니다. API 호출이 모두 빠르고 연속적으로 전송되면 속도 오류가 발생할 가능성이 더 큽니다.
  • 경우에 따라 Splunk와 같은 SIEM 솔루션을 사용하여 CloudWatch에서 로그를 가져올 수 있습니다. SIEM 솔루션은 여러 시스템에서 데이터를 수집하고, 수집한 데이터를 분석하여 비정상적인 동작을 감지하는 데 사용됩니다. Splunk 플러그 인을 사용할 경우 API 제한이 발생할 수 있습니다. 이 문제를 방지하려면 Amazon Kinesis Data Firehose로 CloudWatch Logs 구독 필터를 생성하고 로그 데이터를 Splunk로 전송해야 합니다. 자세한 내용은 AWS용 Splunk 추가 기능에 대한 Kinesis 입력 구성 단원을 참조하세요.

PutLogEvents API 호출을 Lambda 함수와 통합할 때 발생하는 제한 오류

PutLogEvents API 호출은 1MB의 배치로 지정된 로그 스트림에 로그를 업로드하는 데 사용됩니다. 이 API에는 두 가지 속도 제한이 있습니다.

  • 로그 스트림당 초당 5건의 요청. 추가 요청은 제한됩니다. 이 할당량은 변경할 수 없습니다.
  • 계정당, 리전당 초당 800건의 트랜잭션. 이는 미국 동부(버지니아 북부), 미국 서부(오레곤) 및 EU(아일랜드)과 같이 리전당 계정당 초당 1,500건의 트랜잭션이 할당되는 리전을 제외하고 적용됩니다. 할당량 증가를 요청할 수 있습니다.

이에 대한 자세한 내용과 할당량 증가를 요청하려면 CloudWatch Logs 할당량 단원을 참조하세요.

지정된 로그 스트림에 로그를 쓰려면 요청에 시퀀스 토큰을 포함해야 합니다. 이는 이전 호출에 대한 응답에서 마지막으로 추출됩니다. 경우에 따라 PutLogEvent를 호출하기 전에 DescribeLogStreams API를 사용하여 로그 스트림에 대한 다음 시퀀스 토큰을 가져올 수 있습니다. PutLogEvent API는 DescribeLogsStream보다 한도가 훨씬 더 높으며, 이로 인해 제한이 발생합니다. 이를 완화하려면 DescribeLogStreams 대신 PutLogEvents API를 사용하여 시퀀스를 가져와야 합니다. 시퀀스 토큰 없이 PutLogEvents API를 사용하면 400 상태 코드가 표시되지만 이 오류 메시지가 표시되면 다음 시퀀스 토큰을 가져옵니다. 이 시퀀스 토큰을 PutLogEvents API와 함께 다시 사용할 수 있습니다.

이 사용 사례에서 제한을 방지하려면 다음 팁을 사용하세요.

  • 동일한 API 호출에서 여러 로그 이벤트를 결합해 봅니다.
  • API 호출을 더 많은 로그 스트림으로 확산합니다.
  • 지수 백오프 및 지터와 함께 재시도 로직을 적용합니다. 자세한 내용은 워크로드의 API 제한 관리 및 모니터링 단원을 참조하세요.
  • 시간이 지남에 따라 API 호출을 균등하게 배포합니다.

CloudWatch Logs Service Quotas 관리

AWS는 성능을 보호하고 가용성을 보장하기 위해 서비스에 대한 할당량을 정의합니다. CloudWatch에는 지표, 경보, API 요청 및 경보 이메일 알림에 대한 할당량이 있습니다. 임계 값에 도달하면 다음 단계를 사용하여 Service Quotas를 시각화하고 경보를 설정합니다.

  1. Service Quotas 콘솔을 엽니다.
  2. 탐색 창에서 AWS 서비스(AWS services)를 선택합니다.
  3. AWS 서비스(AWS services) 목록에서 Amazon CloudWatch Logs를 검색합니다.
  4. 서비스 할당량(Service quotas) 목록에서 서비스 할당량 이름, 적용된 값(사용 가능한 경우), AWS 기본 할당량 및 할당량 값의 조정 가능 여부를 확인할 수 있습니다.
  5. 설명과 같은 서비스 할당량에 대한 자세한 정보를 보려면 할당량 이름을 선택합니다.
  6. 할당량 이름을 선택하면 이 할당량에 대한 자세한 정보를 볼 수 있습니다. 예를 들어 GetLogEvents의 초당 트랜잭션 제한 한도(GetLogEvents throttle limit in transactions per second)를 선택하면 다음이 표시됩니다.
    • 설명
    • 할당량 코드
    • 할당량 ARN
    • 사용률: %
    • 적용된 할당량 값
    • AWS 기본 할당량 값
    • 조절 가능: 예/아니요
  7. Amazon CloudWatch 경보(Amazon CloudWatch alarms) 섹션에서 경보 생성(Create alarm)을 선택하고 경보 임계 값(Alarm threshold)경보 이름(Alarm name)을 입력합니다.

이 문서가 도움이 되었나요?


Besoin d'aide pour une question technique ou de facturation ?