【New Relic】変数を含んだNerdGraphクエリを実行してみた

記事タイトルとURLをコピーする

みなさんこんにちは。
マネージドサービス部の福田です。

突然ですがNerdGraph APIという機能をご存じでしょうか。
GUIの画面からGraphQLベースのクエリをNew RelicAPI実行できる機能になります。

以前NerdGraph APIに関するブログ記事を投稿し、記事内で記載したNerdGraph APIの出来ることは以下になります。

  • NewRelicに収集した情報を取得するクエリ実行可能
  • New Relicの各機能(アカウント設定、アラート、ダッシュボードなど)の設定可能
  • GraphQLの知識がなくてもGraphiQL explorerを使用して直感的にクエリの生成可能
  • curlコマンドを使用してクエリを実行することも可能
    • スクリプトを作成することで複数設定、変数含んだクエリ実行可能

blog.serverworks.co.jp

ブログを書いていた当時はGraphiQL explorer内のクエリに変数を使用することはできないのかなと思い curlコマンドを使用することでクエリ実行をしておりました。

ただ、現在GraphiQL explorerを見るとvariableという項目があります。

前置きが長くなりましたがブログ書いた当時はvariableの項目はなかった気がするので発見したからには試してみようと本ブログ記事にしようと思いました。
(当時から機能があり私が気付かなかっただけ説が濃厚ですが)

NerdGraphのクエリ(GraphQL)の生成方法

NerdGraphのクエリ(GraphQL)の生成方法は以下の通りになるかと思います

  • 自力でクエリを作成する
  • NewRelicが用意しているGraphiQL explorerにより作成
  • 既存の設定からNerdGraphのクエリ情報を取得


今回は既存の設定情報からNerdGraphのクエリを作成していきます。

NerdGraphのクエリを取得したいコンデション画面からView as code をクリック

コンディション作成するためのクエリ内容を取得したいのでCreate with NerdGraphをクリック

Copy to clipboardをクリックし表示されたクエリをコピーする

取得したNerdGraphのクエリ(GraphQL)の実行

下記のリンクより、New Relic GraphiQLのページにアクセスする

https://api.newrelic.com/graphiql

New Relic GraphiQLにコピーしたクエリを張り付け実行する

New Relic GraphiQLで実行した設定内容が作成されていることを確認する

取得したNerdGraphのクエリ(GraphQL)を元に変数を用いるクエリに変更

変更前のNerdGraphのクエリ
mutation {
  alertsNrqlConditionStaticCreate(
    accountId: xxxxxx
    policyId: xxxxx
    condition: {
      enabled: true
      name:  "Test01-02"
      description:  """
      test:test1
      test:test2
      """
      nrql: {
        query:  "SELECT average(aws.ecs.CPUUtilization.byService) FROM Metric FACET aws.ecs.ClusterName, aws.ecs.ServiceName WHERE aws.ecs.ServiceName = 'service01'"
      }
      expiration: null
      runbookUrl:  null
      signal: {
        aggregationWindow: 300
        fillOption: NONE
        aggregationDelay: null
        aggregationMethod: EVENT_TIMER
        aggregationTimer: 300
        fillValue: null
        slideBy: null
        evaluationDelay: null
      }
      terms: [
        {
          operator: ABOVE
          threshold: 90
          priority: CRITICAL
          thresholdDuration: 1800
          thresholdOccurrences: ALL
        }
      ]
      violationTimeLimitSeconds: 2592000
    }
  ) {
    id
  }
}
変数を加えたNerdGraphのクエリ

以下内容を変数化した内容になります。

  • NewRelicアカウントID
  • NewRelicポリシーID
  • コンディション名
  • NRQL
  • description
mutation CreateNrqlCondition($accountId: Int!, $policyId: ID!, $description: String!,$nrql: Nrql!,$conditionname: String!) {
  alertsNrqlConditionStaticCreate(
    accountId: $accountId
    policyId: $policyId
    condition: {
      enabled: true
      name: $conditionname
      description: $description
      nrql: {
        query:$nrql
      }
      expiration: null
      runbookUrl: null
      signal: {
        aggregationWindow: 300
        fillOption: NONE
        aggregationDelay: null
        aggregationMethod: EVENT_TIMER
        aggregationTimer: 300
        fillValue: null
        slideBy: null
        evaluationDelay: null
      }
      terms: [
        {
          operator: ABOVE
          threshold: 90
          priority: CRITICAL
          thresholdDuration: 600
          thresholdOccurrences: ALL
        }
      ]
      violationTimeLimitSeconds: 2592000
    }
  ) {
    id
  }
}
variableの内容
{
  "accountId": ★NewRelicアカウントID★,
  "policyId": "★NewRelicポリシーID★",
  "conditionname":"Test01-03",
  "nrql":"SELECT average(aws.ecs.CPUUtilization.byService) FROM Metric FACET aws.ecs.ClusterName, aws.ecs.ServiceName WHERE aws.ecs.ServiceName = '★リソース名★'",
  "description": "test:test1\ntest:test2"
}
New Relic GraphiQLに上記内容を張り付けて実行する

New Relic GraphiQLで実行した設定内容が作成されていることを確認する

まとめ

いかがでしたでしょうか。

New Relic GraphiQL explorerのvariable項目を使用することで変数を含んだクエリ実行が可能になります。
同じような設定を新たに設定したい場合などに活用できるかと思います。
複数設定はexplorer画面から出来ないような気がするので複数設定したい場合は curlコマンドを活用した仕組化が必要になるかと思います。

とはいえ以前の記事でも書きましたがNerdGraphはとても便利なので
是非触ってみてはいかがでしょうか

福田 圭 (記事一覧)

マネージドサービス部

医薬品業界からエンジニアに転身

2022年01月にサーバーワークスに入社

2023 New Relic Partner Trailblazer