Amazon SQS의 CloudWatch 지표 액세스 - Amazon Simple Queue Service

Amazon SQS의 CloudWatch 지표 액세스

Amazon SQS는 CloudWatch에 다음 지표를 전송합니다.

참고

일부 지표의 경우, Amazon SQS의 분산 아키텍처로 인해 그 결과는 거의 비슷합니다. 대부분의 경우 그 수는 대기열에 있는 메시지의 실제 개수에 근접해야 합니다.

Amazon SQS 지표

Amazon SQS는 Amazon CloudWatchAWS/SQS 네임스페이스 아래에 운영 지표를 자동으로 게시합니다. 이러한 지표는 대기열 상태 및 성능을 모니터링하는 데 도움이 됩니다. SQS의 분산된 특성으로 인해 많은 값이 근사치이지만 대부분의 운영 결정에 사용하기에 충분히 정확합니다.

참고
  • 모든 지표는 대기열이 활성화된 경우에만 음수가 아닌 값을 내보냅니다.

  • 일부 지표(예: SentMessageSize)는 최소 하나의 메시지가 전송될 때까지 내보내지지 않습니다.

지표 설명 단위 보고 동작 주요 참고 사항
ApproximateAgeOfOldestMessage 대기열에서 처리되지 않은 가장 오래된 메시지의 수명입니다.

대기열에 최소 하나의 활성 메시지가 포함된 경우 보고됩니다.
  • 표준 대기열의 경우 메시지가 3회 이상 수신되고 삭제되지 않으면 SQS는 메시지를 대기열의 뒤로 옮깁니다. 그런 다음, 지표는 수신 임곗값을 초과하지 않은 다음 메시지의 수명을 반영합니다. 이 재정렬은 리드라이브 정책이 있는 경우에도 발생합니다.

  • 포이즌 필 메시지(반복적으로 수신되었지만 삭제되지 않은 메시지)는 성공적으로 처리될 때까지 이 지표에서 제외됩니다.

  • maxReceiveCount를 초과한 후 메시지가 DLQ로 이동하면 수명이 재설정됩니다. 이 경우 DLQ의 지표는 메시지가 원래 전송된 시간이 아니라 메시지가 이동한 시간을 반영합니다.

  • FIFO 대기열은 순서를 유지하기 위해 메시지를 재정렬하지 않습니다. 실패한 메시지는 삭제되거나 만료될 때까지 메시지 그룹을 차단합니다. DLQ가 구성된 경우 수신 임곗값에 도달한 후 메시지가 전송됩니다.

ApproximateNumberOfGroupsWithInflightMessages FIFO에만 해당합니다. 하나 이상의 진행 중인 메시지가 있는 메시지 그룹의 수입니다.

개수

FIFO 대기열이 활성 상태인 경우 보고됩니다.
  • 메시지는 소비자가 대기열에서 수신했지만 아직 삭제되거나 만료되지 않은 경우 진행 중인 것으로 간주됩니다.

  • 이 지표는 FIFO 대기열 처리량 문제를 해결하고 최적화하는 데 도움이 됩니다. 값이 높으면 일반적으로 강력한 동시성을 나타냅니다.

  • 대기열에 많은 백로그가 있고 이 값이 여전히 낮은 경우 소비자 규모를 조정하거나 활성 메시지 그룹 수를 늘리는 것이 좋습니다.

  • 처리량 및 진행 중 한도는 Amazon SQS 할당량 섹션을 참조하세요.

ApproximateNumberOfMessagesDelayed

대기열에서 지연되어 즉시 검색할 수 없는 메시지 수입니다.

개수

지연된 메시지가 대기열에 있는 경우 보고됩니다.
  • 기본 지연으로 구성된 대기열과 DelaySeconds 파라미터와 함께 전송된 개별 메시지에 적용됩니다.

  • 지연된 메시지는 지연 기간이 만료될 때까지 소비자에게 숨겨지며, 이는 대기열 백로그 또는 처리량에 대한 인식에 영향을 미칠 수 있습니다.

ApproximateNumberOfMessagesNotVisible 수신되었지만 아직 삭제되거나 만료되지 않은 진행 중 메시지 수입니다.

개수

진행 중 메시지가 있는 경우 보고됩니다.
  • 메시지는 ReceiveMessage API를 통해 소비자에게 전송된 후 진행 중 상태로 전환됩니다.

  • 이러한 메시지는 가시성 제한 시간 동안 다른 소비자에게 일시적으로 숨겨집니다.

  • 이 지표를 사용하여 메시지 처리 지연 또는 멈춘 소비자를 추적할 수 있습니다.

