はじめに

アプリからNRQLを実行する際に「Insights API」を使っていたが、現在はdeprecatedになっている。

ドキュメントにあるように、現在は「NerdGraph」を利用することが推奨されている。

このAPIは、今ではNew Relicデータをクエリする優先方法ではありません。NerdGraphを使用してクエリしてください。
引用 : https://docs.newrelic.com/jp/docs/apis/insights-apis/query-insights-event-data-api/

NerdGraphを利用した形に置き換えるために、今回はこのNerdGraphを使ったNRQLの実行について調べたことをまとめる。

NerdGraphとは

New Relicのデータの参照や各種機能の設定を行うための、GraphQL形式のAPI。

参考: https://docs.newrelic.com/jp/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/

NerdGraphでできること

  1. NRDB内の情報を取得するクエリの実行。
  2. New Relicの各機能 (アカウント設定、アラート、ダッシュボード等) の設定

NerdGraphではイベントデータの取り込みはできない。別のAPI (データインジェスト用API) を利用する。
https://docs.newrelic.com/jp/docs/apis/intro-apis/introduction-new-relic-apis/#data-type-apis

今回は上記1の、データ取得のためのNRQL実行のリクエストを送る。

クエリする

APIキーの用意

NerdGraphの認証にはUser API Keyが利用される。事前このAPIキーを用意しておく。

https://docs.newrelic.com/jp/docs/apis/intro-apis/new-relic-api-keys/#user-api-key

今回のNRQL文

今回は、APMのトランザクション情報を取得するクエリとして、以下のNRQLを実行する。

SELECT * FROM Transaction

GraphiQLエクスプローラーでクエリ

用意されているGraphiQLエクスプローラーを利用し、ブラウザ上で実行が可能。
https://api.newrelic.com/graphiql

Query

{
  actor {
    account(id: xxxxxxx) {
      nrql(query: "SELECT * FROM Transaction") {
        results
      }
    }
  }
}

参考: https://docs.newrelic.com/jp/docs/apis/nerdgraph/examples/nerdgraph-nrql-tutorial/

NerdGraphの各フィールド情報やdocを参照しながらクエリを作成できるため簡単にクエリの検証ができる。

参考画面

cURLでクエリ

https://api.newrelic.com/graphqlに対してPOSTリクエストする。

curl https://api.newrelic.com/graphql \
  -H 'Content-Type: application/json' \
  -H 'API-Key: NRAK-xxxx' \
  --data-binary '{"query": "{\n  actor {\n    account(id: xxxxxxx) {\n      nrql(query: \"SELECT * FROM Transaction\") {\n        results\n      }\n    }\n  }\n}\n"}'

※ API keyとアカウントIDを指定する。

Pythonでクエリ

※ Python 3.8を使用

GraphQLのクライアントモジュールである gql を使う
https://github.com/graphql-python/gql

pip install gql==2.0.0

コード

app.py

from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport

api_key = "XXXX"  # your nr user api key
nr_id = "xxxxxxx"  # your nr account id

query_text = "SELECT * FROM Transaction"

url = "https://api.newrelic.com/graphql"
headers = {
    "API-Key": api_key,
    "Content-type": "application/json",
}

transport = RequestsHTTPTransport(url=url, headers=headers)
client = Client(transport=transport, fetch_schema_from_transport=True)

query = gql(
"""
{
  actor {
    account(id: %s) {
      nrql(query: "%s") {
          results
      }
    }
  }
}
""" % (nr_id, query_text)
)

result = client.execute(query)

query_results = result["actor"]["account"]["nrql"]["results"]
print(query_results)

※ API keyとアカウントIDを指定する。

実行

python app.py

まとめ

NewRelic上のデータを参照する方法として、GraphQLベースのAPIであるNerdGraphの利用が現在は推奨されている。
GraphQL形式であるため、各言語のGraphQLクライアントを使ってリクエストすることもできる。

今回はNRQLの実行に焦点を当てたが、他にもダッシュボードやアラートコンディションの作成や埋め込みURLの生成等、NerdGraphの用途はたくさんあり、それぞれチュートリアルドキュメントも用意されているため、それぞれまた活用していきたいと思う。

NerdGraph is New Relic's GraphQL-format API, used to query data and do some product configurations.

元記事はこちら

https://qiita.com/mmclsntr/items/e16e4c6bba5e0c763dee
著者:@mmclsntr