私の Amazon CloudWatch Logs の請求額が異常に高いです。CloudWatch Logs のコストを増加させているロググループを特定したいです。
簡単な説明
CloudWatch Logs の請求額が急激に増加するのは、特定のロググループの取り込みデータまたはストレージデータの増加が原因である可能性があります。CloudWatch Logs メトリクスを使用してデータ使用量を確認します。次に、AWS 請求書を確認して、請求金額の増加の原因となっているロググループを特定します。
解決策
取り込んでいるデータ量を確認する
IncomingBytes メトリクスは、CloudWatch ロググループに取り込まれたデータの量をほぼリアルタイムで示します。このメトリクスは、次の情報を判断するのに役立ちます。
- 請求額の最も大きな原因となっているロググループ。
- ロググループへの受信データにおける急激な増加、または新規アプリケーションによる段階的な増加。
- 特定の期間にプッシュされるデータ量。
少数のロググループをクエリする
次の手順を実行します。
- CloudWatch コンソールを開きます。
- ナビゲーションペインで [すべてのメトリクス] を選択します。
- ロググループごとに、次の手順を実行します。<br id=hardline_break/>
[ログ] 名前空間を選択します。<br id=hardline_break/>
[ロググループメトリクス] を選択します。<br id=hardline_break/>
個々の IncomingBytes メトリクスを選択します。<br id=hardline_break/>
[グラフ化したメトリクス] タブを選択します。
- [統計] で [合計] を選択します。
- [期間] で [30 日] を選択します。
- [オプション] タブを選択し、[ウィジェットタイプ] セクションで [数値] を選択します。
- グラフの上部にある [カスタム] を選択し、次に [絶対値] を選択して時間範囲を設定します。過去 30 日間に該当する開始日と終了日を選択します。
大量のロググループをクエリする
次の手順を実行します。
- CloudWatch コンソールを開きます。
- ナビゲーションペインで [すべてのメトリクス] を選択します。
- [グラフ化したメトリクス] タブを開きます。次に、[数式を追加] ドロップダウンリストから、[空の式で開始] を選択します。
- 次の数式をコピーします: <br id=hardline_break/>
SORT(REMOVE_EMPTY(SEARCH('{AWS/Logs,LogGroupName} MetricName="IncomingBytes"', 'Sum', 2592000)),SUM, DESC)
- 数式を [数式の編集] フィールドに貼り付けて、[適用] を選択します。
- [グラフのオプション] タブを選択し、[数値] を選択します。
- グラフの上部にある [カスタム] を選択します。次に、[絶対値] を選択します。過去 30 日間に該当する開始日と終了日を選択します。この方法では、最大 500 のメトリクスをグラフ化できます。<br id=hardline_break/>
注: このステップは [絶対値] オプションでのみ機能します。[相対値] を選択すると、グラフは誤ったデータを返します。
- [アクション] を選択します。
- [.csv 形式でダウンロード] を選択します。
大量のロググループをクエリする
前提条件: API コールに関連するコストを確認してください。スロットリングを回避するには、ListMetrics オペレーションを分散するのがベストプラクティスです。ListMetrics のデフォルトのクォータは、1 秒あたり 25 トランザクションです。ただし、クォータの引き上げをリクエストできます。
次の手順を実行します。
- ListMetrics API オペレーションを実行します。次のパラメータを使用します: <br id=hardline_break/>
**Namespace: AWS/Logs<br id=hardline_break/>
**MetricName: IncomingBytes
- GetMetricData API オペレーションを実行します。次のパラメータを使用します。<br id=hardline_break/>
Namespace: AWS/Logs<br id=hardline_break/>
MetricName: IncomingBytes<br id=hardline_break/>
Dimensions: ListMetrics 呼び出し<br id=hardline_break/>から受信したとおりに
StartTime: 現在の日付の 14 日前の日付と時刻<br id=hardline_break/>
EndTime: 現在の日付と時刻]<br id=hardline_break/>
Period: EndTime - StartTime (秒単位)<br id=hardline_break/>
Statistics: 合計
- 取り込まれたデータ量が最も多いロググループ名を表示するには、データポイントを降順でソートします。
今後、取り込みデータ料金が指定のクォータを超えないようにするには、CloudWatch アラームを作成してください。
ストレージデータの使用量を確認する
storedBytes パラメータは、ロググループに保存されている圧縮バイト数を表します。ロググループの storedBytes を確認するには、次の手順を実行します。
- CloudWatch コンソールを開きます。
- ナビゲーションペインで [ロググループ] を選択します。
- ロググループを選択します。
- [保存バイト数] パラメーターで、圧縮されたログイベントの合計サイズを確認します。
ロググループの storedBytes を降順で取得するには、次の AWS CLI コマンド describe-logs-groups を実行します。
aws logs describe-log-groups --query 'logGroups | sort_by(@, &storedBytes) | reverse([]) | [].{"LogGroupName": logGroupName, "StoredBytes": storedBytes, "RetentionInDays": retentionInDays}' --output table
注: AWS CLI 出力の RetentionInDays 列の値が [なし] の場合、NeverExpire 設定がそれぞれのロググループに適用されます。
保持期間によって、CloudWatch Logs がデータを保持する期間が決まります。保持期間を短縮すると、長期にわたって保存される履歴データの量を制限し、アーカイブ料金を削減できます。
シナリオに基づいて保持期間を設定し、履歴データを Amazon Simple Storage Service (Amazon S3) などのより費用対効果の高いストレージソリューションにエクスポートするのがベストプラクティスです。
関連情報
CloudWatch コストを分析、最適化、削減する