ApproximateNumberOfMessagesVisible 현재 검색 및 처리에 사용할 수 있는 메시지 수입니다.

개수

대기열이 활성 상태인 경우 보고됩니다.
  • 대기열의 현재 처리 백로그를 반영합니다.

  • 누적할 수 있는 메시지 수에는 제한이 없지만 대기열에 구성된 보존 기간이 적용됩니다.

  • 지속적으로 높은 값은 소비자가 적게 프로비저닝되었거나 처리 로직이 멈춘 것을 나타낼 수 있습니다.

NumberOfEmptyReceives¹ 메시지를 반환하지 않은 ReceiveMessage API 직접 호출 수입니다.

개수

수신 작업 중에 보고됩니다.
  • 이 지표는 폴링 동작 또는 활용도가 낮은 소비자 인스턴스의 비효율성을 식별하는 데 도움이 될 수 있습니다.

  • 대기열이 비어 있거나, 소비자가 짧은 폴링을 사용하거나, 메시지가 생성되는 속도보다 빠르게 처리되는 경우 값이 높아질 수 있습니다.

  • 이는 대기열 상태를 정확하게 나타내는 지표가 아닙니다. 서비스 측 동작을 반영하며 재시도를 포함할 수 있습니다.

NumberOfDeduplicatedSentMessages FIFO에만 해당합니다. 중복 제거되고 대기열에 추가되지 않은 전송된 메시지의 수입니다.

개수

중복 MessageDeduplicationId 값 또는 콘텐츠가 감지되면 보고됩니다.
  • SQS는 MessageDeduplicationId 또는 콘텐츠 기반 해싱(활성화된 경우)을 기반으로 메시지를 중복 제거합니다.

  • 값이 높으면 생산자가 5분의 중복 제거 기간 내에 동일한 메시지를 반복적으로 전송하고 있음을 나타낼 수 있습니다.

  • 이 지표를 사용하여 중복 생산자 로직 문제를 해결하거나 중복 제거가 의도한 대로 작동하는지 확인합니다.

NumberOfMessagesDeleted¹

대기열에서 성공적으로 삭제된 메시지의 수입니다.

개수

유효한 수신 핸들을 사용하여 각 삭제 요청에 대해 보고됩니다.
  • 이 지표는 동일한 메시지가 두 번 이상 삭제되더라도 성공한 모든 삭제 작업을 계산합니다.

  • 예상보다 값이 높은 일반적인 이유는 다음과 같습니다.

    • 가시성 제한 시간이 만료되고 메시지가 다시 수신된 후 다른 수신 핸들을 사용하여 동일한 메시지를 여러 번 삭제한 경우

    • 동일한 수신 핸들을 사용하여 중복 삭제한 경우. 여전히 성공 상태를 반환하고 지표를 증가시킴

  • 이 지표를 사용하여 메시지 처리 성공을 추적하되, 삭제된 고유 메시지의 정확한 수로 취급하지는 마세요.

NumberOfMessagesReceived¹ ReceiveMessage API에서 반환한 메시지 수입니다.

개수

수신 작업 중에 보고됩니다.
  • 여기에는 가시성 제한 시간 만료로 인해 나중에 대기열로 반환되는 메시지를 포함하여 소비자에게 반환되는 모든 메시지가 포함됩니다.

  • 삭제되지 않으면 단일 메시지를 여러 번 수신할 수 있으며, 이로 인해 이 지표가 전송된 메시지 수를 초과할 수 있습니다.

  • 이 지표를 사용하여 소비자 활동을 추적하되, 처리된 고유 메시지 수로 취급하지는 마세요.

NumberOfMessagesSent¹ 대기열에 성공적으로 추가된 메시지의 수입니다.

개수

성공한 각 수동 전송에 대해 보고됩니다.
  • DLQ를 직접 대상으로 하는 호출을 포함하여 SendMessage 또는 SendMessageBatch에 대한 수동 직접 호출이 집계됩니다.

  • maxReceiveCount를 초과한 후 DLQ로 자동으로 이동하는 메시지는 이 지표에 포함되지 않습니다.

  • 따라서 특히 리드라이브 정책이 보이지 않게 많은 메시지를 DLQ로 이동하는 경우 NumberOfMessagesSentNumberOfMessagesReceived보다 낮을 수 있습니다.

