はじめに
アプリから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でできること
- NRDB内の情報を取得するクエリの実行。
- 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キーを用意しておく。
今回の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
コード
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の用途はたくさんあり、それぞれチュートリアルドキュメントも用意されているため、それぞれまた活用していきたいと思う。