newmo 技術ブログ

技術で地域をカラフルに

【年末】DatadogのGoogle Cloud Integration設定を見直そう【大掃除】

こんにちは。 newmoでは、Datadogを利用してGoogle Cloudをはじめとした各種サービスの監視を行っています。今回はDatadogのGoogle Cloud Integration設定の改善をしたことで、コストを削減できた話を共有します。(たぶん)2024年最後の記事ということで、年末の設定見直しの参考にしていただけたら幸いです。

DatadogでのGoogle Cloud Integration

DatadogでGoogle Cloud Integrationを設定してメトリクスを収集することは昔からできました。以前はGoogle Cloud側でService Account Keyを発行してDatadogに登録する必要があったのですが、いまはService Accountのimpersonateの仕組みを使って安全で簡単にIntegrationの設定ができるようになりました。 Terraformで設定するときは datadog_integration_gcp_sts リソースを使って設定できます。

Google Cloud Integrationの設定によってGoogle Cloudの各ProjectのさまざまなメトリクスがDatadog上で見られるようになるので、DashboardやMonitorを作成して利用することができます。しかし、そこには一つ課題がありました。

Cloud MonitoringのAPIの利用コスト

DatadogがCloud MonitoringのAPIへリクエストを送ってMetricsを取得するため、Cloud Monitoringのコストがかかります。 Google Cloudの各Projectで毎日200-400円程度かかっており、Datadogと連携しているGoogle CloudのProjectがすでに20程度あるのでこれだけで毎月10万円以上のコストとなっていました。newmoはまだGoogle Cloudの利用規模がそこまで大きくない中でこの金額は結構な割合を占めており、削減したいと考えていました。

ある日Datadogの設定を眺めていたところ、Google Cloud Integrationの設定の中に「Metrics Collection」という項目があることに気づきました。

DatadogのGoogle Cloud Integration設定画面

以前はこの設定はなかったと思うのですが、メトリクスのnamespace単位で取得するかどうかを設定できるようになっていました。 デフォルトではすべてのメトリクス namespaceを取得する設定になります。しかし、実際には利用していない・利用する予定がないメトリクスnamespaceも多いため、多くをdisableすることができそうです。不要なメトリクスnamespaceをdisableすることで、APIコールの回数が減ってコストの削減につながりそうなので、試してみることにしました。

ちなみにメトリクスのnamespaceは https://cloud.google.com/monitoring/api/metrics_gcp のドキュメントを見ることで、それぞれが何のメトリクスなのか必要なのかどうか判断ができると思います。

Metrics Collectionを設定してみる

TerraformのDatadog Providerでは v3.47.0からこの機能が利用可能になっていました。

Terraformで以下のような設定をしてみます。 disableするものをリストする必要があるので、一覧を取得してリストにしています。 基本はdisableの設定にして、全Projectでよく使う一部のものだけコメントアウトする + 各Projectで個別で必要になるものはvariableで渡せるようにして管理します。 (Terraformのsetsubtractという関数を初めて使いました)

locals {
  # Datadogでメトリクスを取得しないnamespaceのデフォルトのリスト。共通で必要なものはコメントアウトしている。
  datadog_default_disable_metric_namespaces = [
    "actions",
    "aiplatform",
    "alloydb",
    "apigateway",
    "apigee",
    "appengine",
   -- 中略 -- 
    "run",
    # "serviceruntime", Quotaの監視に使うので外しておく
    "spanner",
    # "storage", よく使うので外しておく
    "storagetransfer",
    "telcoautomation",
    "tpu",
    "trafficdirector",
    "transferappliance",
    "translationhub",
    "videostitcher",
    "visionai",
    "vpcaccess",
    "vpn",
    "workflows",
    "workload",
  ]
}

# 有効にするメトリクス namespace
variable "datadog_enable_metric_namespaces" {
  description = "enable metric namespaces for datadog"
  type        = list(string)
  default     = []
}

resource "datadog_integration_gcp_sts" "project_integration" {
  client_email                = google_service_account.datadog.email
  resource_collection_enabled = false
  is_cspm_enabled             = false

  metric_namespace_configs = [
   # defaultでdisableするリストから、variableで指定したenableするリストを取り除く
    for namespace in setsubtract(local.datadog_default_disable_metric_namespaces, var.datadog_enable_metric_namespaces) : {
      id       = namespace
      disabled = true
    }
  ]
}

メトリクスnamespacesの一覧は、DatadogのUIからMetrics Collectionをdisable allしたあとにDatadogのAPIドキュメントのGCP intergrationにあるAPIを叩くことで確認が可能です。今後変化があるかもしれないので、ときどき確認すると良さそうです。

この設定を適用してみた結果、Cloud Monitoringのコストが半分以下になっていることが確認できました。

Cloud Monitoringコストの遷移

みなさまも年末の大掃除として確認してみてはいかがでしょうか。

参考

DatadogのGoogle Cloud Integrationについては以下の記事にまとまっていました。 qiita.com

書いた人: tjun