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

New Relicでデータ分析を行う際に欠かせないのが、NRQL(New Relic Query Language)という専用のクエリ言語です。NRQLは、New Relicが収集するすべてのテレメトリデータに対して統一的なアクセスを提供し、リアルタイムでの分析を可能にします。この記事では、NRQLの基本概念から実践的な使用方法まで、初学者でも理解しやすいように体系的に解説していきます。

NRQLとは何か

NRQL(New Relic Query Language)は、New RelicのユニバーサルデータベースNRDBにアクセスするためのSQLライクなクエリ言語です。SQLに慣れ親しんだエンジニアなら、直感的に使い始めることができる設計になっています。

NRQLの最大の特徴は、メトリクス、イベント、ログ、トレースといった異なる種類のテレメトリデータを、すべて同じ構文でクエリできることです。そのため、従来の監視ツールでは複数の専用インターフェースや設定が必要だった作業を、統一された言語で実現できます。

New RelicのWebUI上でNRQLクエリを実行すると、数十億のイベントが格納されたデータベースに対して、通常は数秒以内に結果が返されます。なお、クエリには実行時間制限があり、複雑なクエリは2分でタイムアウトします。また、データ保持期間は契約プランにより異なり、Standard版では8日間、Pro版以上では90日間のデータアクセスが可能です。この高いパフォーマンスは、リアルタイムでの運用監視や障害対応において大きな価値を提供します。

基本的な構文と文法

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

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

このクエリは、過去1時間に発生したすべてのトランザクションの件数を取得します。ここで重要なのは、FROM句で指定する「Transaction」は、New Relicが自動的に収集するイベントタイプの一つだということです。

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

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

このクエリでは、WHERE句を使って特定のアプリケーションに絞り込み、average()関数で応答時間の平均値を計算しています。NRQLでは、このような統計関数が豊富に用意されており、複雑な分析も簡潔に記述できるでしょう。

データの種類と構造

New RelicでNRQLを使ってアクセスできるデータは、主に以下の4つのタイプに分類されます。

メトリクス(Metrics)は、CPU使用率やメモリ使用量といった数値データを時系列で記録したものです。インフラストラクチャ監視でよく使用され、定期的にサンプリングされた値として保存されます。

イベント(Events)は、アプリケーションで発生した特定の出来事を記録したデータです。Webリクエストの処理、データベースクエリの実行、エラーの発生などが該当します。各イベントには、発生時刻とともに関連する属性情報が含まれます。

ログ(Logs)は、アプリケーションやシステムが出力するテキスト形式のデータです。エラーログ、アクセスログ、デバッグ情報などがここに含まれ、NRQLを使って構造化データとして分析できます。

トレース(Traces)は、分散システムにおける一連の処理の流れを記録したデータです。マイクロサービス間の通信や、複数のサービスにまたがる処理の全体像を把握するために使用されます。

実用的なクエリ例

実際の運用で役立つ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高度クエリ関連記事: カスタムダッシュボード作成