【New Relic】クリスマスだし、 NerdGraph API を使ってミューティングルールをコマンド一発で設定する方法を紹介

# メリークリスマス^^
突然ですが、クリスマスですね。
仕事以外に予定はあるかって？
私はもちろん、ありません^^

本記事をこのタイミングで読んでいるあなたも、きっと仕事中でしょう。
特にリソース変更などの作業中に「New Relic からアラートが発報してしまう」場合、**毎回手動でミューティングルールを設定するのは手間ですよね。**

そこで今回は、 NerdGraph API を活用して New Relic のミューティングルールを、ローカル端末から一発操作する方法をご紹介します。

コマンドをあらかじめ用意しておけば、ミューティングルールの操作をわざわざ GUI で行う必要がなくなり、操作の効率化が図れます。
## 前提
まず、以下 [参考リンク] 内に記載の公式ドキュメントを参照して、ミューティングルールの基本的な概念と使い方、利用可能な NerdGraph の各値を理解しておきましょう。

そして、**事前に API キー（ユーザーキー） を取得しておく必要**がありますので、 [参考リンク] 内の New Relic API キー を参照の上、準備してください。

また、これからご紹介するコマンドは macOS 環境端末からの実行を前提としています。
#### 参考リンク
[Muting rules: Suppress notifications](https://docs.newrelic.com/docs/alerts/get-notified/muting-rules-suppress-notifications/)
[New Relic API キー - ユーザーキー](https://docs.newrelic.com/jp/docs/apis/intro-apis/new-relic-api-keys/#user-key)

:::note warn
注意: 本記事の執筆は 2024年12月25日時点の情報を基にしています。最新の情報や仕様変更については、公式ドキュメントを確認してください。
:::
## ① １つのポリシーに対して1つのミューティングルールを作成する
以下のコマンドを実行することで、新たにミューティングルールを作成することができます。
一部マスキングしてますので、適宜置き換えてください。
```
curl -X POST https://api.newrelic.com/graphql \
  -H 'Content-Type: application/json' \
  -H 'API-Key: ********************** \
  -d @- <<EOF
{
  "query": "mutation {
    alertsMutingRuleCreate(
      accountId: *******,
      rule: {
        condition: {
          conditions: [
            {
              attribute: \"policyName\",
              operator: EQUALS,
              values: [\"*******\"]
            }
          ],
          operator: AND
        },
        enabled: true,
        name: \"Temporary Muting Rule\",
        schedule: {
          startTime: \"2024-12-25T19:00:00\",
          endTime: \"2024-12-25T23:00:00\",
          timeZone: \"Asia/Tokyo\"
        }
      }
    ) {
      id
      name
      enabled
      schedule {
        startTime
        endTime
        timeZone
      }
    }
  }"
}
EOF
```
### 変更が必要なパラメータの説明
:::note info
**API-Key:** New Relic の API キー (ユーザーキー)を入力してください。
**accountId:** New Relic のアカウント ID を入力してください。
**values:** ポリシー名を入力してください。
**name:** 作成するミューティングルールの名前を入力してください。
**startTime:** ミューティングルールの開始時間を日本時間で入力してください。
**endTime:** ミューティングルールの終了時間を日本時間で入力してください。
:::
### 出力結果例
ミューティングルールが作成されると以下のように出力されます。
特に、**id ※** の値は後の操作で必要になるので控えておいてください。
```
{"data":{"alertsMutingRuleCreate":{"enabled":true,"id":"62093084","name":"Temporary Muting Rule","schedule":{"endTime":"2024-12-25T23:00:00+09:00","startTime":"2024-12-25T19:00:00+09:00","timeZone":"Asia/Tokyo"}}}}%  
```
## ② ミューティングルールの時間帯を変更する
以下のコマンドをローカル端末から実行することで、先ほど作成した既存ミューティングルールの時間帯を変更することができます。
定型作業などで、毎回時間帯を変更する必要がある場合はこういったコマンドを活用すると便利です。
```
curl -X POST https://api.newrelic.com/graphql \
  -H 'Content-Type: application/json' \
  -H 'API-Key: ********************** \
  -d @- <<EOF
{
  "query": "mutation {
    alertsMutingRuleUpdate(
      accountId: *******,
      id: \"*******\",
      rule: {
        schedule: {
          startTime: \"2024-12-26T19:00:00\",
          endTime: \"2024-12-26T23:00:00\",
          timeZone: \"Asia/Tokyo\"
        }
      }
    ) {
      id
      name
      enabled
      schedule {
        startTime
        endTime
        timeZone
      }
    }
  }"
}
EOF
```
### 変更が必要なパラメータの説明
:::note info
**API-Key:** New Relic の API キー (ユーザーキー)を入力してください。
**accountId:** New Relic のアカウント ID を入力してください。
**id: ※ で控えておいた ID を入力してください。**
**startTime:** 変更したいミューティングルールの開始時間を日本時間で入力してください。
**endTime:** 変更したいミューティングルールの終了時間を日本時間で入力してください。
:::
## ③ ミューティングルールを無効化する
以下のコマンドをローカル端末から実行することで、先ほど作成した既存ミューティングルールを無効化することができます。
```
curl -X POST https://api.newrelic.com/graphql \
  -H 'Content-Type: application/json' \
  -H 'API-Key: ********************** \
  -d @- <<EOF
{
  "query": "mutation {
    alertsMutingRuleUpdate(
      accountId: *******,
      id: *******,
      rule: {
        enabled: false
      }
    ) {
      id
      name
      enabled
    }
  }"
}
EOF
```
### 変更が必要なパラメータの説明
:::note info
**API-Key:** New Relic の API キー (ユーザーキー)を入力してください。
**accountId:** New Relic のアカウント ID を入力してください。
**id: ※ で控えておいた ID を入力してください。**
:::
## ④ ミューティングルールを削除する
以下のコマンドをローカル端末から実行することで、先ほど作成した既存ミューティングルールを削除することができます。
```
curl -X POST https://api.newrelic.com/graphql \
  -H 'Content-Type: application/json' \
  -H 'API-Key: ********************** \
  -d @- <<EOF
{
  "query": "mutation {
    alertsMutingRuleDelete(
      accountId: *******,
      id: *******
    ) {
      id
    }
  }"
}
EOF
```
### 変更が必要なパラメータの説明
:::note info
**API-Key:** New Relic の API キー (ユーザーキー)を入力してください。
**accountId:** New Relic のアカウント ID を入力してください。
**id: ※ で控えておいた ID を入力してください。**
:::
# おまけ
運用時は複数のポリシーを一括でミュートする場合や、複数のミューティングルールを作成する場合もあるかと思います。
以下ではそのような場合に対応するためのコマンドをご紹介します。
## おまけ① 複数のポリシーに対して1つのミューティングルールを作成する
以下のコマンドをローカル端末から実行することで、複数のポリシーに対して1つのミューティングルールを作成することができます。
また、時間帯の変更や無効化、削除も前述のコマンドを活用することで実現できます。
```
curl -X POST https://api.newrelic.com/graphql \
  -H 'Content-Type: application/json' \
  -H 'API-Key: ********************** \
  -d @- <<EOF
{
  "query": "mutation {
    alertsMutingRuleCreate(
      accountId: *******,
      rule: {
        condition: {
          conditions: [
            {
              attribute: \"policyName\",
              operator: IN,
              values: [\"*******\", \"*******\"]
            }
          ],
          operator: AND
        },
        enabled: true,
        name: \"*******\",
        schedule: {
          startTime: \"2024-12-25T19:00:00\",
          endTime: \"2024-12-25T23:00:00\",
          timeZone: \"Asia/Tokyo\"
        }
      }
    ) {
      id
      name
      enabled
      schedule {
        startTime
        endTime
        timeZone
      }
    }
  }"
}
EOF
```
### 変更が必要なパラメータの説明
:::note info
**API-Key:** New Relic の API キー (ユーザーキー)を入力してください。
**accountId:** New Relic のアカウント ID を入力してください。
**values:** ポリシー名を入力してください。
**name:** 作成するミューティングルールの名前を入力してください。
**startTime:** ミューティングルールの開始時間を日本時間で入力してください。
**endTime:** ミューティングルールの終了時間を日本時間で入力してください。
:::
## おまけ② 複数のポリシーに対して複数のミューティングルールを作成する
以下では複数のポリシーに対して別々のミューティングルールを作成する方法です。
一個ずつコマンドを実行していってもよいのですが、効率を考えるのであればコマンド一発で実施しちゃいましょう！
また、時間帯の変更や無効化、削除も前述のコマンドを活用することで実現できます。
```
curl -X POST https://api.newrelic.com/graphql \
  -H 'Content-Type: application/json' \
  -H 'API-Key: ********************** \
  -d @- <<EOF
{
  "query": "mutation {
    rule1: alertsMutingRuleCreate(
      accountId: *******,
      rule: {
        condition: {
          conditions: [
            {
              attribute: \"policyName\",
              operator: EQUALS,
              values: [\"*******\"]
            }
          ],
          operator: AND
        },
        enabled: true,
        name: \"*******\",
        schedule: {
          startTime: \"2024-12-25T19:00:00\",
          endTime: \"2024-12-25T23:00:00\",
          timeZone: \"Asia/Tokyo\"
        }
      }
    ) {
      id
      name
      enabled
      schedule {
        startTime
        endTime
        timeZone
      }
    }

    rule2: alertsMutingRuleCreate(
      accountId: *******,
      rule: {
        condition: {
          conditions: [
            {
              attribute: \"policyName\",
              operator: EQUALS,
              values: [\"*******\"]
            }
          ],
          operator: AND
        },
        enabled: true,
        name: \"*******\",
        schedule: {
          startTime: \"2024-12-25T19:00:00\",
          endTime: \"2024-12-25T23:00:00\",
          timeZone: \"Asia/Tokyo\"
        }
      }
    ) {
      id
      name
      enabled
      schedule {
        startTime
        endTime
        timeZone
      }
    }
  }"
}
EOF
```
### 変更が必要なパラメータの説明
:::note info
**API-Key:** New Relic の API キー (ユーザーキー)を入力してください。
**accountId:** New Relic のアカウント ID を入力してください。
**values:** ポリシー名を入力してください。
**name:** 作成するミューティングルールの名前を入力してください。
**startTime:** ミューティングルールの開始時間を日本時間で入力してください。
**endTime:** ミューティングルールの終了時間を日本時間で入力してください。
:::
## さいごに
以上、NerdGraph API を活用して New Relic のミューティングルールをローカル端末から一発操作する方法をご紹介しました。
手動で GUI から操作するよりも、コマンドを活用することで作業効率を向上させることができます。

cloudpack では 「New Relic を導入したけど使い方がわからない」「導入を予定しているけど知見がない」といったお客様へ導入支援サービスをご用意しております。
お気軽にお問い合わせください(^^)
https://cloudpack.jp/service/cloud-service/newrelic-support.html

メリークリスマス^^