概要
NewRelicで監視しているホストをメンテナンスする時、メンテ起因のアラートが発生してSlackなどに通知が飛んでくる!って状況を避けるために、一時的にアラートをミュートしたいって時がありますよね。
そんな時に、Muting Ruleを作成して一時的にアラートをミュートにするのですが、手作業でポチポチやるのはめんどくさい!ということでNerdGraph API を活用して、任意のポリシーに基づくアラートをミュートするスクリプトを作成してみました。
Muting Rulesを作成する
API_KEY=xxxx
ACCOUNT_ID=XXXX
POLICY_NAME=$@
NERD_GRAPH="mutation { alertsMutingRuleCreate(accountId: ${ACCOUNT_ID}, rule: {condition: {conditions: {attribute: \\\"policyName\\\" , operator: IN, values: \\\"${POLICY_NAME}\\\"}, operator: AND}, enabled: true, name: \\\"maintenance-${POLICY_NAME}\\\"}) { id name schedule { startTime endTime } enabled } }"
curl https://api.newrelic.com/graphql \
-H 'Content-Type: application/json' \
-H "API-Key: ${API_KEY}" \
--data-binary "{\"query\": \"${NERD_GRAPH}\"}"
NerdGraph部分を詳しく
mutation {
alertsMutingRuleCreate(accountId: "${ACCOUNT_ID}", rule: {condition: {conditions: {attribute: "policyName", operator: IN, values: "${POLICY_NAME}"}, operator: AND}, enabled: true, name: "maintenance-${POLICY_NAME}"}) {
id
name
schedule {
startTime
endTime
}
enabled
}
}
引数として指定した文字列を含むポリシーをミュートするMuting Ruleを作成するNerdGraphになります。
実行
sh maintenance.sh {対象アラートポリシー名}
引数で指定したアラートポリシー名を部分一致で指定して
これで対象のアラートポリシーがアラート発令するのをストップする。
レスポンス
{"data":{"alertsMutingRuleCreate":{"enabled":true,"id":"26234454","name":"maintenance-hoge","schedule":null}}}
ここで返ってきたidは後にMuting Rulesを止めるために控えておく。
NewRelicでMuting Rulesが作成されてるのを確認します。
Muting Rulesを破棄する
次にミュート解除シェルを発動させる(メンテナンス終了後に実施しないと永遠にアラートが止まったまんまになります。)
API_KEY=XXXX
ACCOUNT_ID=XXXX
MUTING_RULE_ID=$@
NERD_GRAPH="mutation {alertsMutingRuleDelete(accountId: ${ACCOUNT_ID}, id: \\\"${MUTING_RULE_ID}\\\") { id } }"
curl https://api.newrelic.com/graphql \
-H 'Content-Type: application/json' \
-H "API-Key: ${API_KEY}" \
--data-binary "{\"query\": \"${NERD_GRAPH}\"}"
実行
sh terminate.sh {id}
レスポンス
{"data":{"alertsMutingRuleDelete":{"id":"0000000"}}}
Muting Ruleが破棄されたことを確認。
参考