スキップしてコンテンツを表示

CloudWatch Logs の請求額が急激に増加する原因となっているロググループを特定する方法を教えてください。

所要時間2分
0

私の Amazon CloudWatch Logs の請求額が異常に高いです。CloudWatch Logs のコストを増加させているロググループを特定したいです。

簡単な説明

CloudWatch Logs の請求額が急激に増加するのは、特定のロググループの取り込みデータまたはストレージデータの増加が原因である可能性があります。CloudWatch Logs メトリクスを使用してデータ使用量を確認します。次に、AWS 請求書を確認して、請求金額の増加の原因となっているロググループを特定します。

解決策

取り込んでいるデータ量を確認する

IncomingBytes メトリクスは、CloudWatch ロググループに取り込まれたデータの量をほぼリアルタイムで示します。このメトリクスは、次の情報を判断するのに役立ちます。

  • 請求額の最も大きな原因となっているロググループ。
  • ロググループへの受信データにおける急激な増加、または新規アプリケーションによる段階的な増加。
  • 特定の期間にプッシュされるデータ量。

少数のロググループをクエリする

次の手順を実行します。

  1. CloudWatch コンソールを開きます。
  2. ナビゲーションペインで [すべてのメトリクス] を選択します。
  3. ロググループごとに、次の手順を実行します。<br id=hardline_break/> [ログ] 名前空間を選択します。<br id=hardline_break/> [ロググループメトリクス] を選択します。<br id=hardline_break/> 個々の IncomingBytes メトリクスを選択します。<br id=hardline_break/> [グラフ化したメトリクス] タブを選択します。
  4. [統計][合計] を選択します。
  5. [期間][30 日] を選択します。
  6. [オプション] タブを選択し、[ウィジェットタイプ] セクションで [数値] を選択します。
  7. グラフの上部にある [カスタム] を選択し、次に [絶対値] を選択して時間範囲を設定します。過去 30 日間に該当する開始日と終了日を選択します。

大量のロググループをクエリする

次の手順を実行します。

  1. CloudWatch コンソールを開きます。
  2. ナビゲーションペインで [すべてのメトリクス] を選択します。
  3. [グラフ化したメトリクス] タブを開きます。次に、[数式を追加] ドロップダウンリストから、[空の式で開始] を選択します。
  4. 次の数式をコピーします: <br id=hardline_break/> SORT(REMOVE_EMPTY(SEARCH('{AWS/Logs,LogGroupName} MetricName="IncomingBytes"', 'Sum', 2592000)),SUM, DESC)
  5. 数式を [数式の編集] フィールドに貼り付けて、[適用] を選択します。
  6. [グラフのオプション] タブを選択し、[数値] を選択します。
  7. グラフの上部にある [カスタム] を選択します。次に、[絶対値] を選択します。過去 30 日間に該当する開始日と終了日を選択します。この方法では、最大 500 のメトリクスをグラフ化できます。<br id=hardline_break/> 注: このステップは [絶対値] オプションでのみ機能します。[相対値] を選択すると、グラフは誤ったデータを返します。
  8. [アクション] を選択します。
  9. [.csv 形式でダウンロード] を選択します。

大量のロググループをクエリする

前提条件: API コールに関連するコストを確認してください。スロットリングを回避するには、ListMetrics オペレーションを分散するのがベストプラクティスです。ListMetricsデフォルトのクォータは、1 秒あたり 25 トランザクションです。ただし、クォータの引き上げをリクエストできます。

次の手順を実行します。

  1. ListMetrics API オペレーションを実行します。次のパラメータを使用します: <br id=hardline_break/> **Namespace: AWS/Logs<br id=hardline_break/> **MetricName: IncomingBytes
  2. 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: 合計
  3. 取り込まれたデータ量が最も多いロググループ名を表示するには、データポイントを降順でソートします。

今後、取り込みデータ料金が指定のクォータを超えないようにするには、CloudWatch アラームを作成してください

ストレージデータの使用量を確認する

storedBytes パラメータは、ロググループに保存されている圧縮バイト数を表します。ロググループの storedBytes を確認するには、次の手順を実行します。

  1. CloudWatch コンソールを開きます。
  2. ナビゲーションペインで [ロググループ] を選択します。
  3. ロググループを選択します。
  4. [保存バイト数] パラメーターで、圧縮されたログイベントの合計サイズを確認します。

ロググループの 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 コストを分析、最適化、削減する