1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

新卒エンジニアによる全部俺カレンダーAdvent Calendar 2022

Day 8

メンテナンス時にNewRelicのアラートの有効/無効を切り替えるスクリプトを作った

Last updated at Posted at 2022-12-08

概要

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が作成されてるのを確認します。
スクリーンショット 2022-12-07 18.11.13.png

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が破棄されたことを確認。

スクリーンショット 2022-12-07 18.10.54.png

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?