💸

CloudWatchLogsの料金が高いリソースをリソースIDまで特定してみた

2023/05/28に公開

こちらのブログに触発されて、CloudWatchLogsのコストを再確認した際の手順のメモ
https://engineer.crowdworks.jp/entry/cloudtrail-cloudwatch

コストタイプの調査

親の顔よりも見たCost Explorerを開き、以下の条件でフィルタします。

  • ディメンションにて「使用タイプ」を指定
  • サービスにて「CloudWatch」を指定

そうすると「APN1-S3-Egress-Bytes」が全体の2/3を占めていることがわかりました。

APN1-S3-Egress-Bytesとは?

マニュアルを見ると以下の記述があり、なんらかのリソースがログをS3へ配信していることによるコストであることがわかります。

カスタムログと提供されるログでは、収集、保存、分析されたログの数に基づいてコストが発生します。これとは別に、提供されるログでは Amazon S3 と Kinesis Data Firehose への配信コストが発生します。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/cloudwatch_billing.html#w2aab5c19c11

S3へログを配信しているリソースの特定

先ほど記載した表の下にリソースを特定するためのクエリが記載されているため、そちらを実行してリソースを特定します。

SELECT
bill_payer_account_id as Payer,
line_item_usage_account_id as LinkedAccount,
line_item_resource_id AS ResourceID,
line_item_usage_type AS UsageType,
SUM(CAST(line_item_unblended_cost AS decimal(16,8))) AS TotalSpend,
SUM(CAST(line_item_usage_amount AS double)) AS UsageQuantity
FROM 
costandusagereport
WHERE
product_product_name = 'AmazonCloudWatch'
AND line_item_usage_type = 'APN1-S3-Egress-Bytes'
AND year='2023'
AND month='5'
AND line_item_operation IN ('PutLogEvents','HourlyStorageMetering','StartQuery','LogDelivery')
AND line_item_line_item_type NOT IN ('Tax','Credit','Refund','EdpDiscount','Fee','RIFee')
GROUP BY
bill_payer_account_id,
line_item_usage_account_id,
line_item_usage_type,
line_item_resource_id,
line_item_operation
ORDER BY
TotalSpend DESC

クエリ結果を見ると、「ResourceID」から該当のリソースを特定することができます。

まとめ

今回の調査結果ではWAFログのS3への配信が上位を占めていました。
この辺は脳死でログ取得を有効化しているものもあるので、改めて精査する必要がありそうです。。

月次でコスト分析はしているのですが、変動がないコストは深掘りしてないことも多いので、こう言った記事は見直す機会になってとっても助かりますすね!

「コスト分析の記事はなんぼあっても良いですからね〜」

Discussion