はじめに
皆さんこんにちはasmgです。今回は、Datadog monitorの閾値を特定の時間だけ変更するのにDatadog Downtime使うことで実現してみたいと思います。
Datadog monitorの閾値を特定時間だけ変えたくなった背景
あるサービスで特定時間に負荷がかかりalertが鳴り止まないという問題がありました。ただ、このalertは想定しているものなのでalertを飛ばしたくないという課題がありました。
Datadog Downtime使うことで実現
背景で述べた問題を解決するために、特定の時間だけ閾値を変更して必要なalertを飛ばすように実現しました。
今回は、Datadog Downtime使うことで実現する方法を検討して実現してみました。
- 2種類の閾値以外は同じ設定のモニター(例 モニターA,B)用意する
- Datadog Downtimeの機能を活用して下記のようにモニターAとBのダウンタイムをずらすことで特定の時間だけ閾値を変更することを実現する
Datadog Downtimeとは、設定した時間だけmonitorのalertと通知を無音にすることができる機能です。
ref:https://docs.datadoghq.com/ja/monitors/notify/downtimes/
イメージ図
terraform化
最後にDatadog monitorの閾値を特定の時間だけ変更する方法をterraformで実現してみました。
- ディレクトリー構成
├── service-monitor
│ ├── downtime.tf
│ └── monitor.tf
- monitor.tf
terraform {
required_version = "= 0.14.11"
required_providers {
datadog = {
source = "DataDog/datadog"
version = "3.3.0"
}
}
}
provider "datadog" {
api_key = "{API_KEY}"
app_key = "{APP_KEY}"
}
resource "datadog_monitor" "a-monitor" {
name = "a-monitor"
type = "metric alert"
message = <<EOT
A alert
EOT
query = "{Queryを入れる}"
}
resource "datadog_monitor" "b-monitor" {
name = "b-monitor"
type = "metric alert"
message = <<EOT
B alert
EOT
query = "{Queryを入れる}"
}
- downtime.tf
resource "datadog_downtime" "a-monitor-downtime" {
scope = ["*"]
#UTC Date
start_date = "2022-12-21T02:00:00Z"
end_date = "2022-12-21T03:00:00Z"
monitor_id = datadog_monitor.a-monitor.id
timezone = "Asia/Tokyo"
recurrence {
type = "days"
period = 1
}
}
resource "datadog_downtime" "b-monitor-downtime" {
scope = ["*"]
#UTC Date
start_date = "2022-12-21T03:00:00Z"
end_date = "2022-12-22T02:00:00Z"
monitor_id = datadog_monitor.b-monitor.id
timezone = "Asia/Tokyo"
recurrence {
type = "days"
period = 1
}
}
Datadog Downtime のstart_date
をterraformで設定する際、過去の時間を設定できません。
なので、設定する場合には、未来の時間を設定してください。
まとめ
Datadog downtimeを活用することで特定時間だけDatadog monitor自体を変更し、閾値を変更することができました。
Datadog monitorの閾値を特定時間だけ変更したいと思っている方の参考にしていただけると幸いです。