はじめに
監視SaaS製品は製品により課金体型も様々であるため、どういったトリガーで課金がされるのか把握した上で利用しないと意外と痛い目を見る。
今回はDatadogのInfra Hostに目を向けて無駄なInfra Host費用を発生させてしまっていたため調査した内容や対応内容を記載していく。
環境
どのような環境でDatadogを使っていたか
- AWSをクラウド基盤として利用
- DatadogではAWS Integrationを利用
- 不要な課金を避けるためEC2は無効化
- AWSのマネージドKubernetesサービスであるEKSを利用
- EKS上ではDatadog AgentをDaemonsetとして利用
- APMも利用
- 所感的にEC2の台数の内訳としてはKubernetesのWorkloadとしての利用が99%でその他が1%といった状態
ことの発端
DatadogではPlan & Usageを見ることで課金対象のInfra Hostの台数などを見ることができる。
Agentで課金されるHostに関しては以下のようにAgent Host、AWS Integrationで収集されたデータを元に課金されるHostに関してはAWS Hostといった具合で表示される
環境で上述したように私の使っているアカウントではAWS Integrationを使っているが予期せぬEC2が課金されることを防ぐためにEC2に関しては収集を無効化、必要なEC2にはタグを付与して限定的にデータを収集するかAgentをInstallしようという方針で動いていた。
公式ドキュメントにもAWS Integration有効化による課金対象に関する記述がある。
にも関わらずAWS Hostが一定数カウントされている状態であった。
原因
Metrics Streamの対象メトリクスにEC2が含まれていた
Metircs Streamを有効化することで通常のIntegrationの収集よりも早いタイミングでMetricsをDatadogに取り込むことができる(Datadogドキュメント)。
この収集対象のMetricsにEC2が含まれていた。
後に公式サポートへ問い合わせMetricsStreamで送られるデータもメタデータを元にホストとしてカウントされるということが判明。
対策
本当に欲しいEC2のメトリクスはAgentで取っているケースがほとんどなので今回はおとなしくMetircs Streamの収集対象データからEC2を除外した。
その他備考
EKSのWorkloadとしているEC2がほとんどを占める環境(Agent Hostとしてカウントされるべきものたち)だがAWS Hostとしてカウントされているものが想定よりも多く存在する違和感。
調査と公式への問い合わせ結果EKS環境でのDatadog Agentは設定によっては重複課金されることがあると判明した。
今回私の使っているアカウントではMetricStreamそのものを無効化しAWS Hostの課金が発生しないようにしたが備忘録として情報を記載しておく。
重要: Datadog は EC2 インスタンスのメタデータを使用して、Agent を実行しているホストと AWS インテグレーションによってクロールされているホストの両方に対して二重請求が行われないようにします。EC2 インスタンスが Instance Metadata Service Version 2 (IMDSv2) の使用を必要とするように構成されている場合、二重請求を避けるために、Agent 構成でパラメーター ec2_prefer_imdsv2 を true に設定しなければなりません。