reizist's blog

ウェブ

datadogの設定をterraform formatで出力するgem dd2tfをリリースした

datadogの設定をterraform formatで出力するgem dd2tfを作った。

github.com

kurochan/datadog_monitor2terraformにインスパイアされて勢いで作った。 (尚動機としては、コード管理していない設定、例えばmonitorを管理者が(レビューの範囲外で)手動操作を行い想定外の挙動をしてしまった出来事があり、アラートは特にしっかりと管理したいモチベーションがあった。)

現在terraform側で扱えるdatadogのリソースとしてはdowntime, monitor, timeboard, userがあって、 このうち現在はmonitor, timeboard, userをサポートしている。

downtimeをそもそも使っていないのでサボってしまったが手間じゃないのではやいうちに追加しなくては。

datadogの設定がコードで記述できるという点はやはりメリットが大きいんだけど、

q = "avg:presto_staging.cluster_memory_manager_metrics.cluster_memory_usage_bytes{*}"

みたいなクエリを毎回書くのか、というと微妙なところで、グラフの様子を見ながらいじって決めるということが多く

今の自分の使い方としては

まず画面でポチポチいじって、dd2tf使ってコードをexportしコードをリポジトリ管理下に置いている。

terraform apply するタイミングで注意することがあって、既存のリソースを terraform import しておかないと、 重複してリソース登録されてしまう。

なので、実際に行う手順としては

  • web consoleから各リソース設定
  • terraform import
    • この際、 dd2tf print <resource> が便利で、 terraform importコマンドを出力してくれる
dd2tf print monitor --dd_api_key=xxx --dd-app_key=xxx
terraform import datadog_monitor.auto_clock_in_sync_with_ntp 29xxxxx
terraform import datadog_monitor.presto_long_time_query_occured 29xxxxxx
  • dd2tf import
dd2tf import monitor --dd_api_key=xxx --dd-app_key=xxx

のようになる。

datadogの使用頻度が増してきているので、且つコミュニケーションの齟齬なく運用できそうなので便利。

ある程度実装してから、 terraform import して得た <resource>.tfstate をparseする方針の方が筋が良いのでは、と思った気がしたけど忘れた。