SentMessageSize¹

대기열로 성공적으로 전송된 메시지의 크기입니다.

바이트

최소 하나의 메시지가 전송될 때까지 내보내지지 않습니다.
  • 이 지표는 대기열이 첫 번째 메시지를 수신할 때까지 CloudWatch 콘솔에 표시되지 않습니다.

  • 이 지표를 사용하여 각 메시지의 크기를 바이트 단위로 추적합니다. 이는 페이로드 추세를 분석하거나 처리량 비용을 추정하는 데 유용합니다.

  • SQS의 최대 메시지 크기는 1MiB입니다.

ApproximateNumberOfNoisyGroups

공정 대기열에서 노이즈가 있는 것으로 간주되는 메시지 그룹의 수입니다. 노이즈가 있는 메시지 그룹은 멀티 테넌트 대기열의 노이즈가 있는 이웃 테넌트를 나타냅니다.

개수

대기열이 활성화된 경우 음수가 아닌 값이 보고됩니다.
  • 불균형한 리소스를 소비하는 메시지 그룹을 추적하여 멀티 테넌트 환경에서 잠재적인 노이즈가 있는 이웃 문제를 식별하는 데 도움이 됩니다.

  • 이 지표를 사용하여 노이즈가 있는 그룹 수가 허용 임곗값을 초과할 때 트리거되는 경보를 설정합니다. 이는 잠재적인 대기열 공정성 문제가 있음을 나타냅니다.

ApproximateNumberOfMessagesVisibleInQuietGroups

노이즈가 있는 메시지 그룹의 메시지를 제외하고 표시되는 메시지 수입니다.

개수

대기열이 활성화된 경우 음수가 아닌 값이 보고됩니다.
  • 노이즈가 많은 이웃의 메시지를 제외하고 표준 속도 메시지 그룹의 대기열 백로그에 대한 가시성을 제공합니다.

  • 노이즈가 있는 이웃의 영향을 필터링으로 제외하여 일반적인 메시지 그룹의 실제 처리 백로그를 식별하는 데 도움이 됩니다.

ApproximateNumberOfMessagesNotVisibleInQuietGroups 노이즈가 있는 메시지 그룹의 메시지를 제외한 진행 중 메시지 수입니다.

개수

대기열이 활성화된 경우 음수가 아닌 값이 보고됩니다.
  • 잘 작동하는 메시지 그룹에서 진행 중 메시지(처리 중이지만 아직 삭제되지 않음)를 추적합니다.

  • 이 지표를 사용하여 일반 메시지 그룹의 처리 처리량을 모니터링하고 노이즈가 있는 이웃이 원인이 아닌 처리 병목 현상을 감지할 수 있습니다.

ApproximateNumberOfMessagesDelayedInQuietGroups 노이즈가 있는 메시지 그룹의 메시지에서 지연되어 즉시 읽을 수 없는 메시지를 제외한 메시지 수입니다. 대기열이 지연 대기열로 구성되거나 메시지가 지연 파라미터와 함께 전송되었을 때 지연된 메시지가 발생할 수 있습니다.

개수

대기열이 활성화된 경우 음수가 아닌 값이 보고됩니다.
  • 정상 또는 예상한 처리량 패턴을 가진 메시지 그룹(대량 또는 노이즈가 있는 그룹과 반대)의 지연된 메시지 백로그를 모니터링하는 데 도움이 됩니다.

  • 일반적인 워크로드에 대한 향후 처리 요구 사항 및 용량 계획을 이해하는 데 유용합니다.

ApproximateAgeOfOldestMessageInQuietGroups 노이즈가 있는 메시지 그룹의 메시지를 제외하고 대기열에서 삭제되지 않고 가장 오래된 메시지의 수명입니다.

대기열이 활성화된 경우 음수가 아닌 값이 보고됩니다.
  • SLA 규정 준수를 모니터링하고 정상 또는 예상한 처리량 패턴인 메시지 그룹(지표가 왜곡될 수 있는 대량 또는 노이즈가 있는 메시지 그룹과 반대)의 처리 병목 현상을 감지하는 데 사용됩니다.

  • 이 지표를 사용하여 노이즈가 있는 이웃의 인위적으로 오래된 메시지를 무시하는 메시지 처리 제한 시간에 대한 경보를 설정합니다.

¹ 이러한 지표는 시스템 수준 활동을 반영하며 재시도, 중복 또는 지연된 메시지를 포함할 수 있습니다. 메시지 수명 주기 동작을 고려하지 않고 원시 개수를 사용하여 실시간 대기열 상태를 추정하지 마세요.

