New Relic NRQL基礎 - データ分析クエリ言語の基本概念

New Relicでデータ分析を行うときに必要なのが、NRQL(New Relic Query Language)という専用の言語です。NRQLを使えば、New Relicに蓄積されたすべてのデータに統一された方法でアクセスでき、リアルタイムでの分析が可能です。ここでは、NRQLの基本的な使い方から実際の運用で役立つ活用方法まで、初心者でもわかりやすいように説明していきます。

NRQLとは何か

NRQL(New Relic Query Language)は、New RelicのデータベースにSQLと似た方法でアクセスするための言語です。これまでSQLを使ったことがある人なら、すぐに使い始められるでしょう。

NRQLの便利な点は、メトリクス、イベント、ログ、トレースなど、異なる種類のデータをそれぞれ別々のツールで扱う必要がなく、すべて同じ書き方で検索できることです。一つの言語で様々なデータを扱えるので、学習コストも低く済みます。

New RelicのWeb画面でNRQLクエリを実行すると、大量のデータが蓄積されたデータベースに対して、結果を数秒で取得できます。ただし、クエリの実行時間には2分間の制限があり、あまり複雑なクエリはタイムアウトしてしまいます。また、過去のデータをどこまで遡って検索できるかは契約プランによって異なります。これだけ高速にデータを検索できるので、日々の運用監視やトラブル対応で大変役立ちます。

基本的な構文と文法

NRQLの基本的な構文は、SQL SELECT文と非常によく似ています。最もシンプルなクエリから見てみましょう。

sql
SELECT count(*)
FROM Transaction
SINCE 1 hour ago

このクエリは、過去1時間に発生したすべてのトランザクション(Webリクエストなど)の件数を数えます。ここでの「Transaction」は、New Relicが自動で収集するデータの一種で、Webアプリケーションへのアクセス情報が含まれています。

より実用的な例として、アプリケーション別の平均応答時間を取得するクエリを見てみましょう。

sql
SELECT average(duration), count(*)
FROM Transaction
WHERE appName = 'MyWebApp'
SINCE 1 day ago

このクエリでは、WHEREで特定のアプリケーションだけを対象にし、average()関数で応答時間の平均を計算しています。NRQLにはこうした統計関数がたくさん用意されており、複雑な分析も比較的簡単に書けるようになっています。

データの種類と構造

New RelicでNRQLを使って扱えるデータは、主に4つの種類に分けられます。

メトリクスは、CPU使用率やメモリ使用量などの数値データを時間の経過とともに記録したものです。サーバーの状態を監視する際によく使われ、一定間隔で収集された値が保存されています。

イベントは、アプリケーションで起こった特定の出来事を記録したデータです。Webリクエストの処理、データベースへの問い合わせ、エラーの発生などが該当します。各イベントには発生時刻や関連する詳細情報が含まれています。

ログは、アプリケーションやシステムが出力するテキスト情報です。エラーメッセージ、アクセス記録、デバッグ情報などがあり、NRQLで検索や分析ができます。

トレースは、一つのリクエストがシステム内でどのように処理されたかの流れを記録したデータです。複数のマイクロサービスやシステムを跨ぐ処理の全体像を把握するのに使います。

実用的なクエリ例

実際の運用で役立つNRQLクエリの例をいくつか紹介します。

エラー率の分析には、以下のようなクエリが有効です。

sql
SELECT count(*) as 'Total Transactions',
       filter(count(*), WHERE error IS true) as 'Error Count',
       percentage(count(*), WHERE error IS true) as 'Error Rate'
FROM Transaction
WHERE appName = 'Production-App'
SINCE 1 day ago
FACET name

このクエリでは、filter()関数でエラーのみを数え、percentage()関数で全体に占めるエラーの割合を計算しています。FACETを使うことで、トランザクション名ごとに結果を分けて表示できます。

レスポンス時間の分布を調べる場合は、パーセンタイル関数が便利です。

sql
SELECT percentile(duration, 50) as 'Median',
       percentile(duration, 95) as '95th Percentile',
       percentile(duration, 99) as '99th Percentile'
FROM Transaction
WHERE appName = 'MyApp'
SINCE 1 hour ago
TIMESERIES 5 minutes

TIMESERIESを使うことで、時間ごとのデータ変化をグラフで表示でき、傾向やパターンを把握しやすくなります。

データフィルタリングとグルーピング

NRQLでは、WHERE句を使って様々な条件でデータをフィルタリングできます。数値、文字列、ブール値、さらには配列や正規表現まで対応しています。

sql
SELECT count(*)
FROM Transaction
WHERE duration > 1.0
  AND appName LIKE '%production%'
  AND userType != 'internal'
SINCE 1 hour ago

FACET句を使用すると、指定した属性に基づいてデータをグループ化できます。これは、SQLのGROUP BY句と同じような働きをします。

sql
SELECT average(duration)
FROM Transaction
FACET browserType, deviceType
WHERE appName = 'MyApp'
SINCE 1 day ago
ORDER BY average(duration) DESC
LIMIT 10

複数の属性でFACETすることで、より詳細な分析ができます。上の例では、ブラウザとデバイスの組み合わせごとに平均応答時間を計算し、特に遅い組み合わせを上位10件表示しています。

クエリでエラーが起きたときにチェックすべきポイントは以下の通りです:

  • 属性名のスペルミスがないか
  • データが存在しない期間を指定していないか
  • アクセス権限がないデータを参照していないか

まとめ

NRQLは、New Relicでデータ分析を行う際の基本ツールです。SQLと似た書き方であるため取っ付きやすく、かつ監視データの分析に特化した便利な機能が揃っています。基本的な使い方を覚えることで、日々のシステム監視からトラブルの原因調査まで、様々な場面で活用できます。

このあとは、より詳しいNRQLクエリの作り方や、カスタムダッシュボードでの利用方法を学んでいくことで、New Relicの能力をさらに引き出せるようになります。


関連記事: NRQL高度クエリ関連記事: カスタムダッシュボード作成