share facebook facebook twitter menu hatena pocket slack

2017.02.27 MON

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

三浦 剛慈

WRITTEN BY 三浦 剛慈

説明

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する方法

三浦 剛慈

三浦 剛慈

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。