NRQLの構文、句、関数

NRQLは、New Relicデータベースのクエリに使用可能なクエリ言語です。このドキュメントではNRQLの構文、句、構成要素、関数について説明します。

構文

このドキュメントは、NRQLクエリにおいて使用される関数と句の参考資料です。NRQLを理解するためのその他のリソース:

クエリの構成要素

すべてのNRQLクエリはSELECT文または FROM句で始まります。その他すべての句は任意です。以下の句の定義には、NRQLクエリの例も含まれます。

 SELECT属性...
 SELECT関数(属性)...

SELECTは、属性または関数を指定することによってどの部分のデータタイプをクエリしたいかを指定します。その後、カンマ区切りの1つ以上の引数が続きます。各引数では、以下を実行できます。

  • ワイルドカードとして*を使用することにより、利用可能なすべての属性の値を取得できます。例えば:SELECT * from Transaction
  • 指定した属性、または カンマ区切りのリストで指定した複数の属性に関連する値を取得できます。
  • 集約関数を選択することで、指定した属性から集約値を取得できます。
  • ASを使って、各引数で返された結果にラベルを付けます。

基本的な数学関数とともにSELECTを使用することもできます

直近1週間の平均レスポンスタイム

このクエリは、直近1週間の平均応答時間を返します。

SELECT average(duration) FROM PageView SINCE 1 week ago
SELECT ...
  FROM data type
  ...

FROM句を使用して、クエリしたいデータタイプを指定します。クエリはFROMまたはSELECTから開始することができます。カンマ区切りのリストを使って、複数のデータタイプにまたがる同じ属性の値をマージすることができます。

ひとつのデータタイプのクエリ

このクエリは、直近3日間の APMトランザクション の全件数を返します。

SELECT count(*) FROM Transaction SINCE 3 days ago
複数のデータタイプのクエリ

このクエリは、直近3日間の APM トランザクションBrowserイベント の全カウント数を返します。

SELECT count(*) FROM Transaction, PageView SINCE 3 days ago
SHOW EVENT TYPES...

SHOW EVENT TYPESは、特定の時間範囲内にアカウントに存在するすべてのデータタイプのリストを返します。これは、SELECTの代わりにクエリの最初の句として使用されます。

この文脈において、「イベントタイプ」はNRQLクエリでアクセス可能なデータタイプを指します。

直近1日間のデータタイプ

このクエリは、直近1日のすべてのデータタイプを返します。

SHOW EVENT TYPES SINCE 1 day ago

WHERE句を使用して、結果をフィルタリングします。NRQLは、句で指定した条件を満たす結果を返します。

