説明

datadogのmulti alert monitoringをメンテナンス時に全てではなく一部だけをmute/unmuteするのに、web uiを使って実施するのは台数が多い場合等は手間がかかりすぎて結構な時間が掛かってしまいます。
そこで、datadogのapiでmute/unmuteするスクリプトをかきました。
apiはshell,python,rubyで利用出来ますが、今回はshellでかきました(curlコマンド)。

事前準備

1.EC2 タグの追加

mute,unmuteの対象となるEC2に対してTAGを追加します。

今回は検証・本番環境の内、検証環境のみをmute,unmuteしたいので
Name:env
Value:test
を追加しました。

datadog側の設定追加も必要です。
multi alertの対象としてEC2に追加したTAGを新たに追加します。

2.mute,unmute対象のモニタIDを確認する

スクリプト

1.muteスクリプト

#!/bin/bash

api_key=任意のapiキー
app_key=任意のappキー
monids_multi=(任意のモニタIDを件数分の配列指定可)

for monid in ${monids_multi[@]}
do
    curl -X POST -H "Content-type: application/json" \
    -d '{
          "scope":"env:test"
        }' \
"https://app.datadoghq.com/api/v1/monitor/${monid}/mute?api_key=${api_key}&application_key=${app_key}"
done

2.unmuteスクリプト※注意事項あり!(後述します)(後述します)

#!/bin/bash

api_key=任意のapiキー
app_key=任意のappキー
monids_multi=(任意のモニタIDを件数分の配列指定可)

for monid in ${monids_multi[@]}
do
    curl -X POST -H "Content-type: application/json" \
    -d '{
          "scope":"env:test"
        }' \
"https://app.datadoghq.com/api/v1/monitor/${monid}/unmute?api_key=${api_key}&application_key=${app_key}"
done

注意事項

unmuteすると、対象モニタ用に設定されているManage Downtimeが消されてしまいます。
その為、毎日夜間にメンテナンス時間があるなどでManage Downtimeを設定している環境ではManage Downtimeを設定しなおす必要があります。
以下にManage Downtimeもapiで作成するスクリプトを記載します。
メンテナンス時間は毎日1:00~2:00に設定しています。

Manage Downtime生成スクリプト

#!/bin/bash

api_key=任意のapiキー
app_key=任意のappキー
monids_schedule=(任意のモニタIDを件数分の配列指定可)

if [ "$(uname)" == 'Darwin' ]; then
    starttime=`date -v+1d +'%Y-%m-%d '`01:00:00
    starttimeunix=`date -j -f "%Y-%m-%d %H:%M:%S" "${starttime}" "+%s"`
    endtime=`date -v+1d +'%Y-%m-%d '`02:00:00
    endtimeunix=`date -j -f "%Y-%m-%d %H:%M:%S" "${endtime}" "+%s"`
else
    starttime=`date -d tomorrow +'%Y-%m-%d '`01:00
    starttimeunix=`date -d "${starttime}" +%s`
    endtime=`date -d tomorrow +'%Y-%m-%d '`01:00
    endtimeunix=`date -d "${endtime}" +%s`
fi

for monid in ${monids_schedule[@]}
do
curl -X POST -H "Content-type: application/json" \
-d '{
     "monitor_id": '"${monid}"',
      "scope": "env:test",
      "start": '"${starttimeunix}"',
      "end": '"${endtimeunix}"',
      "recurrence": {
        "type": "days",
        "period": 1
      }
    }' \
"https://app.datadoghq.com/api/v1/downtime?api_key=${api_key}&application_key=${app_key}"
done

補足

datadogのAPI refferenceの”SCHEDULE MONITOR DOWNTIME”にはパラメータにmonitor_idの記載が無いのですが、datadogサポート様に確認したところ、monitor_idもパラメータ指定可能とのご回答頂きました。

以上です。

元記事はこちら

datadogのmulti alert monitoringの特定のインスタンスのみをcliでmute/unmuteする方法