[小ネタ] CloudWatch Logsに保存されているログの総容量をAWS CLIからサクッと確認する

CloudWatch Logsを長期的なログストレージとして使っている場合は見直そう

こんにちは、AWS事業本部の荒平(@0Air)です。

CloudWatch Logsにどのくらいのデータが保管されていて、現時点の総容量がどのくらいあるか把握したいと思ったことはありませんか?
過去3回も思ってしまった自分のために、AWS CLI(CloudShell)を使ったCloudWatch Logsの容量を取得できるコマンドを残しておきます。

はじめに

CloudWatch Logsは、Lambdaの実行ログ、API Gatewayのアクセスログ、ECSのタスクログ、CloudTrailの操作ログなどを一元的に管理できる便利なサービスです。

ただ、「CloudWatch Logsにログを置きっぱなしにするとコストが余計に掛かって勿体ない」という話はしばしば聞きます。
以下記事で紹介されている通り、圧縮率を考慮しない料金だとAmazon S3がやはり安いです。(圧縮率を考えると、更に料金差が開きそう)

※ ap-northeast-1(東京リージョン)の保存料金比較

項目 料金
S3 標準 0.025 USD/GB
S3 標準 - 低頻度アクセス 0.0138 USD/GB
CloudWatch ログ保存 (アーカイブ) 0.033 USD/GB

請求書を見て驚く前に、自分でCloudWatch Logsにどのくらいのログが溜め込まれているか確認する手法が欲しいなと思い、確認してみました。
なお、Amazon S3に保存したデータ量に関してはAmazon S3 Storage Lensなどで確認できます。

CloudWatch Logsの容量取得コマンド

1. CloudWatch Logsに保管されている総容量を取得する

総容量をバイト単位で足し算して表示します。

aws logs describe-log-groups --query 'sum(logGroups[*].storedBytes)' --output text

結果(例)

[cloudshell-user@ip-10-130-49-85 ~]$ aws logs describe-log-groups --query 'sum(logGroups[*].storedBytes)' --output text
221045

この場合、約216KBがアカウントに存在するログの総量ということになります。

2. CloudWatch Logsに保管されている各ログの容量を取得する

総容量を確認したら、どのロググループが容量を占めているか確認しておきましょう。

aws logs describe-log-groups --query 'sort_by(logGroups, &storedBytes)[*].{LogGroupName:logGroupName,StoredBytes:storedBytes}' --output text | sort -rnk2

結果(例)

[cloudshell-user@ip-10-130-49-85 ~]$ aws logs describe-log-groups --query 'sort_by(logGroups, &storedBytes)[*].{LogGroupName:logGroupName,StoredBytes:storedBytes}' --output text | sort -rnk2
/aws/lambda/CostNotification    161660
/aws/lambda/CheckSites  51532
/aws/lambda/Backup-Check-Lambda 6164
/aws/lambda/SecurityHubAccepter-LambdaFunction     1689
RDSOSMetrics    0
Lexlog  0
Flowlog 0
/ecs/task-api   0
/aws/transfer/s-adddf02ecd294c03a       0
...(以下略)

各ロググループにおいて、2番目のフィールド(StoredBytes)を降順で出力しています。

GUIでの確認方法

もちろん、保存された各ログの容量はAWSマネジメントコンソールからでも確認することができます。

デフォルトでは表示されていないので、CloudWatch Logsのロググループ画面から、右上の歯車をクリックします。

「保存されているバイト数」を有効にし、「確認」をクリックします。

ログ保存の容量が見れるようになりました。(総量は残念ながらGUI確認できないので、請求書を確認して推察するか、先述のコマンドを利用します)

CloudWatch Logsに保存するログは少なくしよう

CloudWatch Logsでは、ログの検索やテーリングは得意な一方、ストレージコストが高いため、ログ収集範囲・保持期間の調整や定期的なS3へのエクスポートを推奨します。

エクスポートは以下の記事もご参考ください。

おわりに

CloudWatch Logsに保存されているログの総容量を確認したいときにサクッと使えるコマンドを紹介しました。
環境の規模が大きくなるとなかなか馬鹿にできない量のログが溜まったりするので、失効設定や保存先を見直すことをお勧めします。

このエントリが誰かの助けになれば幸いです。
それでは、AWS事業本部 コンサルティング部の荒平(@0Air)がお送りしました!

参考