DataDogの監視設定からTerraformのresourceを生成する
作ったものはこれ。
やりたいこと
TerraformのDataDog Providerを使って監視ルールをTerraformで管理したい。resource定義さえ書けば監視ルールがTerraformで管理されるようになります。 参考: Datadog: datadog_monitor - Terraform by HashiCorp
ただ、 query = "avg(last_1h):avg:aws.ec2.cpu{environment:foo,host:foo} by {host} > 2"
のようなクエリを書くのは厳しいので、テンプレート化する前はDataDogのWeb UIでルールを作成したいですよね。
そこで既存の監視設定を取り込んでTerraformの設定を生成するようにしました。
Terraform importとどう違うのか
Terraformには terrafrom import
という便利なコマンドがあり、既存のterraform管理されていないリソースをterraform管理下に置くことができます。しかしながら、以下の記事にも書いてあるとおり、 tfstate
ファイルに状態として取り込まれるだけで、 設定を/構成を管理する tf
ファイルには反映されません。
使い方
詳細はREADMEに書きました。
datadog_monitor2terraform/README.md at master · kurochan/datadog_monitor2terraform · GitHub
$ ruby ./monitor-import.rb dynamodb_user_error_count 112233 resource "datadog_monitor" "dynamodb_user_error_count" { name = "DynamoDB UserError count is above the Threshold !!" type = "metric alert" message = <<EOF @slack-metric-alert DynamoDB UserError count is above the Threshold !! EOF query = "sum(last_5m):sum:aws.dynamodb.user_errors{*} > 10" thresholds { warning = 5.0 critical = 10.0 } notify_no_data = false no_data_timeframe = 2 renotify_interval = 0 timeout_h = 0 require_full_window = true notify_audit = false tags = [] }
という感じで引数にterraformで管理するリソースの名前と、DataDog上での対象のIDを指定するとTerraformのresourceが生成されます。 これで監視ルールの生成と管理が楽にできますね!