Amazon CloudWatch Logs の PutLogEvents API の単一ログストリームあたりのリクエストクォータがなくなり制限が緩和されました
2022/11/4 のアップデートにより、AWS CloudWatch Logs の PutLogEvents API のクォータに単一ログストリームあたり秒間5リクエストまでの制限がなくなりました。加えて、PutLogsEvents API コール時に必須だったシーケンストークン付与が必須ではなくなりました。
なにがうれしいのか
単一ログストリームあたりのリクエスト数制限がなくなった
単一のログストリームにハイスループットでログを送信してもクォータに引っかかる可能性が減りました。しかし、引き続きリージョンレベルのクォータは有効です。制限に引っかることがなくなったわけではありませんが大幅に制限緩和され、CloudWatch Logs のクォータの考慮点がひとつ減りシンプルに利用できるようになりました。
従来は単一ログストリームあたり秒間5リクエストまでの制限がありました。以下の構成の様に複数の FireLens(Fluent Bit)コンテナから同じログストリームへログを送信すると従来の制限に引っかかりやすかったです。n個の Fluent Bit から 1ログストリームへですから無理もないですよね。ちなみに制限を超過するとThrottlingException
エラーが記録されます。
-
Icons made by Freepik from www.flaticon.com
以前、FireLens(Fluent Bit)を利用したログルーティングで CloudWatch Logs へログを保存する際に秒間5リクエストのクォータに引っかかりThrottlingException
エラーを発生させた経験があります。
ログの送信先(保存先)を複数のログストリームにしてもThrottlingException
エラー発生する可能性はあります。ですが、単一のログストリームを指定してログを送信するよりはThrottlingException
エラーを防ぐ対策としては有効でした。1 Fluent Bitあたり1ログストリームですからね。
-
Icons made by Freepik from www.flaticon.com
今回のアップデートで単一ログストリームのリクエスト制限がなくなりました。よりハイスループットでログを CloudWatch Logs のログストリームに送信しても安心です。ですが、引き続きリージョンレベルのクォータが有効です。とはいえログストリームへのログ送信量の制限は格段に引き上がありました。
ひとつのAWSアカウントに多数のシステムが稼働しており、CloudWatch Logs へ高頻度で大量のログを保存する必要がある場合はアカウントレベル、リージョンレベルで有効なサービスクォータを気にしつつ設計する必要があります。
CloudWatch Logs のクォータについては最新情報を確認しておくとよいです。
シーケントークンが必須ではなくなった
シーケンストークンが必須ではなくなりました。従来は PutLogEvents をコールするたびに CloudWatch から発行されるシーケンストークンが必要でした。予期していないシーケンストークンを受け取るとInvalidSequenceToken
エラーが発生します。InvalidSequenceToken
のエラー解消方法については以下の記事が詳しいのご参照ください。
2023/1/11追記InvalidSequenceTokenエラーが発生しなくなったため、エラー対処のページが削除されていました。存在していたときの該当ページを画像で残しておきます。
以下の構成を例にすると FireLens で起動している Fluent Bitコンテナなどの複数のソースから単一のログストリームへログを送信時にInvalidSequenceToken
エラーが発生しがちな状況です。
-
Icons made by Freepik from www.flaticon.com
後方互換を維持のために仮にシーケンストークンを付与、無効なシーケンストークンを付与してもInvalidSequenceToken
エラーを返さないようになったとのことです。
おわりに
ThrottlingException
エラーの件は複数のログストリームに分けても秒間5リクエスト制限が気がかりだったのですが、今回のアップデートでリージョンレベルのクォータを気にするだけで良くなりました。大幅な制限緩和な嬉しいアップデートでした。ということを共有したかったので図を書いた次第です。CloudWatch Logs の構成要素であるログストリームが一体どこの部分かきっとわかりにくいですから。InvalidSequenceToken
エラーの件は今まで直接確認したことはなかったのですが、シーケンストークンが必須ではなくなり考慮する事項がひとつ減りユーザーには嬉しいアップデートではないでしょうか。