はじめに
こんにちは、ACS事業部の小原です。
監視ツールの設定をコード管理したい、あるいはコード管理したらどうなるだろうと思ったことはありませんか?
この記事では、HCP Terraformを使用してDatadogを操作する方法について取り上げます。
手始めにDatadogのダッシュボードやモニタ、ユーザを作成してみたいと思います。
構成
早速ですが、構成から記載していきます。
今回、以下のような環境で実施してみました。
この構成には以下の要素が含まれています。
- HCP Terraform: ステートファイルをクラウド上で共有できるため、チーム全体でのコラボレーションが容易になります。事前に作業用のWorkspaceを作成しました。
- VCS: バージョン管理システム(VCS)としてGitHubを使用し、Terraformのコードを管理します。コードの変更履歴を残すことで追跡が可能になります。また、コミットがあった際にTerraformコードを自動的に実行するようにできます。※この記事では、VCSへの接続方法は割愛します。VCSプロバイダーに接続するをご参照ください。
- Datadog: インフラの監視とアラートを行うためのサービスです。
- ホスト: Datadogで監視する対象です。
実践
手順の概要です。以下のように進めていきます。
- Datadog APIキーとAPPキーの確認
- 変数の設定
- provider.tfの作成
- variables.tfの作成
- Datadogのダッシュボード、モニタを作成するためのコードを用意
- Runの実行と確認
- Datadogのユーザを作成するためのコードを用意
- Runの実行と確認
Datadog APIキーとAPPキーの確認
- Datadogへログインする
- Organizations Settings > Access > API Keys からNew Keyを選択する

API Keyを作成し、Keyの値を控えておく
Organizations Settings > Access > Application Keys からNew Keyを選択する

- Application Keyを作成し、Keyの値を控えておく
変数の設定
- HCP Terraformで作業用のWorkspacesに移動する
- Variables を選択する
- Workspace variables > Add variable を選択する
- 以下をそれぞれ追加する
variable category | Key | Value |
---|---|---|
Terraform variable | datadog_api_key | ※Datadog APIキーの値 |
Terraform variable | datadog_app_key | ※Datadog APPキーの値 |
provider.tf
provider.tfを作成し、terraformブロックとproviderブロックを記述していきます。
terraform { required_providers { datadog = { source = "DataDog/datadog" } } } # Configure the Datadog provider provider "datadog" { api_key = var.datadog_api_key app_key = var.datadog_app_key api_url = "https://ap1.datadoghq.com" # Japan (AP1)リージョンのURLを指定 }
ここでは、Japan (AP1)リージョンのURLを指定することが大切です。 私はこれを忘れて、時間を費やしてしまいました。
variables.tf
variables.tfを作成し、変数を宣言します。
variable "datadog_api_key" { description = "The API key for Datadog" type = string } variable "datadog_app_key" { description = "The application key for Datadog" type = string }
Datadogのダッシュボード作成、モニタ作成
ダッシュボード作成
まずは、DatadogのダッシュボードをTerraformでコード化していきましょう。
main.tfを作成しコードを書いていきます。
こちらのGitHubページを参考にしました。
# Example Ordered Layout resource "datadog_dashboard" "ordered_dashboard" { title = "Average CPU Usage" description = "Created using the Datadog provider in Terraform" layout_type = "ordered" widget { toplist_definition { request { q = "avg:system.cpu.user{*} by {host}" conditional_formats { comparator = "<" value = "2" palette = "white_on_green" } conditional_formats { comparator = ">" value = "2.2" palette = "white_on_red" } } title = "Average CPU Usage by Host" } } }
このコードを適用することで、Datadogに新しいダッシュボードが作成されます。
この例では、ダッシュボードに各ホストごとの平均CPU使用率を表示するウィジェットが作成されます。
system.cpu.user
は、CPUがユーザーアプリケーションの実行に費やした時間の割合です。
ウィジェットは多くの種類があるので、色々試してみたいですね。
メトリクスモニタ作成
続いて、メトリクスモニタの作成です。
こちらのGitHubページを参考にしました。
resource "datadog_monitor" "foo" { name = "High CPU Usage Monitor" type = "metric alert" message = "High CPU usage detected on host." query = "avg(last_1h):avg:system.cpu.user{*} by {host} > 80" monitor_thresholds { warning = 70 critical = 80 } include_tags = true tags = ["environment:production", "team:operations"] }
この例では、CPU使用率を基にモニタリングを行う設定を示しています。
実際にアラート通知を受け取るためには、通知先(例えばメールアドレスやSlackチャンネル)を追加する必要があります。
プロセスモニタ作成
続いて、プロセスモニタの作成です。同様にdatadog_monitor
リソースブロックを使って書いていきます。
resource "datadog_monitor" "process_alert_example" { name = "High Java Process Count Monitor" type = "process alert" message = "Multiple Java processes running on production servers" query = "processes('java').over('env:production').rollup('count').last('10m') > 1" monitor_thresholds { critical = 1.0 critical_recovery = 0.0 } notify_no_data = false renotify_interval = 60 }
この例では、モニタは、過去10分間に「env:production」で実行されているJavaプロセスの数が1を超えた場合にアラートをトリガーします。
実際にアラート通知を受け取るためには、通知先(例えばメールアドレスやSlackチャンネル)を追加する必要があります。
Runの実行と確認
- HCP Terraformで作業用のWorkspaceに移動します。
- New runを選択します。
- (ここでは初回の動作確認として手動でRunを実行していますが、基本的にGitHubにコミットがあるたびに自動的にRunが実行される構成です)

Runが完了した後、Datadogのページに移動して確認してみます。
ダッシュボードが作成されていますね。

ウィジェットもできています。

メトリクスモニタとプロセスモニタも確認できました。

Datadogのユーザ作成
ユーザ作成
続いて、Datadogのユーザの作成を作ってみたいと思います。
こちらのGitHubページを参考にしました。
# Source a role data "datadog_role" "ro_role" { filter = "Datadog Read Only Role" } # Create a new Datadog user resource "datadog_user" "foo" { email = "{作成するユーザのメールアドレス}" roles = [data.datadog_role.ro_role.id] }
emailには実際に作成するユーザのメールアドレスを入力します。 このコードを適用することで、新しいユーザがDatadogに追加されます。
Runの実行と確認
- HCP Terraformで作業用のWorkspaceに移動します。
- New runを選択します。
Runが完了した後、Datadogのページに移動して確認してみます。
ユーザが作成されていることが確認できました。

まとめ
HCP Terraformを使用してDatadogのダッシュボードやモニタ、ユーザを作成する方法を紹介しました。
これを通じて、HCP TerraformでのDatadog操作が意外と簡単だと感じた方も多いのではないでしょうか?
今回は、ほんの一部だけのご紹介でしたが、
参考元として記載したGitHubページのコードを基に、色々と試すことができそうですね。
ちなみに、Datadogのロゴに描かれている可愛らしいワンちゃんは「Bits」と呼ばれているそうですよ!
ACS事業部のご紹介
私達ACS事業部はAzure・AKSなどのクラウドネイティブ技術を活用した内製化のご支援をしております。
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。