Studyplus Engineering Blog

スタディプラスの開発者が発信するブログ

Amazon CloudWatchの費用を半額削減した話

Amazon CloudWatchの費用を半額削減した話

こんにちは。スタディプラスのSREグループの蜂須賀です。
今回はAmazon CloudWatchの費用を半額削減した話を紹介します。

経緯

スタディプラスでは主にAWSでシステムを構築しており、そのモニタニングツールとしてはDatadogを使用しています。
2023年初頭にCloudWatchの費用が昨年比で2倍に増加していたことをグループ内で問題視していました。
調査したところ、DatadogのAWSインテグレーションによるメトリクスの収集で発生する費用が、CloudWatchの費用の大半を占めいていることがわかったので改善することにしました。

CloudWatch Metric Streamsの試験導入

背景

CloudWatchのメトリクスをDatadogに収集するパターンとしては2種類あります。

1つ目はDatadogがCloudWatchのGetMetricDataというAPIを利用してメトリクスを収集するパターンです。GetMetricDataは1000件のメトリクスごとに0.01ドルの費用が発生し、収集するまでに10分程度の遅延が発生します。

2つ目はCloudWatch Metric StreamsからDatadogにメトリクスを送信するパターンです。1000件のメトリクスごとに0.003ドルの費用が発生し、遅延に関しては2-3分程度に抑えられます。

費用が10分の3となり、遅延も短くなりそうだったため2つ目のCloudWatch Metric Streamsを試験導入をすることにしました。

試験導入の結果

CloudWatch Metric Streamsを試験導入してみましたが、以前の費用よりも1.5倍ほど高くなるという結果になりました。

Datadogから収集するパターンではメトリクスは平均値のみを収集しますが、CloudWatch Metric Streamsでは最小、最大、サンプル数、合計も収集されます。リクエスト料金は10分の3になりますが、おそらくそれ以上に収集するメトリクス量が増えてしまったために、費用が上がってしまったと推測されます。

特定のリソースに紐づくメトリクスのみ収集するといった設定もできなかったので、今回は見送ることにしました。

CloudWatchMetricStream試験導入後の料金

実施内容

不必要なリージョンを除外する

不必要なリージョンでCloudWatchサービスのGMD-MetricsやRequestsの費用が月100ドル程度発生していました。Datadogでメトリクスを収集していることが原因だったので、不必要なリージョンを除外することにしました。

DatadogのAmazon Web ServicesのIntegrationsのGeneralで各アカウントごとにリージョン設定ができます。

デフォルトでは、全てのリージョンが有効になっているので、使用しているリージョンのみ有効にしました。なお、Route53や請求関連のメトリクスはus-east-1リージョンで取得しているため、us-east-1も有効にしています。

一般提供の開始したリージョンがあると、自動的に有効になるため定期的に設定の確認をしています。

Datadogでメトリクスを収集するAWSのリージョンの指定

不必要なサービスを除外する

不必要なメトリクスを収集していると費用が膨らんでしまうので、不必要なサービスのメトリクスの収集を除外することにしました。

DatadogのAmazon Web ServicesのIntegrationsのMetric Collectionで各アカウントごとに収集するサービスを設定できます。

CloudWatchの「すべてのメトリクス」からメトリクスを収集しているサービスとメトリクス自体を参照できるので、これらの情報を元に精査しました。

リージョンと同様に、一般提供の開始したサービスがあると自動的にメトリクス収集が有効になるため、定期的に設定の確認をしています。

Datadogでメトリクスを収集するAWSのサービスの指定

不必要なリソースを除外する

収集することを決めたサービスの中には、収集の不必要なリソースも含まれていたので精査することにしました。

DatadogのAmazon Web ServicesのIntegrationsのMetric Collectionで各アカウントごとに必要なリソースのみメトリクス収集する設定ができます。具体的には、Limit Metric Collection to Specific Resourcesの項目になります。

設定できるサービスは少ないですが、不必要なリソースを除外することで費用を削減できました。

Datadogでメトリクスを収集するリソースの制限設定

まとめ

今回の取り組みによって、CloudWatchの費用を半額ほど削減できました。
必要なリソースのみに絞ってメトリクスを収集するように設定しただけですが、長年放置されていた箇所に気づけてよかったです。
また、それほど工数をかけずにかなりの費用を削減できたのでとても満足です。

CloudWatchのコスト推移