Amazon CloudWatch Logs のスロットリングエラーを解決したいです。
簡単な説明
CloudWatch ログの API レート制限を超えると、API スロットリングが原因で RequestLimitExceeded エラーまたは ThrottlingException エラーが発生することがあります。次のシナリオに基づいてスロットリングエラーを解決します。
- ログにアクセスすると、CloudWatch ログで断続的なスロットリングが発生する。
- アプリケーションまたはスクリプトを使用して CloudWatch ログデータを取得するときに ThrottlingException エラーが発生する。
- PutLogEvents API を AWS Lambda 関数と統合すると、スロットリングエラーが発生する。
- 他の AWS サービスのログを有効にすると、PutResourcePolicy:ResourceLimitExceeded のスロットリングエラーが発生する。
解決方法
ログにアクセスすると、CloudWatch ログで断続的なスロットリングが発生する
FilterLogEvents と GetLogEvents API は、特定のログストリームまたはロググループからのログイベントを一覧表示するのに使用します。これらの API にはハードリミットが適用され、制限の引き上げの対象にはなりません。これらの API を使用してログイベントを検索し、ハードリミットに達すると、RateExceeded エラーが発生します。ハードリミットの詳細については、「CloudWatch Logs のクォータ」を参照してください。
このシナリオでのスロットリングエラーを防ぐためのベストプラクティスを次に示します。
アプリケーションまたはスクリプトを使用して CloudWatch ログデータを取得するときに ThrottlingException エラーが発生する。
コレクタースクリプトは CloudWatch ログの収集に使用します。DescribeLogStream または GetLogEvents API コールを使用してデータを取得します。データは、同じロググループ内の複数のログストリームまたは複数の時間範囲から取得されます。これらの API を使用すると、ThrottlingException エラーが発生することがあります。
このシナリオでのスロットリングエラーを防ぐためのベストプラクティスを次に示します。
- API コールを行うときは、エクスポネンシャルバックオフとリトライを使用してください。詳しくは、「エクスポネンシャルバックオフとジッター」および「リトライ動作」を参照してください。
- スケジュールされたアクションをランダム化して使用すると、一定期間にわたって API を分散できます。
- 連続する API コール間のスリープ間隔を追加します。また、同じスクリプトまたはアプリケーションが送信する API 間に遅延を追加します。API を短時間で連続して送信すると、レートエラーが発生しやすくなります。
- Splunk などの SIEM ソリューションを使用して CloudWatch からログを取得します。SIEM ソリューションを使用すると、複数のシステムからデータを収集し、そのデータを分析して異常な動作を検出できます。Splunk プラグインを使用すると、API スロットリングが発生する可能性があります。この問題を防ぐには、Amazon Kinesis Data Firehose を使用して CloudWatch ログのサブスクリプションフィルターを作成し、ログデータを Splunk に配信します。詳細については、Splunk のウェブサイトで「AWS 用 Splunk アドオンで Kinesis 入力を設定する」を参照してください。
PutLogEvents API コールを AWS Lambda 関数と統合すると、スロットリングエラーが発生する
PutLogEvents API を使用して、指定されたログストリームに 1 MB のバッチ単位でログをアップロードします。この API には、AWS リージョンごとのアカウントあたり 2500 TPS というデフォルトのレート制限があります。次のリージョンでは、レート制限は 5000 TPS です。
- 米国東部 (バージニア北部)
- 米国西部 (オレゴン)
- ヨーロッパ (アイルランド)
- ヨーロッパ (ミラノ)
- ヨーロッパ (パリ)
- ヨーロッパ (ストックホルム)
このシナリオでの TPS スロットリングエラーを解決するには、クォータの引き上げを申請してください。
他の AWS サービスのログを有効にすると、PutResourcePolicy:ResourceLimitExceeded のスロットリングエラーが発生する
PutResourcePolicy API は、他の AWS サービスが特定のアカウントにログイベントを配置することを許可するポリシーを作成または更新するのに使用します。アカウントには、リージョンごとに最大 10 のリソースポリシーを設定できます。これはハードリミットであり、増やすことはできません。
リージョンにあるポリシーを一覧表示するには、次のコマンドを実行します。
注: example-region は、必要なリージョンに置き換えます。
$ aws logs describe-resource-policies --region example-region
このスロットリングエラーを解決するには、delete-resource-policy コマンドで不要または使用していないリソースポリシーをすべて削除します。
または、複数のポリシーステートメントを 1 つのポリシーにまとめることもできます。この方法をとり、リソースポリシーの数が制限である 10 を超えないようにします。
関連情報
CloudWatch API で PutMetricData を呼び出すときにスロットリングを回避する方法を教えてください