Dead Letter Queue(DLQ) 및 CloudWatch 지표

DLQ 작업 시에는 Amazon SQS 지표가 어떻게 작동하는지 이해하는 것이 중요합니다.

  • NumberOfMessagesSent - 이 지표는 DLQ에서 다르게 작동합니다.

    • 수동 전송 - DLQ로 수동으로 전송된 메시지는 이 지표로 캡처됩니다.

    • 자동 리드라이브 - 처리 실패로 인해 DLQ로 자동 이동한 메시지는 이 지표로 캡처되지 않습니다. 따라서 DLQ에 대해 NumberOfMessagesSent 지표와 NumberOfMessagesReceived 지표가 일치하지 않을 수 있습니다.

  • DLQ에 대한 권장 지표 - DLQ의 상태를 모니터링하려면 ApproximateNumberOfMessagesVisible 지표를 사용합니다. 이 지표는 DLQ에서 현재 처리할 수 있는 메시지 수를 나타냅니다.

공정 대기열 및 CloudWatch 지표

공정 대기열을 사용하면 Amazon SQS는 다음과 같은 추가 지표를 내보냅니다.

  • ApproximateNumberOfNoisyGroups

  • ApproximateNumberOfMessagesVisibleInQuietGroups

  • ApproximateNumberOfMessagesNotVisibleInQuietGroups

  • ApproximateNumberOfMessagesDelayedInQuietGroups

  • ApproximateAgeOfOldestMessageInQuietGroups

참고

QuietGroup 지표는 동등한 표준 대기열 수준 Approximate 지표의 하위 집합이지만 노이즈가 있는 이웃 그룹의 메시지는 제외됩니다.

노이즈가 있는 그룹

노이즈가 있는 메시지 그룹은 멀티 테넌트 대기열의 노이즈가 있는 이웃 테넌트를 나타냅니다.

잠잠한 그룹

노이즈가 있는 그룹을 제외한 메시지 그룹입니다.

SQS 공정 대기열 동작 관찰

Amazon SQS 공정 대기열의 영향을 모니터링하기 위해 Approximate..InQuietGroups 지표를 표준 대기열 수준 지표와 비교할 수 있습니다. 특정 테넌트에 대한 트래픽이 급증하는 동안 일반적인 대기열 수준 지표에서 백로그 증가 또는 메시지 수명 증가를 나타낼 수 있습니다. 그러나 잠잠한 그룹을 개별적으로 살펴보면 대부분의 노이즈가 없는 메시지 그룹 또는 테넌트가 영향을 받지 않음을 알 수 있고, 영향을 받는 총 메시지 그룹 수의 추정치를 제공할 수 있습니다.

이러한 새로운 지표는 Amazon SQS 공정 대기열 동작에 대해 유용한 개요를 제공하지만 어떤 특정 테넌트가 로드를 유발하는지 이해하면 도움이 될 수 있습니다. Amazon CloudWatch Contributor Insights에서는 상위 N개의 기여자, 총 고유 기여자 수 및 그 사용량에 대한 지표를 볼 수 있습니다. 이는 기존 지표를 내보낼 때 카디널리티(및 비용)가 높은 데이터로 이어질 수 있는 수천 개의 테넌트를 처리하는 시나리오에서 특히 유용합니다.

공정 대기열에 대한 구성 모니터링 예시는 GitHub의 샘플을 참조하세요.

Amazon SQS 지표 차원

CloudWatch의 Amazon SQS 지표는 단일 차원인 QueueName을 사용합니다. 모든 지표 데이터는 대기열 이름을 기준으로 그룹화되고 필터링됩니다.

모니터링 팁

주요 지표 및 CloudWatch 경보를 사용하여 SQS를 효과적으로 모니터링하여 대기열 백로그를 감지하고, 성능을 최적화하고, 서비스 한도를 지킵니다.

  • ApproximateNumberOfMessagesVisible을 기반으로 CloudWatch 경보를 설정하여 백로그 증가를 포착합니다.

  • NumberOfEmptyReceives를 모니터링하여 폴링 빈도를 조정하고 API 비용을 줄입니다.

  • FIFO 대기열에서 ApproximateNumberOfGroupsWithInflightMessages를 사용하여 처리량 한도를 진단합니다.

  • SQS 할당량을 검토하여 지표 임곗값 및 서비스 한도를 이해합니다.