はじめに
ある日、AWSの請求額を確認したところ、CloudWatch Logsの費用が前月と比べて大幅に増加していることに気づきました。本記事では、架空のサンプルを利用して、ロググループの特定から、費用の内訳を把握するまでの調査手順を紹介します。
環境
- AWS CLI が利用可能な環境(認証済み)
- 対象リージョン: ap-northeast-1(東京)
Step 1: 各ロググループの保存容量を確認する
まず、どのロググループが多くの容量を使っているかを確認します。
aws logs describe-log-groups \
--query 'logGroups[*].[logGroupName,storedBytes]' \
--output json
このコマンドで、全ロググループの storedBytes(保存バイト数)を取得できます。
結果を容量順にソートしたところ、上位は以下のようなイメージでした(数値はサンプル)。
| ロググループ | 保存容量 |
|---|---|
/aws/lambda/sample-function-a |
2,547.21 GB |
/aws/lambda/sample-function-b |
79.88 GB |
aws-waf-logs-sample |
42.54 GB |
aws-cloudtrail-logs-sample |
4.26 GB |
| その他 | 各 691 MB 以下 |
この時点で/aws/lambda/sample-function-aに大量のログがたまっていることがわかります。
Step 2: 月間の取り込み量(IncomingBytes)を確認する
storedBytes はあくまで現時点の保存量です。
請求に直結する 取り込み量(Ingestion) を把握するには、CloudWatchメトリクスの IncomingBytes を確認します。
aws cloudwatch get-metric-statistics \
--namespace AWS/Logs \
--metric-name IncomingBytes \
--dimensions Name=LogGroupName,Value=/aws/lambda/sample-function-a \
--start-time 2026-03-01T00:00:00Z \
--end-time 2026-04-01T00:00:00Z \
--period 2678400 \
--statistics Sum
結果: 12,328,830,496,795 bytes(約 11.2 TB)
Step 3: storedBytes と IncomingBytes の違いを理解する
IncomingBytes(11.2 TB)と storedBytes(2.5 TB)に大きな差があることに気づきました。
これは CloudWatch Logsがログデータを保存時に自動的に圧縮する ためです。
| 指標 | 意味 | 課金対象 |
|---|---|---|
| IncomingBytes | 圧縮前の生データ量 | 取り込み料金(Collect) |
| storedBytes | 圧縮後の保存データ量 | 保存料金(Store/Archive) |
CloudWatch Logsの課金体系は以下の2つに分かれています。
| 課金項目 | UsageType | 単価(東京リージョン) |
|---|---|---|
| Collect(取り込み) | DataProcessing-Bytes | $0.76 / GB |
| Store(保存) | TimedStorage-ByteHrs | $0.033 / GB / 月 |
今回のケースでは、費用の大部分は取り込み料金でした。
- 取り込み費用: 11.2 TB x $0.76/GB = 約 $8,726
- 保存費用: 2.5 TB x $0.033/GB = 約 $84
注意: 圧縮率は公式に明記されておらず、ログの内容によって変動します。今回の実測では約4.5:1でした。
Step 4: 保持期間(Retention)を確認する
aws logs describe-log-groups \
--log-group-name-prefix '/aws/lambda/sample-function-a' \
--query 'logGroups[0].retentionInDays'
結果は null、つまり 保持期間が無期限 に設定されていました。このままでは蓄積されたログが永久に残り続け、保存費用も増加し続けます。
マネジメントコンソールからの確認方法
CLIを使わず、マネジメントコンソールからも同様の調査が可能です。
- CloudWatch > メトリクス > すべてのメトリクス を開く
- 名前空間 Logs を選択
- ロググループメトリクス でフィルタ
- メトリクス IncomingBytes を選択
- 統計を Sum、期間を 1ヶ月 に設定
これで各ロググループの月間取り込み量をグラフで視覚的に確認できます。
対処方針
- 対象Lambda関数の調査 — 大量出力の原因を特定・修正する
- 保持期間の設定 — 用途に応じて適切な期間(30日、90日など)を設定する
- 蓄積ログの削除 — 不要であれば既存の蓄積ログを削除し、保存費用を即座に削減する
まとめ
CloudWatch Logsの費用が急増した場合は、まず IncomingBytes メトリクスで取り込み量の多いロググループを特定することが最も効果的です。storedBytes だけでは圧縮後の値のため、実際の取り込みコストを正確に把握できない点に注意してください。


