CTOの小笠原(@yamitzky)です。今日は、JX通信社でも利用しているモニタリングの SaaS 「Datadog」の利用費用を削減した話を書きます。
JX通信社とDatadog
Datadog は「クラウド アプリケーションのための モニタリングとセキュリティ プラットフォーム」です(公式サイトより)。特に主要な使い方としては、サーバーの各種モニタリングや、そのアラート検知などのために利用されることが多いと思います。
JX通信社では、FASTALERTなどのシステム構築のためにGoogle CloudやAmazon Web Servicesなど複数のクラウドサービスを利用していますが、それらを統合的に監視するためにもDatadogを活用しています。細かい利用用途としては以下の通りですが、「AWSとGoogle Cloudを横断でサービス監視する」という用途がメインです。
- Google Cloud、AWSのマネージドサービス(例:ロードバランサー)の指標の監視
- 一部、VPS で構築されているシステムの監視
- Synthetic モニターによる、API の外形監視
- 朝会で確認するためのダッシュボード
Datadogには他にもたくさんの便利な機能がありますが、弊社の場合は、CloudWatch (Amazon)やCloud Monitoring (Google Cloud)自体での監視も併用しているため、活用の用途は限られていました。
昨今の円安による為替レートの悪化や、Datadogを活用しているシステム数の増加などにより、社内のDatadog利用料金が増大しており、最適化を行う必要がありました。
かかっている費用を“正確に”把握する
Datadog 利用にかかる費用は「Datadogの請求書に記載された費用」だけではありません。 「Datadogを利用するためにGoogle Cloud や AWSからデータを取り込む費用」もかかっており、これらの費用も合わせて最適化を行うことが重要です。
JX通信社の場合、Amazon CloudWatchの指標を取得する費用(CW:GMD-Metrics)や、Google Cloudの指標を取得する費用(Monitoring API Requests)が、Datadogと同じくらいかかっていました。これらも、Datadogが指標を取り込むためにかかっている費用です。
Datadogの管理画面から見れる「Cost Summary」の数字と、AWS、Google Cloudの費用を合わせて分析した結果、次のような比率であることがわかりました。
どこでかかる費用か | 名称 | 比率 | 補足 |
---|---|---|---|
Datadog | Serverless Invocations | 16% | Cloud Runなどのサーバーレスなサービスの実行回数に応じた従量課金 |
Serverless App Instances | 14% | Cloud Runなどのサーバーレスなサービスの数に応じた従量課金 | |
Synthetics API Test Runs | 11% | Syntheticsテストの実行回数の従量課金 | |
(その他) | 6% | ||
Google Cloud | Monitoring API Requests | 24% | API呼び出し数の従量課金 ≒ プロジェクトが多いほど費用がかかる |
AWS | CW:GMD-Metrics | 29% | API呼び出しによる取得指標数の従量課金 ≒ 指標が多いほど費用がかかる |
つまり、主要な費用は、
- Datadogのサーバーレス系の従量課金 (30%)
- Amazon CloudWatchからの指標の取り込み (29%)
- Google Cloud Monitoringからの指標の取り込み (24%)
- Syntheticsテストの従量課金 (11%)
に占められていたということになります。これはあくまで JX通信社のケースですので、会社によって全く異なると思います。特に、JX通信社はサーバーレスを活用したシステム構築が多いため、Infra Hosts=ホスト自体の監視にほぼ費用がかかっていません。
実施した施策
分析の結果、何に費用がかかっているかが判明したので、地道に削っていきます。
サーバーレス系の従量課金の削減
Datadogはサーバーレスなシステムの監視を行う機能があり、そのシステム数や呼び出し数に応じて費用がかかります。
説明には「Datadog内で追跡・監視されている呼び出しとアクティブな Lambda 関数の組み合わせ」とありますが、Cloud Runなども同様に費用がかかります。ただし、Lambdaと同じく「アクティブ」かつ「Datadog内で追跡・監視されている」システムのみが対象となります。そのため、(全てのシステムを取り込まず) 本当に必要なシステムだけをフィルターすれば、費用を抑えることが可能です。
JX通信社の場合は、監視していないCloud Runのデータ取り込みに費用がかかってしまっていたため、 service_name:
で必要なサービス名のみを指定することで限定し、費用を抑えました。このあたりのフィルター方法が公式ドキュメントに見つけられなかったので、試行錯誤に時間がかかっていました。
CloudWatchからの指標の取り込みを限定する
Amazon Cloud CloudWatchからDatadogへのデータの取り込みは、「CloudWatchのAPIなどをポーリング式で取得する方法」と「ストリームで取得する方法」があります。JX通信社の場合は「ポーリング式」で取得をしていました。*1
「ポーリング式」の場合、10分おきにバッチ処理が発火し、CloudWatch の GetMetricData API を叩き続けます。GetMetricData の料金 は指標の合計取得数に応じてかかります。例えば10,000程度の指標があった場合、月間で4,320万メトリクス分の取得になり、これはおよそ7万円/月の費用に相当します*2。
そこで、「CloudWatch自体にある、指標の種類が多いが活用できていない指標を見直す」「Datadog が取り込む対象のリージョン、サービス、リソースを限定する」という2つの方針で、CloudWatchから取り込む指標の数を減らすことに取り組みました。
特に後者について、
- 全リージョンを取得 → 日本のリージョンのみを有効化
- 全サービスを取得 → 指標数が多く活用できてなかった EBS などを無効化し、重要なサービス(Lambda、ECS など)のみを有効化
- Application Load Balancer の全ターゲットグループの指標を取得 → 「datadog:enabled」というタグがついた、重要サービスのみの指標を取得
といった設定変更を行なっています。ただし「リソース」の限定については Lambda、EC2、ロードバランサー、RDSなどが対象で、ECSのサービス名指定はできないようでした。
Cloud Monitoringの呼び出しを削減する
Cloud MonitoringからDatadogへの取り込みについても、AWSと同様、ポーリング式で行われています(5分ごと)
Cloud Monitoring のAPIは、AWSとは異なり、API の呼び出し数に応じて費用がかかります。Datadogからプロジェクトごとに呼び出しが行われるますが、デフォルトではおおよそ 1万円/月 × プロジェクト数の費用がかかります*3。つまり実質的には、Google Cloudのプロジェクト数に応じた費用です。
こちらも、有効化するサービスの数を限定することで、Cloud Monitoringの費用を抑えることができます。2023年の公式ブログにはない機能だったので、この1-2年で設定できるようになったようです。
実際活用できていないプロジェクトをDatadogの監視対象から外すなどの地道な変更も行いました。
効果の確認
まず、Datadogの費用について、今回削減に取り組んだ指標を抜粋して記載しました。特にサーバーレス関連の費用を大きく下げることができました。11月の途中に設定変更をしているため、12月にかけて削減されるような形になっています。
次に、AWSについて、Cost ExplorerのGMD-Metricsの使用量(Metrics数)を日次で集計しました。こちらも大きく削減できています。
最後に、Google Cloud Monitoringについても、Cloud Billingの画面から確認し、Cloud Monitoring API Requests が下がっていることを確認しました。
終わりに
今回は、JX通信社で取り組んだ、Datadog関連の費用最適化について共有しました。
Datadogは機能が多いため、会社によってコストのかかり方は全く異なると思いますが、指標取得関連の費用が大きくかかっている会社は多いのではないでしょうか。「Datadogだけでなく、関連費用も見直す」「細かく有効化を切り替える」など、今回の取り組みを参考にしていただけたら幸いです。
*1:ストリーム方式で取得する方法に移行することでコストが下げられる可能性もありますが、JX通信社の場合は逆に大幅に費用が上がってしまったため、断念しています。EC2の情報を意図せず取得してしまい、EC2ホスト台数分の追加費用が大きくかかってしまいました。フィルターすることでEC2の費用を抑えられる可能性もありますが、検証していません
*2:単純計算のため、実際には増減すると思います
*3:newmoさんのブログ でも同様の費用だったので、プロジェクトの規模は大きく影響しないと思われます