作ったものはこれ。
やりたいこと
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が生成されます。 これで監視ルールの生成と管理が楽にできますね!