New RelicのData Plusオプションは、業界をリードするセキュリティ、スケーラビリティ、およびパフォーマンスを組み合わせることにより、成熟したエンジニアリングチームのニーズに応える機能を、シンプルな料金体系で提供します。このオプションには、データの長期保存、ログの難読化設定のカスタマイズ、  FedRAMP対応などの機能が含まれています。

また、通常のデータオプションで提供されているクエリ時間は1分ですが、Data Plusでは更に長い時間のクエリが実行できるようになります。Data Plusにおけるクエリの最大実行時間は以下の通りです。

Data PlusでNRQLのメリットを最大化する

ビジネスの成長、システムの複雑化にあわせて、蓄積されるデータセットも増加していきます。NRQL (New Relic Query Language) を使用すると、技術スタック全体に渡る大規模なデータセットから、必要なデータを効果的に検索・収集することができます。また、カスタムダッシュボードやアラートの作成にNRQLを活用すると、ビジネスにおける重要な指標に、迅速かつリアルタイムにアクセスすることが可能です。

Data Plusでは、通常より長い時間のクエリ実行がサポートされるため、リクエストのタイムアウトを発生させることなく、より確実に大量のデータセットの検索結果を得ることが可能となります。また、クエリ実行時間の制約に伴う平均検出時間(MTTD)の増加や、クエリのタイムアウトによってデータの可視性が低下するといった問題を未然に回避することができます。

NerdGraphを使用して、より長時間のクエリを実行する方法については、次の動画でも解説しておりますので、是非ご覧ください。

 

 

NerdGraphにおけるクエリ時間の可視化

ここからは、NerdGraph APIを通じた操作について触れていきます。NerdGraph API Explorerのご利用にあたっては、New Relic APIキーとそのIDを取得する必要があります。これを実行するクエリは以下のようになります。初めての方は、チュートリアルも併せてご参照ください。

 

{
 actor {
   user {
     name
     id
   } 
}
}

同期型のクエリは、今回の例で実行したような小規模なクエリや、データポイントの探索範囲が限定された多くのクエリに適しています。しかし、大量かつ複雑なデータセットに対してクエリする場合には、1分というNRQLの実行時間では不十分なケースも考えられます。次の例では、NerdGraphでNRQLクエリを使用して、2か月前まで遡ってトランザクションの総数を調査する場合について説明します。

 
{
   actor {
      account(id: YOUR_ACCOUNT_ID) {
         nrql(query: "SELECT count(*) FROM Transaction since 2 months ago") {
            results
         }
      }
   }
}

上のクエリでは2か月前のデータを引き出すことができなかったとします。これがタイムアウトに起因するものであった場合には、NRDB query duration exceeded the set timeout(NRDBクエリ時間が設定されたタイムアウトを超過しました)というメッセージが表示されます。

 

Data Plusで実行時間の長いクエリを使用する方法

Data Plusオプションの利点を活かし、最大10分間に渡るクエリを実行するには、NerdGraphと呼んでいるNew RelicのGraphQL APIインターフェースを使用します。

{   actor {      account(id: 1) {         nrql(query: "SELECT count(*) FROM Transaction since 2 months ago, async: true) {            results            queryProgress {               queryId               resultExpiration               retryAfter               retryDeadline            }         }      }   }}

NRQLクエリ実行時のパラメータにasync: trueを追加することで、バックグラウンドで非同期的にクエリを実行することができます。クエリ実行時にレスポンスとして返されるqueryIdは、後からクエリ実行結果を参照するために必要となりますので、コピー&ペーストするなどして控えておいてください。
クエリ実行結果を取得するには、控えておいたqueryIdを使用して、以下のコマンドを使用します。

 

{  actor {    nrqlQueryProgress(accounts: YOUR_ACCOUNT_ID, queryID: “YOUR_QUERY_ID”      results    }  }}

このように、NerdGraphクエリを利用すれば、ブラウザのタイムアウトやHTTP接続エラーによってクエリが中断されてしまうリスクを軽減することができます。また、クエリの結果を後で取得したり、クエリが結果またはエラーを返すまで繰り返すことも可能です。