News and media screen tile collage

New Relic ではAPMを利用しているアプリケーションに関する様々な情報をEnvironmentページで確認することができます。

https://docs.newrelic.com/docs/apm/agents/manage-apm-agents/troubleshooting/get-environment-data-about-your-apm-app/

しばしば、この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 CLInewrelic nerdgraph コマンドを利用することができます。NerdGraphはこれ以外にもさまざまな情報の取得や管理に使えますのでぜひご活用ください。