0
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.

New RelicAdvent Calendar 2021

Day 13

【New Relic】NerdGraphを使ってAPMのトランザクション情報を取得してみる

Last updated at Posted at 2021-12-12

はじめに

アプリから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キーを用意しておく。

今回の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を参照しながらクエリを作成できるため簡単にクエリの検証ができる。

参考画面

image.png

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の用途はたくさんあり、それぞれチュートリアルドキュメントも用意されているため、それぞれまた活用していきたいと思う。

0
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
0
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?