DatadogをTerraform で触ってみた

C269fcdbb9c870db883ca134bab96447?s=47 mominosin
January 22, 2019

DatadogをTerraform で触ってみた

Datadogはじめました!#datadogJP

C269fcdbb9c870db883ca134bab96447?s=128

mominosin

January 22, 2019
Tweet

Transcript

  1. DatadogをTerraform で触ってみた Datadogはじめました! 鈴木進吾

  2. 自己紹介 鈴木 進吾 @mominosin もみん,もみあげマン,etc… UniFa Inc. インフラエンジニア

  3. 保育園向けサービスやってます https://lookmee.jp

  4. Datadogは 昨年末くらいから利用開始した 初心者です (※主にAWS)

  5. どうやって設定されてます? ブラウザでポチポチ? DatadogのAPI叩いてる? dogshell ?

  6. 私が選んだのは Provider: Datadog - Terraform by HashiCorp https://www.terraform.io/docs/providers/datadog/index.html

  7. できること アラートやダッシュボードは作れる 今の所インテグレーションはGCPのみ Provider: Datadog - Terraform by HashiCorp https://www.terraform.io/docs/providers/datadog/index.html

  8. このあたりはポチポチ APIキー インテグレーション

  9. DatadogをTerraform で触ってみる

  10. Terraformの初期設定 API keyとApplication Keyを準備 variable "datadog_api_key" { default = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

    } variable "datadog_app_key" { default = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" } provider "datadog" { api_key = "${var.datadog_api_key}" app_key = "${var.datadog_app_key}" }
  11. Monitor設定作ってみる Datadog: datadog_monitor - Terraform by HashiCorp https://www.terraform.io/docs/providers/datadog/r/monitor.html

  12. なんか書くこと多い…!!

  13. すでにあるやつ取り込んでみよう サンプルをコピペした設定ファイルを準備(fooのところは書き換えたほうが良い) terraform import でmonitor idを指定し取り込む ❯ terraform import datadog_monitor.foo

    7508938 datadog_monitor.foo: Importing from ID "7508938"... datadog_monitor.foo: Import complete! Imported datadog_monitor (ID: 7508938) datadog_monitor.foo: Refreshing state... (ID: 7508938) Import successful! The resources that were imported are shown above. These resources are now in your Terraform state and will henceforth be managed by Terraform. ❯ head -n 5 datadog_monitor.tf resource "datadog_monitor" "foo" { name = "Name for monitor foo" type = "metric alert" message = "Monitor triggered. Notify: @hipchat-channel" escalation_message = "Escalation message @pagerduty"
  14. 差分を確認 terraorm planで取り込んだ値と設定ファイルの値の差分を比較 ❯ terraform plan |landscape ~ datadog_monitor.foo 取り込んだ値

    設定ファイルの値 escalation_message: "" => "Escalation message @pagerduty" message: -{{#is_alert}} -Storage Space: {{value}} % -@slack-alert -{{/is_alert}} +Monitor triggered. Notify: @hipchat-channel name: "RDS Free Storage Space is very low {{dbinstanceidentifier.name}}" => query: "avg(last_5m):100 - avg:aws.rds.filesystem.usedPercent{env:prd} by { silenced.%: "0" => "1" silenced.*: "" => "0" tags.#: "0" => "2" tags.0: "" => "foo:bar" tags.1: "" => "baz" thresholds.%: "4" => "5" thresholds.critical: "10.0" => "4" thresholds.critical_recovery: "20.0" => "3" thresholds.ok: "" => "0"
  15. 取り込んだ値を設定ファイルに反映 反映できると差分が無くなる ❯ terraform plan |landscape No changes

  16. TerraformでMonitor設定を作ろう 反映した設定の複製 変数等や疑似ループも利用可能 - 環境別、リソース別でまとめて記述できる 定期的に差分チェック - 一時的な対応でミュートやしきい値変更した際の戻し忘れ防止

  17. ただ…ダッシュボードは…

  18. Terraform v0.11以下はべた書き 「resources」の括りのみのループ datadogのproviderでは大きい括り - Timeboard - Screenboard 各グラフべた書きするしかない!! resource

    "datadog_timeboard" "fizz_buzz" { title = "fizz_buzz" description = "created using the Datadog provider in Terraform" read_only = true graph { title = "Photo ALB Response Time" viz = "timeseries" precision = 0 request { q = "avg:aws.applicationelb.target_response_time.average{$Target_Group}" type = "line" style { palette = "orange" type = "solid" width = "normal" } } request { q = "week_before(avg:aws.applicationelb.target_response_time.average{$Target_Group})" type = "line" style { palette = "orange" type = "dotted" width = "normal" } } request { q = "avg:aws.applicationelb.target_response_time.average{targetgroup/fizzbuz/xxxxxxxxxxxxxxx}" type = "line" style { palette = "cool" type = "solid" width = "normal" } } request { q = "week_before(avg:aws.applicationelb.target_response_time.average{targetgroup:targetgroup/production-misokatsu/24d81e 06963f1ee3})" type = "line" style { palette = "cool" type = "dotted" width = "normal" } } 切れてますが5倍以上長い→
  19. ダッシュボードは 複製するにしても つらい!!

  20. Terraform v0.12待ち まだPreview版 - 去年の夏には…との噂だった for_each使える テンプレート機能とかもつく variable "graph_list" {

    default = { ALB_Response_time_01 = "avg:aws.applicationelb.target_response_time.average{*}" ALB_Response_time_02 = "avg:aws.applicationelb.target_response_time.average{*}" ALB_Response_time_03 = "avg:aws.applicationelb.target_response_time.average{*}" ALB_Response_time_04 = "avg:aws.applicationelb.target_response_time.average{*}" } } resource "datadog_timeboard" "sample_12" { title = "tf12_test_v12" description = "created using the Datadog provider in Terraform" dynamic "graph" { for_each = var.graph_list content { title = graph.key viz = "timeseries" precision = 0 request { q = graph.value type = "line" style = { palette = "orange" type = "solid" width = "normal" } } } }
  21. おわり Datadogもコード化して楽に管理 - 急な環境追加 - ブラウザでの誤操作対策 - ミュート等の戻し忘れ ダッシュボードはTerraform v0.12待かな…

    - terraformもdatadog-providerもビルドすれば利用可能