Amazon SQS で利用可能な CloudWatchメトリクス - Amazon Simple Queue Service

Amazon SQS で利用可能な CloudWatchメトリクス

Amazon SQS は、次のメトリクスをCloudWatchに送信します。

注記

一部のメトリクスでは、Amazon SQS の分散アーキテクチャにより、結果は概算になります。ほとんどの場合、カウントはキュー内の実際のメッセージ数に近い数値になります。

Amazon SQS メトリクス

Amazon SQS は、AWS/SQS 名前空間の Amazon CloudWatch に運用メトリクスを自動的に公開します。これらのメトリクスは、キューのヘルスとパフォーマンスをモニタリングするのに役立ちます。SQS の分散特性により、多くの値は近似値となりますが、ほとんどの運用上の判断に十分な精度があります。

注記
  • すべてのメトリクスは、キューがアクティブな場合にのみ負以外の値を出力します。

  • 一部のメトリクス (SentMessageSize など) は、少なくとも 1 つのメッセージが送信されるまで出力されません。

メトリクス 説明 単位 報告動作 キーノート
ApproximateAgeOfOldestMessage キュー内で最も古い未処理メッセージの経過時間。

[秒]

キューにアクティブなメッセージが少なくとも 1 つ含まれている場合に報告されます。
  • 標準キューでは、メッセージが 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 に自動的に移動されるメッセージは、このメトリクスに含まれません。

  • その結果、NumberOfMessagesSentNumberOfMessagesReceived よりも低くなる可能性があります。特に、リドライブポリシーが多くのメッセージを背後で DLQ に移動している場合です。

SentMessageSize¹

キューに正常に送信されたメッセージのサイズ。

バイト

少なくとも 1 つのメッセージが送信されるまで出力されません。
  • このメトリクスは、キューが最初のメッセージを受信するまで CloudWatch コンソールに表示されません。

  • このメトリクスを使用して、各メッセージのサイズをバイト単位で追跡します。これは、ペイロードの傾向の分析やスループットコストの見積もりに役立ちます。

  • SQS の最大メッセージサイズは 1 MiB です。

ApproximateNumberOfNoisyGroups

フェアキューでノイジーと見なされるメッセージグループの数。ノイジーメッセージグループは、マルチテナントキューにおけるノイジーネイバーテナントを表します。

カウント

キューがアクティブな場合、負以外の値が報告されます。
  • 不均衡なリソースを消費するメッセージグループを追跡することで、マルチテナント環境で発生する可能性のあるノイジーネイバー問題を特定するのに役立ちます。

  • このメトリクスを使用して、ノイジーなグループの数が許容しきい値を超えたときにトリガーされるアラームを設定し、キューの公平性に問題が生じている可能性を示します。

ApproximateNumberOfMessagesVisibleInQuietGroups

ノイジーメッセージグループからのメッセージを除外して表示されるメッセージの数。

カウント

キューがアクティブな場合、負以外の値が報告されます。
  • ノイジーネイバーからのメッセージを除外して、標準レートのメッセージグループのキューバックログを可視化します。

  • ノイジーネイバーの影響を除外することで、一般的なメッセージグループの真の処理バックログを特定するのに役立ちます。

ApproximateNumberOfMessagesNotVisibleInQuietGroups ノイジーメッセージグループからのメッセージを除く、処理中メッセージの数。

カウント

キューがアクティブな場合、負以外の値が報告されます。
  • 適切に動作しているメッセージグループからの処理中メッセージ (処理中だがまだ削除されていない) を追跡します。

  • このメトリクスを使用して、通常のメッセージグループの処理スループットをモニタリングし、ノイジーネイバーによって引き起こされない処理のボトルネックを検出します。

ApproximateNumberOfMessagesDelayedInQuietGroups ノイジーメッセージグループからのメッセージを除外し、遅延してすぐに読み取ることができないメッセージの数。遅延メッセージは、キューが遅延キューとして構成されている場合、またはメッセージが遅延パラメータ付きで送信された場合に発生します。

カウント

キューがアクティブな場合、負以外の値が報告されます。
  • (大量のグループやノイジーグループではなく) 通常のスループットパターンまたは予想されるスループットパターンを持つメッセージグループからの遅延メッセージバックログをモニタリングするのに役立ちます。

  • 一般的なワークロードの将来の処理要件と容量計画を理解するのに役立ちます。

ApproximateAgeOfOldestMessageInQuietGroups ノイジーメッセージグループからのメッセージを除く、キュー内の削除されていない最も古いメッセージの経過時間。

[秒]

キューがアクティブな場合、負以外の値が報告されます。
  • SLA コンプライアンスをモニタリングし、通常のスループットパターンまたは予想されるスループットパターンを持つメッセージグループの処理ボトルネックを検出するために使用されます (メトリクスを歪める可能性のある大量のメッセージグループやノイジーメッセージグループとは異なります)。

  • このメトリクスを使用して、ノイジーネイバーからの人工的に古くなったメッセージを無視しつつ、メッセージ処理タイムアウトに対するアラームを設定できます。

¹これらのメトリクスはシステムレベルのアクティビティを反映し、再試行、重複、遅延メッセージが含まれる場合があります。メッセージライフサイクルの挙動を考慮せず、生のカウントだけを使用してリアルタイムキューの状態を推定しないでください。

デッドレターキュー (DLQ) と CloudWatch メトリクス

DLQ を使用する場合は、Amazon SQS メトリクスの動作を理解することが重要です。

  • NumberOfMessagesSent – このメトリクスの動作は DLQ によって異なります。

    • 手動送信 – DLQ に手動で送信されたメッセージは、このメトリクスによってキャプチャされます。

    • 自動リドライブ – 処理の失敗によって DLQ に自動的に移動されたメッセージは、このメトリクスではキャプチャされません。その結果、NumberOfMessagesSent メトリクスと NumberOfMessagesReceived メトリクスに DLQ の不一致が表示される場合があります。

  • 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 クォータを確認して、メトリクスのしきい値とサービスの制限を理解します。