New Relic ではAPMを利用しているアプリケーションに関する様々な情報をEnvironmentページで確認することができます。
しばしば、このEnvironmentに掲載されている情報を NRQLでクエリしたいと質問されることがあります。残念ながらNRQLではクエリできないのですが、NerdGraphを利用してクエリすることが可能です。この記事ではNerdGraphを使ってEnvironmentの情報を検索する方法を紹介します。NerdGraphそのものについてはこちらのドキュメントを参考にしてください。
https://docs.newrelic.com/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/
プログラムから利用する場合でも、ダッシュボードに組み込む場合でも、まずはNerdGraph explorer(以下、Explorer)を利用するのがおすすめです。以下のドキュメントを読むと簡単な使い方がわかります。New Relic user keyが必要ですが、Explorer上で既存のものを選ぶこともできますし、新規に作ることもできます。
https://docs.newrelic.com/docs/apis/nerdgraph/get-started/nerdgraph-explorer
APM Environmentの情報を取得するためには、以下のクエリを実行します。<YOUR_ACCOUNT_ID>の部分は対象のアカウントIDで置き換えてください。
{
actor {
account(id: <YOUR_ACCOUNT_ID>) {
agentEnvironment {
environmentAttributes {
nextCursor
results {
attributes {
attribute
value
}
applicationGuids
details {
language
host
id
name
}
}
}
}
}
}
}
実行するとこのような感じでずらっと出力されます。
1回にクエリ可能な量よりも多い場合は、nextCursorにカーソル値が表示されます。続きをクエリしたい場合はcursorパラメーターにこの値を指定して実行します。
また、filterパラメーターを使って絞り込むことができます。
さて、これでEnvironmentの情報そのものは取得できましたが、実はどのAPMなのかというのはapplicationGuidsに表示されているIDでしかわかりません。さすがにこれだけではどのAPMなのか判断できないので、このIDからAPM情報を取得してみましょう。
以下のクエリで<guid>の部分にID値を列挙します。クエリ例では2つですが、クエリしたい対象だけ並べてください。
query getEntity {
actor{
entities(guids: [“<guid>”,”<guid>”]) {
... on ApmApplicationEntity {
guid
name
name
applicationInstances {
modules {
name
version
attributes {
name
value
}
}
environmentAttributes {
attribute
value
}
agentSettingsAttributes {
value
attribute
}
details {
host
id
language
name
}
}
accountId
applicationId
runningAgentVersions {
maxVersion
minVersion
}
language
}
}
}
}
するとアプリケーションに関する情報が出力されます。
このようにして、データの取得自体はExplorerでお手軽に試すことができました。これを再利用しやくすプログラムとして実行するには、大きく2つの手段が提供されています。
まず、New Relicのアプリとして追加することができます。手順はこちらを参照ください。
https://developer.newrelic.com/build-apps/add-nerdgraphquery-guide/
また、単にプログラムから実行して取得したデータも自分のプログラム内で処理したいという場合は、REST APIで利用したり、New Relic CLIのnewrelic nerdgraph コマンドを利用することができます。NerdGraphはこれ以外にもさまざまな情報の取得や管理に使えますのでぜひご活用ください。
次のステップ
サインアップ本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。