SELECT function(attribute) ...
  WHERE attribute [operator 'value' | IN ('value' [, 'value]) | IS [NOT] NULL ]
  [AND|OR ...]
  ...
  • 複数の条件を指定する場合は、条件を演算子ANDまたはORで区切ります。
  • SQLのjoinをシミュレートしたい場合は、WHEREまたはFACET句でカスタム属性を使用します。
WHERE句が受け付ける演算子 説明
=, !=, <, <=, >, >=

NRQLは標準的な比較演算子を受け付けます。

例: state = 'WA'

AND

2つの条件の論理積を定義するために使用します。

OR

2つの条件の論理和を定義するために使用します。

IS NULL

属性がnull値を持つかどうかを判定します。

IS NOT NULL

属性がnull値を持たないかどうかを判定します。

IN

属性の文字列値が指定したセットに存在するかどうかを判断します。この方法を使うと、複数のWHERE句を組み合わせた場合よりもパフォーマンスが向上します。

例: animalType IN ('cat', 'dog', 'fish')

NOT IN

属性の文字列値が指定したセットに存在しないかどうかを判断します。この方法を使うと、複数のWHERE句を組み合わせた場合よりもパフォーマンスが向上します。

値は括弧で囲み、カンマで区切る必要があります。例えば:

SELECT * FROM PageView WHERE countryCode NOT IN ('CA', 'WA')
LIKE

属性に指定の部分文字列が含まれるかどうかを判断します。

LIKE演算子の文字列引数は、文字列内の任意の位置にワイルドカードとしてパーセント記号(%)を受け付けます。部分文字列が一致対象の文字列で開始(先頭に一致)または終了(末尾に一致)しない場合、ワールドカードを文字列の先頭または末尾に指定する必要があります。

例:

userAgentName LIKE 'IE%'

  • IE
  • IE Mobile

userAgentName LIKE 'o%a%'

  • Opera
  • Opera Mini

userAgentName LIKE 'o%a'

  • Opera

userAgentName LIKE '%o%a%'

  • Opera
  • Opera Mini
  • Mozilla Gecko
NOT LIKE

属性に指定の部分文字列が含まれないかどうかを判定します。

RLIKE

属性に特定のRegex 部分文字列が含まれるかどうかを判断します。RE2 構文を使用します。

例:

appName RLIKE 'z.*|q.*''

  • z-app
  • q-app

hostname RLIKE 'ip-10-351-[0-2]?[0-9]-.*'

  • ip-10-351-19-237
  • ip-10-351-2-41
  • ip-10-351-24-238
  • ip-10-351-14-15

注:

  • Regexパターンではスラッシュをエスケープする必要があります。たとえば、\d\\dとする必要があります。

  • Regexではデフォルトで文字列全体マッチとなっているため、^$は暗黙となり、追加する必要はありません。
  • Regexパターンにキャプチャグループが含まれる場合、そのグループは無視されます。つまり、クエリで後で使用するためにグループはキャプチャされません。
NOT RLIKE

属性に指定のRegex部分文字列が含まれないかどうかを判定します。RE2 構文を使用します。

3つの条件を使ったクエリの例

このクエリは、過去24時間、米国およびカナダ国内のSafariユーザーについて、URLにcheckoutが含まれるページのブラウザレスポンスタイムを返します。

SELECT histogram(duration, 50, 20) FROM PageView
WHERE countryCode IN ('CA', 'US') AND userAgentName='Safari' AND pageUrl LIKE '%checkout%'
SINCE 1 day ago
SELECT ...
  AS 'label'
  ...

AS句を使用して、シングルクォート区切りの文字列で属性、集計、ファネル内のステップ、または数学関数の結果にラベルを付けます。このラベルは結果のチャートで使用されます。

数学関数とASを使用したクエリ

このクエリはセッションごとのページ数を返します。

SELECT count(*)/uniqueCount(session) AS 'Pageviews per Session'
  FROM PageView
ファネルとASを使用したクエリ

このクエリは、過去1週間でサイトのメインページと採用情報ページの両方を訪れた人の数を返します。

SELECT funnel(SESSION,
    WHERE name='Controller/about/main' AS 'Step 1',
    WHERE name = 'Controller/about/careers' AS 'Step 2')
    FROM PageView SINCE 1 week ago
SELECT ...
  FACET attribute
  ...

FACETを使用すると、結果を属性値で分割してグループ化できます。例えば、PageViewデータでdeviceType別にFACETを行い、トラフィックの何割が携帯電話、タブレット、およびデスクトップデバイスから発生しているかを把握することができます。

LIMIT句を使用して、表示するファセットの数を指定します(デフォルトは10)。複雑なグループ化には、FACET CASESを使用してください。FACET句は、カンマで区切られた最大5つの属性をサポートします。

ファセットは、SELECT句で指定した最初のフィールドによって降順でソートされます。1,000件以上のユニーク値を持つ属性をファセットに指定した場合、ファセット値のサブセットを選択し、それらをクエリタイプに従って並べ替えます。

min()max()、またはcount()を選択すると、FACETはこれらの関数を使用してファセットの選択方法とソート方法を決定します。その他の関数を選択すると、FACETはファセット対象の属性の発生頻度に基づいて、ファセットの選択方法とソート方法を決定します。

実際の例を使った複数の属性に対するファセットについては、こちらの New Relicのブログ記事をご覧ください。

count()を使用したファセットクエリ

このクエリは、ページビュー数が最も多い都市を表示します。このクエリは、都市ごとのページビューの合計数を使用してファセットの選択方法と並べ替え方法を決定します。

SELECT count(*) FROM PageView FACET city
uniqueCount()を使用したファセットクエリ

このクエリは、最も多数のユニークURLにアクセスしている都市を表示します。このクエリは、特定の都市が結果に表れる合計回数を使用して、ファセットの選択方法と並べ替え方法を決定します。

SELECT uniqueCount(pageUrl) FROM PageView FACET city
時間範囲で結果をグループ化

高度なセグメンテーションコホート分析では、バケット機能でファセットすることでデータをより効率的に分割することができます。

コホート分析は、タイムスタンプに基づいて結果をグループ化する方法です。指定範囲日時に対応するバケットに結果を分割することができます。

FACET ... AS 句では、クエリで AS キーワードを使用してファセットに名前を付けます。この句は、結果のファセットに明確な名前または簡略化された名前を追加するのに役立ちます。ネスト構造の集計クエリで、ファセットの名前を変更するためにも使用できます。

FACET ... AS クエリでは、結果のファセット名が変更されますが(たとえば、テーブルのヘッダーとして表示される場合)、実際のファセット名自体は変更されません。

FROM Transaction SELECT count(*) FACET response.headers.contentType AS 'content type'
SELECT ...
  FACET CASES (
    WHERE attribute operator value, WHERE attribute operator value, ...
    )
  ...

FACET CASESを使用して、FACETで可能な範囲を超えた複雑な条件別にデータを取り出します。複数の条件はカンマ,で区切ります。たとえば、PageViewデータをクエリして、1秒未満、1秒から10秒、10秒を上回るといったカテゴリにFACET CASESを行うことができます。ケース内の複数の属性を組み合わせたり、ASセレクタを使ってケースにラベルを付けることができます。データ点は、最大で1つのファセットケースに追加されます。つまり、一致する最初のファセットになります。

属性とともに時間関数も使用できます。

WHEREの基本的な使い方
SELECT count(*) FROM PageView FACET CASES (WHERE duration < 1, WHERE duration > 1 and duration < 10, WHERE duration > 10)
複数の属性に基づくグループ化

この例は、トランザクション名にloginが含まれる1つのバケットと、URLにloginが含まれ、かつカスタム属性がユーザーが有料ユーザーであったことを示すもう1つのバケットに結果をグループ化します:

SELECT count(*) FROM Transaction FACET CASES (WHERE name LIKE '%login%', WHERE name LIKE '%feature%' AND customer_type='Paid')
ASを使用したグループのラベル付け

この例は、結果に目視可能な名前をつけるためにASセレクタを使います:

SELECT count(*) FROM Transaction FACET CASES (WHERE name LIKE '%login%' AS 'Total Logins', WHERE name LIKE '%feature%' AND customer_type='Paid' AS 'Feature Visits from Paid Users')

NRQL では、デフォルトは SELECT 句の最初の集計で、クエリ内のファセットの選択をガイドします。FACET ... ORDER BY 句では、ORDER BY 修飾子を使用して集計関数を追加し、ファセットの選択方法を指定することで、このデフォルトの動作をオーバーライドできます。具体的には、LIMIT句によって制限される前に、最終結果に含めるファセットの優先度をオーバーライドします。この句はクエリで使用できますが、アラートやストリーミングには使用できません。

この例では、FACET ... ORDER BY を使用してアプリ トランザクションの平均期間を見つける方法を示し、応答サイズが最大のアプリによる上位10(デフォルトの制限)の最大期間を示しています。この場合、FACET ... ORDER BY が使用されていない場合、クエリ結果には、アプリの選択とは関係のない応答サイズで、期間が最も長い上位10件が代わりに表示されます。

FROM Transaction SELECT average(duration) TIMESERIES FACET appName ORDER BY max(responseSize)

LIMIT 句が適用される前に操作が実行されるため、FACET ... ORDER BYは、最終的なクエリ結果の種類に影響を与えません。これは、非時系列クエリの結果で特に顕著になります。

この場合の ORDER BY 修飾子は、ORDER BY 句とは機能が異なります。FACET attribute1 ORDER BY attribute2 の形式に従うクエリを解析する場合、NewRelic はこれらのクエリを FACET ... ORDER BY クエリとして読み取りますが、ORDER BYFACET の直後に表示される場合に限定されます。それ以外の場合、ORDER BY は New Relic によって句として解釈されます。

SELECT ...
  LIMIT count
  ...

LIMIT句を使用して、FACETクエリで返されるファセット値の最大数あるいはSELECT *クエリで返される項目の最大数を管理します。この句は、単一の整数値を引数に取ります。LIMIT句が指定されないか、値が提供されなかった場合、リミットのデフォルト設定はFACETクエリの場合は10に、SELECT *クエリの場合は100となります。

LIMIT句で許容される最大値は2,000です。

LIMITを使用したクエリ

このクエリはセッション数上位20カ国を表示し、各国のWindowsユーザー限定でレスポンスタイムの95 パーセンタイルを提供します。

SELECT uniqueCount(session), percentile(duration, 95)
  FROM PageView WHERE userAgentOS = 'Windows'
  FACET countryCode LIMIT 20 SINCE YESTERDAY
SELECT ...
  LIMIT count OFFSET count
  ... 

OFFSET句とLIMIT句を使用して、SELECT *またはSELECTの列クエリによって返される行の一部を制御します。 LIMIT 句と同様に、 OFFSET は引数として単一の整数値を取ります。 OFFSET は、クエリで選択された行が返される前に、スキップされる行数を設定します。これは LIMIT によって制約されます。

OFFSET 行はスキップされ、直近のレコードから開始されます。

たとえば、SELECT InterestingValue FROM Minute_Report LIMIT 5 OFFSET 1 のクエリは、 Minute_Report から、直近の値を除いて最後の5つの値を返します。

ORDER BY 句を使用すると、行でイベント属性を選択するクエリで結果を並べ替える方法を指定できます。

このクエリは、期間順にトランザクションを並べ替えます。

FROM Transaction SELECT appName, duration ORDER BY duration

デフォルトの並べ替え順序は昇順ですが、 ASC または DESC の修飾子を追加することで変更できます。

SELECT ...
  SINCE [numerical units AGO | phrase]
  ...

デフォルト 値は 1 時間前です。

SINCE句を使用して、返されたデータに対する時間範囲の開始時点を定義します。NRQLを使用する場合、UTCタイムスタンプまたは相対時間範囲を設定できます。タイムゾーンは結果ではなく、クエリに対して指定できます。NRQLの結果はシステム時間に基づきます。

詳細な情報と例については、ダッシュボードとチャートで時間範囲を設定するをご覧ください。

SELECT ...
  UNTIL integer units AGO
  ...

デフォルト 値は NOWです。UNTILは、デフォルト以外の終了点を指定するためのみに使用してください。

UNTIL句はデータを返す時間範囲の終了時点を定義します。時間範囲を指定するとデータが保存されるようになり、時間範囲が終了した後に確認することができます。時間は UTC タイムスタンプ または相対時間範囲を指定できます。タイムゾーンは結果ではなく、クエリに対して指定できます。返される結果はシステム時間に基づきます。

詳細な情報と例については、ダッシュボードとチャートで時間範囲を設定するをご覧ください。

SELECT ... WITH TIMEZONE (selected zone)
  ...

デフォルトで、クエリ結果は、現在使用中のブラウザのタイムゾーンで表示されます。

WITH TIMEZONE句を使用して、タイムゾーンが未指定のクエリで日付や時刻のタイムゾーンを選択します。

たとえば、SINCE Monday UNTIL Tuesday WITH TIMEZONE 'America/New_York'というクエリ句は、東部標準時の月曜日午前12時から東部標準時の火曜日午前12時までに記録されたデータを返します。

利用可能なタイムゾーンの選択
アフリカ/アビジャン アフリカ/アディスアベバ アフリカ/アルジェ アフリカ/ブランタイヤ
アフリカ/カイロ アフリカ/ウィントフック 米州/アダック 米州/アンカレッジ
米州/アラグアイナ 米州/アルゼンチン/ブエノスアイレス 米州/ベリーズ 米州/ボゴタ
米州/カンポグランデ 米州/カンクン 米州/カラカス 米州/シカゴ
米州/チワワ 米州/ドーソンクリーク 米州/デンバー 米州/エンセナーダ
米州/グリーンベイ 米州/ゴットホープ 米州/グースベイ 米州/ハバナ
米州/ラパス 米州/ロサンゼルス 米州/ミクロン 米州/モンテビデオ
米州/ニューヨーク 米州/モローニャ 米州/サンティアゴ 米州/サンパウロ
米州/セントジョンズ アジア/アナディル アジア/バンコク アジア/ベイルート
アジア/ダマスカス アジア/ダッカ アジア/ドバイ アジア/ガザ
アジア/香港 アジア/イルクーツク アジア/エルサレム アジア/カブール
アジア/カトマンズ アジア/コルカタ アジア/クラスノヤルスク アジア/マガダン
アジア/ノボシビルスク アジア/ヤンゴン アジア/ソウル アジア/タシケント
アジア/テヘラン アジア/東京 アジア/ウラジオストク アジア/ヤクーツク
アジア/エカテリンブルク アジア/エレバン 大西洋/アゾレス 大西洋/カーポベルデ
大西洋/スタンリー オーストラリア/アデレード オーストラリア/ブリスベン オーストラリア/ダーウィン
オーストラリア/ユークラ オーストラリア/ホバート オーストラリア/ロードハウ オーストラリア/パース
チリ/イースター島 その他/GMT+10 その他/GMT+8 その他/GMT-11
その他/GMT-12 ヨーロッパ/アムステルダム ヨーロッパ/ベルファスト ヨーロッパ/ベオグラード
ヨーロッパ/ブリュッセル ヨーロッパ/ダブリン ヨーロッパ/リスボン ヨーロッパ/ロンドン
ヨーロッパ/ミンスク ヨーロッパ/モスクワ 太平洋/オークランド 太平洋/チャタム
太平洋/ガンビエ 太平洋/キリバス 太平洋/マルケサス 太平洋/ミッドウェイ
太平洋/ノーフォーク 太平洋/トンガタプ UTC

詳細な情報と例については、ダッシュボードとチャートで時間範囲を設定するをご覧ください。

メトリックデータのクエリに関する情報については、メトリックスのクエリを行うをご覧ください。

SELECT ... (SINCE or UNTIL) (integer units) AGO
  COMPARE WITH (integer units) AGO
  ...

COMPARE WITH句を使用して、2つの異なる時間範囲の値を比較します。

COMPARE WITHでは、SINCEまたはUNTIL文が必要になります。COMPARE WITHで指定された時間は、SINCEまたはUNTILで指定した時間に相対します。たとえば、SINCE 1 day ago COMPARE WITH 1 day agoは、昨日とその前日を比較します。

COMPARE WITH値の時間範囲は、常にSINCEまたはUNTILで指定されたものと同じになります。たとえば、SINCE 2 hours ago COMPARE WITH 4 hours agoは、午後3時から午後5時の範囲と午後1時から午後3時の範囲を比較します。

COMPARE WITHは、折れ線グラフまたはビルボードのいずれかの形式にすることができます:

  • TIMESERIESを使うと、COMPARE WITHは時系列でマッピングされた比較で折れ線グラフを作成します。
  • TIMESERIESがない場合、COMPARE WITHは現在値とCOMPARE WITH値からの増減率でビルボードを生成します。

例: このクエリは、過去1時間の95パーセンタイルを1週間前の同じ時間範囲と比較した折れ線グラフでデータを返します。一つ目は単一の値、その次は折れ線グラフです。

SELECT percentile(duration) FROM PageView
  SINCE 1 week ago COMPARE WITH 1 week AGO

SELECT percentile(duration) FROM PageView
  SINCE 1 week ago COMPARE WITH 1 week AGO TIMESERIES AUTO
SELECT ...
  TIMESERIES integer units
  ...

TIMESERIES句を使用して、指定期間単位の時系列としてデータを返します。TIMESERIESは特定のチャートをトリガするために使用されることから、デフォルト値はありません。

時間範囲を指定するには、integer unitsを使用します。例えば:

  • TIMESERIES 1 minute
  • TIMESERIES 30 minutes
  • TIMESERIES 1 hour
  • TIMESERIES 30 seconds
設定した間隔を使用する

指定された値は、グラフを分割する単位を示します。たとえば、以下のようにして1日のグラフを30分刻みで表示します。

SELECT ... SINCE 1 day AGO TIMESERIES 30 minutes
自動設定した間隔を使用する

TIMESERIESAUTOに設定することもでき、これによってグラフが適切な数の区分に分割されます。たとえば、1日のチャートは30分間隔で分割され、1週間のチャートは6時間間隔で分割されます。

このクエリは、6時間間隔のデータ点で、1週間のクライアントサイドのトランザクションタイムの50パーセントタイルと90パーセンタイルを示す折れ線グラフを返します。

SELECT average(duration), percentile(duration, 50, 90)
  FROM PageView SINCE 1 week AGO TIMESERIES AUTO
最大インターバルを使用する

TIMESERIESMAXに設定することで時間枠が自動的に調整され、指定された期間で許可された間隔数を最大にすることができます。これによって、TIMESERIESバケットを手動で更新することなく時間枠を更新でき、認められた最大インターバル数に時間枠を分割できます。返されるTIMESERIESバケットの最大数は366です。

例えば、以下のクエリでは4分間の間隔を作成していますが、これは1日のチャートの上限となります。

SELECT average(duration) FROM Transaction since 1 day ago TIMESERIES MAX

average( )またはpercentile( )などの関数では、間隔を大きく設定することで、外れ値に対して大幅なスムージング効果が得られます。

この句は以下のデータタイプで使用可能です:

  • Transaction
  • TransactionError
  • APMエージェントのAPIを通じて報告されたカスタムイベント

EXTRAPOLATEの目的は、クエリ結果がシステム内のアクティビティ全体をより厳密に表現できるよう、イベントデータのAPMエージェントサンプリングの影響を数学的に補うことです。

この節は、New Relic APMエージェントが余りにも多くのイベントを報告することで、収穫サイクルの報告上限を超過しがちになる際に便利です。その場合、エージェントはイベントのサンプリングを開始します。

EXTRAPOLATEに対応したNRQLクエリでこれを使用した場合、報告されたイベント合計イベントの比率を基に、合計未サンプルデータの近似を推定します。この句に未対応であるか、サンプルデータを使用していないNRQLでこれを使用した場合、結果に影響を与えません。

EXTRAPOLATEは、(スループットやエラー率など)同種データについて最も有用なことに注意してください。(uniqueCount()uniques()など)特徴的なことの数を外挿しようとする際には有効ではありません。

この句は、以下のいずれかの集約関数を利用したNRQLクエリでのみ機能します:

  • apdex
  • average
  • count
  • histogram
  • sum
  • percentage (引数として取る関数がEXTRAPOLATEに対応している場合)
  • rate (引数として取る関数がEXTRAPOLATEに対応している場合)
  • stddev
スループットの推定の例

interestingApplicationという名前のサービスの推定スループットを示すクエリ。

SELECT count(*) FROM Transaction WHERE appName='interestingApplication' 
SINCE 60 minutes ago EXTRAPOLATE
時系列としてのスループットの推定の例

トランザクション名ごとに、時系列として表示するinterestingApplicationという名前のサービスの推定スループットを示すクエリ。

SELECT count(*) FROM Transaction WHERE appName='interestingApplication' 
SINCE 60 minutes ago FACET name TIMESERIES 1 minute EXTRAPOLATE

メトリックデータのクエリを行う

NRQLを使用してメトリックデータのクエリを行うには、次のいくつかの方法があります:

New Relicでのメトリックスの理解の詳細については、メトリックデータのタイプをご覧ください。

集計関数

集約関数を使用して、NRQLクエリのデータを絞り込み、集約できます。以下に、集約関数の利用に関する便利な情報を提供します:

以下は、利用可能な集約関数になります。以下の定義には、NRQLクエリの例が含まれます。

例:

SELECT histogram(duration, 10, 20) FROM PageView SINCE 1 week ago

apdex関数を使用して、単一のトランザクションまたはすべてのトランザクションに対してApdexスコアを返します。属性は、durationbackendDurationなどのレスポンスタイムに基づいて、任意の属性に指定できます。t: 引数は Apdex T の閾値を秒単位で定義します。

apdex( )関数が返すApdexスコアは、実行時間のみに基づくものです。APMエラーは考慮していません。エラーが含まれているにもかかわらず、トランザクションがApdex T以下で完了する場合、そのトランザクションはapdex ( )関数によって満足と評価されます。

特定の顧客の Apdexを取得する

もし 定義済みのカスタム属性 がある場合は、それらの属性に基づいて絞り込むことができます。たとえば、特に重要な顧客のApdexを監視することができます。

SELECT apdex(duration, t: 0.4) FROM Transaction
  WHERE customerName='ReallyImportantCustomer' SINCE 1 day ago
特定のトランザクションのApdexを取得する

name属性を使用して特定のトランザクションのスコアを返す、またはnameを省略して総合的なApdexを返します。このクエリは、直近1時間の Controller/notes/index トランザクションのApdexスコアを返します。

SELECT apdex(duration, t: 0.5) from Transaction
  WHERE name='Controller/notes/index' SINCE 1 hour ago
crop-apdex-function
apdex関数は、サイトに対するユーザーの満足度を測定するApdexスコアを返します。引数は、秒単位のレスポンスタイムの属性とApdex Tの閾値です。
アプリ全体のApdexを取得する

このクエリの例では、直近3週間のアプリケーション全体のApdexを返します。

SELECT apdex(duration, t: 0.08) FROM Transaction SINCE 3 week ago

average( )関数を使用して、属性の平均値を返します。引数として単一の属性名を取得します。属性の値が数字でない場合、集計の際に無視されます。クエリの条件に合うデータが見つからない場合、またはクエリにより数字の値が返されない場合、nullの値を返します。

buckets()関数を使用して、FACET句ごとに分割されたデータを、範囲に基づきバケットに集約します。New Relicデータベースの数値として保存される属性ごとにバケットにまとめることができます。

この関数は 3 つの引数を取ります。

  • 属性名
  • サンプル範囲の最大値。外れ値は最終バケットに表示されます。
  • バケットの合計数

詳細と例については、データをバケットに分割をご覧ください。

bucketPercentile( )関数は、Prometheusのhistogram_quantile関数のNRQL版です。ディメンションメトリックデータとともに使用します。分位数の代わりにNew Relicパーセンタイルを返します。これは分位数*100です。

bucketPercentile( )関数を使用して、Prometheus形式のヒストグラムデータから分位数を計算します。

バケット名を引数として取得し、バケットの境界とともにパーセンタイルをレポートします:

SELECT bucketPercentile(duration_bucket) FROM Metric SINCE 1 day ago

オプションで、引数としてパーセンタイル指定を追加できます:

SELECT bucketPercentile(duration_bucket, 50, 75, 90) FROM Metric SINCE 1 day ago

複数のメトリックスを使用してPrometheusヒストグラムデータを構成しているため、関連する<basename>に関して特定のPrometheusメトリックスのクエリを行う必要があります。

たとえば、PrometheusヒストグラムからNRQLを使用して<basename> prometheus_http_request_duration_secondsによりパーセンタイルの計算を行うには、bucketPercentile(prometheus_http_request_duration_seconds_bucket, 50)を使用します。_bucketがサフィックスとして<basename>の最後に追加されていることに注意してください。

詳しくは、Prometheus.ioドキュメントを参照してください。

cardinality( )関数を使用して、メトリック上のすべてのディメンション(属性)の組み合わせの数を取得します。

次の3つの引数を取りますが、すべてオプションです:

  • Metric name: ある場合、cardinality( )は指定したメトリックのみを計算します。
  • Include: ある場合、Includeリストは、濃度計算をこの属性に制限します。
  • Exclude: ある場合、Excludeリストにより、この属性は濃度計算で使用されなくなります。
SELECT cardinality(metric_name, include:{attribute_list}, exclude:{attribute_list})

count( )関数を使用して、利用可能なレコード数を返します。これは単一の引数を受け入れます (*、属性、または一定値のいずれか)。現在、一般的なSQL動作に従って、その引数に対する値を持つすべてのレコードを計上します。

count(*)は特定の属性を示すものではないため、結果はデフォルトの「humanize」形式でフォーマットされます。

derivative()は、所定のデータセットの変化率を検索します。最小2乗回帰を使用して変化率を計算し、微分係数を近似します。

時間間隔は、変化率を計算する期間です。たとえば、derivative(attributeName, 1 minute)は、1分あたりの変化率を返します。

dimensions( )関数を使用して、データタイプのすべてのディメンション値を返します。

オプションの引数を使用して、特定の属性を明示的に含めたり除外したりすることができます:

  • Include: ある場合、includeリストは、dimensions( )をそれらの属性に限定します。
  • Exclude: ある場合、dimensions( )の計算ではそれらの属性を使用しません。

FROM Metric SELECT count(node_filesystem_size) TIMESERIES FACET dimensions()

FACET句とともに使用する場合、dimensions( )は、未集計クエリでのPrometheusの動作と同様に、イベントタイプで使用できるすべてのファセットについて一意の時系列を生成します。

latest( )関数を使用して、指定された時間範囲における属性の最も古い値を返します。

単一の引数を取ります。最初の引数以外は無視されます。

FACETと併用する場合、この関数は得られた各ファセットの属性の最新値を返します。

PageView からユーザーエージェントごとに最も古い国を取得

このクエリは、PageView イベントからユーザーエージェントごとに最も古い国コードを返します。

SELECT earliest(countryCode) FROM PageView FACET userAgentName
...WHERE eventType() = 'EventNameHere'...
...FACET eventType()...

eventType()関数は、選択したデータタイプ別に結果を取り出すためにFACET句で使用、または特定のデータタイプに結果をフィルタリングするためにWHERE句で使用します。これは filter()percentage() 関数で特定のデータタイプを対象とする際に特に便利です。

この文脈において、「イベントタイプ」はNRQLクエリでアクセス可能なデータタイプを指します。

filter()関数でeventType()を使用する

このクエリは、合計Transactionの結果あたりの合計TransactionErrorの結果の割合を返します。eventType()関数を使用して、filter()関数で特定のデータタイプをターゲットにすることができます。

SELECT 100 * filter(count(*), where eventType() = 'TransactionError') / filter(count(*), where eventType() = 'Transaction') FROM Transaction, TransactionError WHERE appName = 'App.Prod' TIMESERIES 2 Minutes SINCE 6 hours ago
FACETeventType()を使用する

このクエリは、各データタイプ(TransactionおよびTransactionError)が返すレコードの数を表示します。

SELECT count(*) FROM Transaction, TransactionError FACET eventType() TIMESERIES

filter( )関数を使用して、SELECT文内の集計関数の1つに結果を制限できます。filter()は、FACETまたはTIMESERIESと併用することができます。

オファーコードを使用した購入を分析する

filter()は、一連のトランザクションで購入された商品の中で、オファーコードを使用して購入された商品と、オファーコードを使用せずに購入された商品を比較するために使用できます:

Insightsフィルタのスクリーンショット
filter( )関数を使用して、SELECT文内の集計関数の1つに結果を制限できます。

funnel()関数を使用して、ファネルチャートを生成します。属性を最初に引数に取ります。その後、カンマで区切られた複数のWHERE句(オプションでラベル付け用にAS句を含める)をステップとして指定します。

詳細な情報と例については、 ファネルのドキュメントをご覧ください。

getField()関数を使用して、複雑なメトリックスからフィールドを抽出します。

次の引数を取ります:

メトリックのタイプ サポートされたフィールド
summary count、total、max、min
gauge count、total、max、min、latest
distribution count、total、max、min
counter count
例:
 SELECT max(getField(mySummary, count)) from Metric
SELECT sum(mySummary) from Metric where getField(mySummary, count) > 10

histogram( )関数を使用して、ヒストグラムを生成します。この関数は 3 つの引数を取ります。

  • 属性名
  • サンプル範囲の最大値
  • バケットの合計数
PageViewイベントからのレスポンスタイムのヒストグラム

このクエリは 20 バケットにわたって 10 秒以内のレスポンスタイムのヒストグラムを生成します。

SELECT histogram(duration, 10, 20) FROM PageView SINCE 1 week ago
Prometheusヒストグラムバケット

histogram( )では、Prometheusヒストグラムバケットを受け取ります:

SELECT histogram(duration_bucket, 10, 20) FROM Metric SINCE 1 week ago
New Relicディストリビューションメトリック

histogram( )ではディストリビューションメトリックを入力として受け取ります:

SELECT histogram(myDistributionMetric, 10, 20) FROM Metric SINCE 1 week ago

keyset()を使用すると、所定の時間範囲における所定のデータタイプに対するすべての属性を表示できます。この関数は引数を取りません。文字列型キー、数値型キー、ブーリアン型キー、およびすべてのキーをグループ化した JSON 構造体を返します。

データタイプのすべての属性を表示

このクエリは、最後の日からのPageViewイベントで見つかった属性を返します:

SELECT keyset() FROM PageView SINCE 1 day ago

latest( )関数を使用して、指定された時間範囲における属性の最新値を返します。

単一の引数を取ります。最初の引数以外は無視されます。

FACETと併用する場合、この関数は得られた各ファセットの属性の最新値を返します。

PageView からユーザーエージェントごとに最新の国を取得

このクエリは、PageView イベントからユーザーエージェントごとに最新の国コードを返します。

SELECT latest(countryCode) FROM PageView FACET userAgentName

max( )関数を使用して、指定された時間範囲内に記録された数値属性の最大値を返します。引数として単一の属性名を取得します。属性の値が数字でない場合、集計の際に無視されます。クエリの条件に合うデータが見つからない場合、またはクエリにより数字の値が返されない場合、nullの値を返します。

median( )関数を利用して、属性の中央値あるいは50パーセンタイルを返します。パーセンタイルクエリの詳細に関しては、percentile()を参照してください。

median( )クエリは、クエリビルダーを利用する場合にのみ利用できます。

中央値クエリ

このクエリは、中央値に関する折れ線グラフを生成します。

SELECT median(duration) FROM PageView TIMESERIES AUTO

min( )関数を使用して、指定された時間範囲内に記録された数値属性の最小値を返します。引数として単一の属性名を取得します。属性の値が数字でない場合、集計の際に無視されます。クエリの条件に合うデータが見つからない場合、またはクエリにより数字の値が返されない場合、nullの値を返します。

percentage( )関数を使用して、いくつかの条件に一致する目的のデータセットの割合を返します。

最初の引数には、目的の属性に対する集計関数が必要です。必ず2つの引数を使用してください(最初の 2 つ以外の引数は無視されます)。属性が数値でない場合、この関数は 100% を値として返します。

percentile( )関数を使用して、所定の指定パーセンタイルでの属性の概算値を返します。この関数は属性が必須であり、パーセンタイル点を表す引数はいくつでも指定できます。percentile() 関数は、小数点以下3桁までの表示を可能にすることで、より厳密な内容を提供できます。パーセンタイルの閾値は小数点値として指定される場合があるものの、大半のデータセットにおいて、互いに0.1よりも近いパーセンタイルは解決されない点に注意してください。

percentile.png
パーセンタイルの表示例

TIMESERIESを使用して、時系列でマッピングされたパーセンタイルで折れ線グラフを生成します。

  • TIMESERIESを省略して、パーセンタイルの集計値を示すビルボードと属性シートを生成します。

パーセンタイルが指定されていない場合、デフォルトで 95 パーセンタイルとなります。50パーセンタイル値、つまり中央値のみを返すには、median()を使用することもできます。

基本的なパーセンタイルのクエリ

このクエリは 5、50、95 パーセンタイルの折れ線を表示する折れ線グラフを生成します。

SELECT percentile(duration, 5, 50, 95) FROM PageView TIMESERIES AUTO

predictLinear()は、derivative()関数の拡張です。同様の方法の最小2乗線形回帰を使用して、データセットの将来値を予測します。

  • 時間間隔は、クエリでどの程度将来まで扱うかを表します。たとえば、predictLinear(attributeName, 1 hour)は、1時間の線形予想をクエリの時間枠の将来に当てはめます。
  • 一般に、predictLinear()は、ディスクスペースのような増加が続く値や大きなトレンドの予想などで有用です。
  • predictLinear()は線形回帰のため、クエリを行っているデータセットに習熟していると、正確な長期的な予想を行えます。
  • 指数的または対数的、その他の非線形的に増加するデータセットでは、非常に短期的な予想でのみ有効な可能性が高いと言えます。
  • New Relicでは、TIMESERIESクエリでpredictLinearを使用することを推奨していません。これは、各バケットがクエリ内の相対的な期間に基づき個別に予想を行う、つまり、そうしたクエリは時系列終了以後の予想は示さないためです。

rate ()関数を使用して、時間間隔ごとに所定のクエリの頻度またはレートを視覚化します。たとえば、1 時間の 1 分あたりのページビュー数や 1 日間の 1 時間あたりのサイトのユニークセッション数を把握したい場合があるかもしれません。

  • TIMESERIESを使用して、時系列でマッピングされたレートで折れ線グラフを生成します。
  • TIMESERIESを省略して、時系列で平均化された単一のレート値を示すビルボードを生成します。
基本的な評価クエリ

このクエリは、過去 6 時間の 10 分あたりの APM トランザクションのスループット評価を示す折れ線グラフを生成します。

SELECT rate(count(*), 10 minute) FROM Transaction SINCE 6 hours ago 
TIMESERIES

round( )関数を使用して、属性の丸め値を返します。

オプションで、round( )は2番目の引数to_nearestを取り、最初の引数を2番目の引数の最も近い倍数に切り上げます。to_nearestは分数でも使用できます。

SELECT round(n [, to_nearest])

stddev()関数を使用して、指定された時間範囲内に記録された数値属性の標準偏差値を返します。単一の引数を取ります。属性が数値でない場合は、ゼロを値として返します。

stdvar()関数を使用して、指定された時間範囲内に記録された数値属性の標準分散を返します。

単一の引数を取ります。属性が数値でない場合は、ゼロを値として返します。

sum( )関数を使用して、指定された時間範囲内に記録された数値属性の合計値を返します。

単一の引数を取ります。最初の引数以外は無視されます。属性が数値でない場合は、ゼロを値として返します。

uniqueCount( )関数を使用して、指定された時間範囲内に記録された属性のユニーク値の数を返します。

クエリのパフォーマンスを最適化するため、この関数は256を超えるユニーク値を検査するクエリのおおよその結果を返します。

uniques( )関数を使用して、指定された時間範囲内に記録された属性のユニーク値のリストを返します。facet句と共に使用すると、各ファセット値ごとに固有の属性値一覧が返されます。

limitパラメータは任意です。これが提供されない場合、ファセットあたり1,000の固有の属性値がデフォルトリミットとして適用されます。最大10,000までの、別のlimitを指定することもできます。uniques( )関数は、上限に達するまで、発見した固有の属性値の最初の一式を返します。このため、データセットに5,000の固有の属性値があり、上限が1,000に設定されている場合、演算子はその頻度に関わらず、発見した最初の1,000の固有の値を返します。

クエリ結果で返すことのできる最大数は、uniques( )上限とfacet上限を掛け合わせたものになります。以下のクエリでは、論理的に返すことの可能な最大値は500万になります(5,000 x 1,000)。

From Transaction SELECT uniques(host,5000) FACET appName LIMIT 1000

しかし、クエリしたデータセットのほか、クエリの複雑さ次第では、メモリ保護上限の影響で非常に大きなクエリの実行を阻止する可能性があります。

データ型変換

NRQLは「型強制」をサポートしていません。つまり、文字列として保存された浮動小数点は文字列として取り扱われ、浮動小数点数を要求する関数に渡しても操作できません。

次に示す関数を用いることで、数値を伴う文字列、または文字列を伴うブーリアン値をそれぞれ数またはブーリアン値に変換できます。

  • numeric() 関数を用いて、文字列形式の数値を数値関数に変換します。この関数は、クエリ結果に数学関数を使用するクエリ、もしくはaverage()などのNRQL 集計関数に組み込むことができます。
  • boolean()関数を用いることで、「true」もしくは「false」の文字列値を対応するブーリアン値に変換できます。

その他のヘルプ

さらに支援が必要な場合は、これらのサポートと学習リソースを確認してください: