NRQLは、New Relicデータベースのクエリに使用できるクエリ言語です。このドキュメントでは、NRQLの構文、句、構成要素、関数について説明します。
構文
このドキュメントは、NRQLクエリで使用される関数と句の参考資料です。NRQLを理解するためのその他のリソース:
- NRQLの概要:どのようなNRQLが使用されるのか、それでどのようなデータをクエリできるのか、基本的なNRQL構文について説明しています。
- New Relicチャートの作成に使用するNRQLクエリを検証する
Metric
データ型のクエリ方法を習得- ファネルを使用して一連の関連データを評価する
- イベントAPIでクエリを行うNRQLをフォーマットする
クエリの構成要素
すべてのNRQLクエリはSELECT
文または FROM
句で始まります。その他のすべての句はオプションです。以下の句の定義には、NRQLクエリの例も含まれます。
必要な句
SELECT attribute ...
SELECT function(attribute) ...
SELECT
は、属性または関数を指定することによって、データ型のどの部分をクエリするかを指定します。その後、カンマ区切りの1つ以上の引数が続きます。各引数では、以下を実行できます。
- ワイルドカードとして
*
を使用することで、利用可能なすべての属性値を取得。例:トランザクションからSELECT *
。 - 指定した属性、または カンマ区切りのリストで指定した複数の属性に関連する値を取得。
- 集計関数を選択することで、指定した属性から集計値を取得。
AS
句で、各引数で返された結果にラベルを付け。
基本的な数学関数とともにSELECT
を使用することもできます。
このクエリは、直近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トランザクションとブラウザイベントの全カウント数を返します。
SELECT count(*) FROM Transaction, PageView SINCE 3 days ago
オプション句
SELECT ... AS 'label' ...
AS
句を使用して、シングルクォート区切りの文字列で属性、集計、ファネル内のステップ、または数学関数の結果にラベルを付けます。このラベルは結果のチャートで使用されます。
このクエリはセッションごとのページ数を返します。
SELECT count(*)/uniqueCount(session) AS 'Pageviews per Session' FROM PageView
このクエリは、過去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 ... (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時と午前11時から午後1時を比較します。
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
この句は以下のデータ型で使用できます。
トランザクション
TransactionError
APMエージェントAPIで報告されたカスタムイベント
EXTRAPOLATE
の目的は、クエリ結果がシステム内のアクティビティ全体をより厳密に表現できるよう、イベントデータのAPMエージェントサンプリングの影響を数学的に補うことです。この句は、APMエージェントが収集サイクルの報告限度をしばしば超過する多くのイベントを報告する際に便利です。その場合、エージェントはイベントのサンプリングを開始します。
EXTRAPOLATE
に対応したNRQLクエリでこれを使用する場合、報告されたイベントと合計イベントの比率で、合計未サンプルデータの近似を推定します。この句に未対応であるか、サンプルデータを使用していないNRQLでこれを使用する場合、結果に影響を与えません。重要
EXTRAPOLATE
は、(スループットまたはエラー率など)同種データに対して最も有用である点に注意してください。(uniqueCount()
またはuniques()
など)特徴的なものの数を外挿する際には有効ではありません。この句は、以下のいずれかの集計関数を使用するNRQLクエリでのみ機能します。
apdex
average
count
ヒストグラム
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
SELECT ... FACET attribute ...
FACET
を使用すると、結果を属性値で分割してグループ化できます。たとえば、PageView
データでdeviceType
別にFACET
を行い、トラフィックの何割が携帯電話、タブレット、およびデスクトップデバイスから発生しているかを把握することができます。
LIMIT
句を使用して、表示するファセットの数を指定します(デフォルトは10)。複雑なグループ化には、FACET CASES
を使用してください。FACET
句は、カンマで区切られた最大5つの属性をサポートします。
ファセットは、SELECT
句で指定した最初のフィールドによって降順でソートされます。2,000件以上のユニーク値を持つ属性をファセットに指定した場合、ファセット値のサブセットを選択し、それらをクエリタイプに従って並べ替えます。
min()
、max()
、percentile()
、average()
または count()
を選択すると、FACET
はこれらの関数を使用してファセットの選択方法とソート方法を決定します。その他の関数を選択すると、FACET
はファセット対象の属性の発生頻度に基づいて、ファセットの選択方法とソート方法を決定します。
このクエリは、ページビュー数が最も多い都市を表示します。このクエリは、都市ごとのページビューの合計数を使用してファセットの選択方法と並べ替え方法を決定します。
SELECT count(*) FROM PageView FACET city
このクエリは、最も多数のユニーク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つのファセットケースに追加されます。つまり、一致する最初のファセットになります。
また、属性とともに時間関数を使用することもできます。また、OR
演算子を使用して、指定したどのケースにも一致しないファセット結果を表示することもできます。
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
セレクタを使います。
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')
この例では、OR
演算子を使用して、どのケースにも一致しないファセット結果を表示しています。
SELECT count(*) FROM Transaction FACET CASES (WHERE name LIKE '%login%', WHERE name LIKE '%feature%' AND customer_type='Paid') OR name
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 BY
がFACET
の直後に表示される場合に限定されます。それ以外の場合、ORDER BY
はNew Relicによって句として解釈されます。
SELECT ... LIMIT count ...
LIMIT
句を使用して、FACET
クエリで返されるファセット値の最大数、またはSELECT *
クエリで返される項目の最大数を制御します。この句は、単一の整数値を引数に取ります。LIMIT
句が指定されない、または値が提供されない場合、リミットのデフォルト設定は、FACET
クエリの場合は10、SELECT *
クエリの場合は100となります。
LIMIT
句で許容される最大値は2,000です。
このクエリはセッション数上位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
の修飾子を追加することで変更できます。
SHOW EVENT TYPES...
SHOW EVENT TYPES
は、特定の時間範囲内にアカウントに存在するすべてのデータ型のリストを返します。これは、SELECT
の代わりにクエリの最初の句として使用されます。
重要
この文脈において、「イベントタイプ」はNRQLクエリでアクセス可能なデータ型を指します。
このクエリは、直近1日のすべてのデータ型を返します。
SHOW EVENT TYPES SINCE 1 day ago
SELECT ... SINCE [numerical units AGO | phrase] ...
デフォルト値は 1 時間前です。
SINCE
句を使用して、返されたデータに対する時間範囲の開始を定義します。タイムゾーンは結果ではなく、クエリに対して指定できます。NRQLの結果はシステム時間に基づきます。
NRQLを使用する場合、UTCタイムスタンプまたは相対時間範囲を設定できます。
- タイムスタンプの形式は
YYYY-MM-DD HH:MM:SS ZZZZ
です。例:FROM Transaction SELECT count(*) SINCE '2021-12-25 00:00:00 +0000' UNTIL '2021-12-25 23:59:59 +0000'
。 - 次の相対時間範囲をサポートしています:
YESTERDAY
、TODAY
、SUNDAY
、MONDAY
、TUESDAY
、WEDNESDAY
、THURSDAY
、FRIDAY
、SATURDAY
。例:SINCE YESTERDAY UNTIL NOW
。 YEAR
、QUARTER
、MONTH
、WEEK
、DAY
、HOUR
、MINUTE
、SECOND
もサポートしています。この場合、SINCE
をTHIS
またはLAST
と組み合わせることができます。例:SINCE LAST MONTH UNTIL THIS WEEK
。SINCE 3 WEEKS AGO UNTIL 10 MINUTES AGO
のように、AGO
を含めることもできます。
SLIDE BY
句は、スライディングウィンドウと呼ばれる機能をサポートしています。スライディングウィンドウを使用すると、SLIDE BY
データは、互いに重複する時間の「ウィンドウ」に収集されます。これらのウィンドウは、移動集計(移動平均など)が狭い時間枠からの集計よりも重要である場合に、変動の多い折れ線グラフを滑らかにするのに役立ちます。
SLIDE BY
を使用するには、TIMESERIES
句の後のクエリにこの句を配置します。たとえば、このクエリは1分のSLIDE BY
間隔で5分間のウィンドウにデータをプルします。つまり、各ウィンドウは5分間続きますが、ウィンドウ1は0分後に開始し、ウィンドウ2は1分後に開始し、ウィンドウ3は2分後に開始します。
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY 1 minute
SLIDE BY
をいつ、どのように使用できるかについての詳細は、スライディングウィンドウを使用してよりスムーズなグラフを作成するを参照してください。または、この短いビデオをご覧ください(約3分20秒)。
スライディングウィンドウは、MAX
またはAUTO
と組み合わせて使用できます。ただし、MAX
またはAUTO
をTIMESERIES
とSLIDE BY
の間に配置することはできません。
このクエリは、SLIDE BY
ウィンドウ間隔を自動的に決定します。
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY AUTO
このクエリはSLIDE BYウィンドウを最高間隔粒度に設定します。
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY MAX
重要
AUTO
またはMAX
によって決定されるSLIDE BY
値は、ウィンドウサイズよりも大きいステップ間隔を生成する可能性があり、ギャップや予期しない結果を引き起こす可能性があります。
SELECT ... TIMESERIES integer units ...
TIMESERIES
句を使用して、指定期間単位の時系列としてデータを返します。TIMESERIES
は特定のチャートをトリガするために使用されることから、デフォルト値はありません。
時間範囲を指定するには、integer units
を使用します。例:
TIMESERIES 1 minute
TIMESERIES 30 minutes
TIMESERIES 1 hour
TIMESERIES 30 seconds
以下の例に示すように、TIMESERIES
をMAX
、AUTO
、SLIDE BY
などの引数と組み合わせると、クエリ結果をさらに調整できます。
重要
average( )
またはpercentile( )
などの関数では、集計ウィンドウを大きく設定することで、外れ値に対して大幅なスムージング効果が得られます。これは、クエリがスライディングウィンドウを使用するかどうかに関係なく当てはまります。
指定された値は、グラフを分割する単位を示します。たとえば、以下のようにして1日のグラフを30分刻みで表示します。
SELECT ... SINCE 1 day AGO TIMESERIES 30 minutes
TIMESERIES
はAUTO
に設定することもでき、これによってグラフが適切な数の区分に分割されます。たとえば、1日のチャートは30分間隔で分割され、1週間のチャートは6時間間隔で分割されます。
このクエリは、6時間間隔のデータ点で、1週間のクライアントサイドのトランザクションタイムの50パーセントタイルと90パーセンタイルを示す折れ線グラフを返します。
SELECT average(duration), percentile(duration, 50, 90) FROM PageView SINCE 1 week AGO TIMESERIES AUTO
TIMESERIES
をMAX
に設定することで時間枠が自動的に調整され、指定された期間に許可された間隔数を最大にできます。これによって、TIMESERIES
バケットを手動で更新することなく時間枠を更新でき、認められた最大インターバル数に時間枠を分割できます。返されるTIMESERIES
バケットの最大数は366です。
たとえば、以下のクエリでは4分間の間隔を作成していますが、これは1日のチャートの上限となります。
SELECT average(duration) FROM Transaction since 1 day ago TIMESERIES MAX
SELECT ... UNTIL integer units AGO ...
デフォルト値はNOWです。UNTIL
は、デフォルト以外の終了点を指定するためのみに使用してください。
UNTIL
句を使用して、データを返す時間範囲の終了時点を定義します。時間範囲を指定するとデータが保存されるようになり、時間範囲が終了した後に確認することができます。
詳細情報と例については、タイムピッカーを使用して時間設定を調整するを参照してください。
WHERE
句を使用して、結果をフィルタリングします。NRQLは、句で指定する条件を満たす結果を返します。
SELECT function(attribute) ... WHERE attribute [operator 'value' | IN ('value' [, 'value]) | IS [NOT] NULL ] [AND|OR ...] ...
- 複数の条件を指定する場合は、条件を演算子
AND
またはOR
で区切ります。 - SQLのjoinをシミュレートする場合は、
WHERE
またはFACET
句でカスタムアトリビュートを使用します。
| 説明 |
---|---|
| NRQLは標準的な比較演算子を受け付けます。 例: |
| 2つの条件の論理積を定義するために使用します。 |
| 2つの条件の論理和を定義するために使用します。 |
| 属性がnull値を持つかどうかを判定します。 |
| 属性がnull値を持たないかどうかを判定します。 |
| 属性の文字列値が指定したセットに存在するかどうかを判断します。この方法を使用すると、複数の 例: |
| 属性の文字列値が指定したセットに存在しないかどうかを判断します。この方法を使用すると、複数の 値は括弧で囲み、カンマで区切る必要があります。例:
|
| 属性に指定のサブ文字列が含まれるかどうかを判断します。
例:
|
| 属性に指定のサブ文字列が含まれないかどうかを判断します。 |
| 属性に特定のRegexサブ文字列が含まれるかどうかを判断します。RE2構文を使用します。 例:
|
| 属性に指定のRegexサブ文字列が含まれないかどうかを判断します。RE2構文を使用します。 |
このクエリは、過去24時間、米国およびカナダ国内のSafariユーザーについて、URLにcheckout
が含まれるページのブラウザレスポンスタイムを返します。
SELECT histogram(duration, 50, 20) FROM PageViewWHERE countryCode IN ('CA', 'US') AND userAgentName='Safari' AND pageUrl LIKE '%checkout%'SINCE 1 day ago
メトリックデータのクエリに関する情報については、メトリクスのクエリを行うを参照してください。
SELECT ... WITH TIMEZONE (selected zone) ...
デフォルトで、クエリ結果は、現在使用しているブラウザのタイムゾーンで表示されます。
WITH TIMEZONE
句を使用して、タイムゾーンが未指定のクエリで日付や時刻のタイムゾーンを選択します。
たとえば、SINCE Monday UNTIL Tuesday WITH TIMEZONE 'America/New_York'
というクエリ句は、東部標準時の月曜日午前0時から東部標準時の火曜日午前0時までに記録されたデータを返します。
利用可能なタイムゾーンの選択 | |||
---|---|---|---|
アフリカ/アビジャン | アフリカ/アディスアベバ | アフリカ/アルジェ | アフリカ/ブランタイヤ |
アフリカ/カイロ | アフリカ/ウィントフック | 米州/アダック | 米州/アンカレッジ |
米州/アラグアイナ | 米州/アルゼンチン/ブエノスアイレス | アメリカ/ベリーズ | アメリカ/ボゴタ |
アメリカ/カンポグランデ | アメリカ/カンクン | アメリカ/カラカス | アメリカ/シカゴ |
アメリカ/チワワ | アメリカ/ドーソンクリーク | アメリカ/デンバー | アメリカ/エンセナーダ |
アメリカ/グリーンベイ | アメリカ/ゴットホープ | アメリカ/グースベイ | アメリカ/ハバナ |
アメリカ/ラパス | アメリカ/ロサンゼルス | アメリカ/ミクロン | アメリカ/モンテビデオ |
アメリカ/ニューヨーク | アメリカ/ノローニャ | アメリカ/サンティアゴ | アメリカ/サンパウロ |
アメリカ/セントジョンズ | アジア/アナディル | アジア/バンコク | アジア/ベイルート |
アジア/ダマスカス | アジア/ダッカ | アジア/ドバイ | アジア/ガザ |
アジア/香港 | アジア/イルクーツク | アジア/エルサレム | アジア/カブール |
アジア/カトマンズ | アジア/コルカタ | アジア/クラスノヤルスク | アジア/マガダン |
アジア/ノボシビルスク | アジア/ヤンゴン | アジア/ソウル | アジア/タシケント |
アジア/テヘラン | アジア/東京 | アジア/ウラジオストク | アジア/ヤクーツク |
アジア/エカテリンブルク | アジア/エレバン | 大西洋/アゾレス | 大西洋/カーポベルデ |
大西洋/スタンリー | オーストラリア/アデレード | オーストラリア/ブリスベン | オーストラリア/ダーウィン |
オーストラリア/ユークラ | オーストラリア/ホバート | オーストラリア/ロードハウ | オーストラリア/パース |
チリ/イースター島 | その他/GMT+10 | その他/GMT+8 | その他/GMT-11 |
その他/GMT-12 | ヨーロッパ/アムステルダム | ヨーロッパ/ベルファスト | ヨーロッパ/ベオグラード |
ヨーロッパ/ブリュッセル | ヨーロッパ/ダブリン | ヨーロッパ/リスボン | ヨーロッパ/ロンドン |
ヨーロッパ/ミンスク | ヨーロッパ/モスクワ | 太平洋/オークランド | 太平洋/チャタム |
太平洋/ガンビエ | 太平洋/キリバス | 太平洋/マルケサス | 太平洋/ミッドウェイ |
太平洋/ノーフォーク | 太平洋/トンガタプ | UTC |
詳細な情報と例については、ダッシュボードとチャートで時間範囲を設定するを参照してください。
メトリックデータをクエリ
メトリックデータはその他のデータ型より複雑です。それをうまくクエリする特定のヒントがあります。メトリックデータには2つの型があり、それぞれに以下の独自のクエリガイドラインがあります。
- ディメンションメトリクスをクエリします。これは、当社のメトリクスAPIとそのAPIを使用するソリューションの一部(たとえば、Dropwizard インテグレーションまたはMicrometerインテグレーション)により報告されます。
- クエリメトリックタイムスライスデータ、当社のAPM、モバイルモニタリング、ブラウザモニタリングによって報告されるオリジナルのメトリックデータ型です。
メトリックデータのレポート方法の詳細は、メトリックデータタイプを参照してください。
関数
このセクションでは、NRQL関数、集計関数と非集計関数の両方について説明します。
集計関数
集計関数を使用して、データをフィルタリング、集計します。以下を使用するためのヒント:
- New Relic Universityのフィルタークエリ、Apdexクエリ、およびパーセンタイルクエリのチュートリアルを参照してください。または、完全なWriting NRQLクエリのオンラインコースにアクセスしてください。
- 同じクエリで集計関数を複数回使用している場合(例:
SELECT median(one_metric), median(another_metric)
)、結果の表示に問題が生じることがあります。この問題を解決するには、AS
関数を使用します。例:`SELECT median(one_metric) as 'med-a', median(another_metric) as 'med-b'` - データ型「型強制」には対応していません。利用可能なデータ型変換関数の詳細を参照してください。
- 時間の経過に伴う結果の表示方法については、時間の経過に伴う結果のグループ化を参照してください。
例:
SELECT histogram(duration, 10, 20) FROM PageView SINCE 1 week ago
aggregationendtime()
関数を使用して、関連集計の時刻を返します。より具体的には、aggregationendtime()
関数は、指定した集計の、集計期間終了のタイムスタンプを提供します。たとえば、時系列クエリでは、1時間分のデータを含むデータポイントの場合、関数はその時間の終わりのタイムスタンプを返します。
apdex
関数を使用して、単一のトランザクションまたはすべてのトランザクションのApdexスコアを返します。属性は、duration
またはbackendDuration
などのレスポンスタイムに基づいて、任意の属性に指定できます。t:
引数は、選択した属性と同じ時間単位でApdex T閾値を定義します。たとえば、属性が秒単位で測定される場合、t
は秒単位の閾値になります。
apdex( )
関数が返すApdexスコアは、実行時間のみに基づくものです。APMエラーは考慮していません。エラーが含まれているにもかかわらず、トランザクションがApdex T以下で完了する場合、そのトランザクションはapdex ( )
関数によって満足
と評価されます。
定義済みカスタム属性がある場合は、それらの属性に基づいて絞り込むことができます。たとえば、特に重要な顧客のApdexを監視することができます。
SELECT apdex(duration, t: 0.4) FROM Transaction WHERE customerName='ReallyImportantCustomer' SINCE 1 day ago
name
属性を使用して特定のトランザクションのスコア、またはname
を省略して総合的なApdexを返します。このクエリは、直近1時間のController/notes/indexトランザクションのApdexスコアを返します。
apdex
関数は、サイトに対するユーザー満足度を測定するApdexスコアを返します。引数は、秒単位のレスポンスタイムの属性とApdex Tの閾値です。
SELECT apdex(duration, t: 0.5) from TransactionWHERE name='Controller/notes/index' SINCE 1 hour ago
このクエリの例では、直近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つの引数を取りますが、すべてオプションです。
メトリック名:ある場合は、
cardinality( )
は指定したメトリックのみを計算します。インクルード:ある場合、Includeリストは濃度計算をこの属性に制限します。
エクスクルード:ある場合、Excludeリストによりこの属性は濃度計算で無視されます。
SELECT cardinality(metric_name, include:{attribute_list}, exclude:{attribute_list})
count()
関数を使用して、使用可能レコード数を返します。これは単一の引数を受け入れます (*
、属性、または定数値のいずれか)。現在、一般的なSQL動作に従い、その引数に対する値を持つすべてのレコードを計上します。
count(*)
は特定の属性を示すものではないため、結果はデフォルトの「humanize」形式でフォーマットされます。
derivative()
は、所定のデータセットの変化率を検索します。線形最小二乗回帰を使用して変化率を計算し、微分係数を近似します。この計算では複数のデータポイントの比較が必要であるため、評価範囲にデータポイントが1つしかない場合、解が求められず、結果はnull
値になります。
時間間隔
は、変化率を計算する期間です。たとえば、derivative(attributeName, 1 minute)
は、1分あたりの変化率を返します。
dimensions( )
関数を使用して、データ型のすべての次元値を返します。
オプションの引数を使用して、以下の特定の属性を明示的に含めたり、除外したりできます。
インクルード:ある場合、includeリストは
dimensions( )
をそれらの属性に限定します。エクスクルード:ある場合、
dimensions( )
の計算ではそれらの属性は無視されます。FROM Metric SELECT count(node_filesystem_size) TIMESERIES FACET dimensions()FACET
句とともに使用する場合、dimensions( )
は、未集計クエリでのPrometheusの動作と同様に、イベントタイプで使用できるすべてのファセットについて一意の時系列を生成します。
latestrate( )
関数を使用して、最後の2つのデータポイントに基づく値の変化率を返します。問題となる属性を最初の引数として受け取り、結果である変化率の時間の単位を2番目の引数として受け取ります。この関数は、属性の変化/時間間隔
の単位で結果を返します。
この関数は、最先端の傾向を確認するために、属性の最新の変化率を提供するのに役立ちます。
このクエリは、最後の2つのデータポイントに基づいて期間の変化率を返します。1SECOND
引数であるため、期間/秒
の単位で返されます。
SELECT latestrate(duration, 1 SECOND) FROM PageView
max( )
関数を使用して、指定された時間範囲内に記録された数値属性の最大値を返します。引数として単一の属性名を取得します。属性の値が数字でない場合、集計の際に無視されます。クエリの条件に合うデータが見つからない場合、またはクエリにより数値が返されない場合は、null値を返します。
median( )
関数を利用して、属性の中央値あるいは50パーセンタイルを返します。パーセンタイルクエリの詳細に関しては、percentile()を参照してください。
ヒント
median( )
クエリは、クエリビルダーを利用する場合にのみ利用できます。
このクエリは、中央値に関する折れ線グラフを生成します。
SELECT median(duration) FROM PageView TIMESERIES AUTO
min( )
関数を使用して、指定された時間範囲内に記録された数値属性の最小値を返します。引数として単一の属性名を取得します。属性の値が数字でない場合、集計の際に無視されます。クエリの条件に合うデータが見つからない場合、またはクエリにより数値が返されない場合は、null値を返します。
minuteOf()関数を使用して、有効なタイムスタンプ値を持つ属性の分の部分(つまり、0〜59秒)のみを抽出します。
与えられた数値属性の値(最初の引数、すなわち被除数)を数値(2つ目の引数、すなわち除数)で割った後、mod( )
関数を使用してfloor係数を返します。このモジュロ演算は、WHERE句の条件内で使用して結果の任意のサブセットにフィルターしたり、FACET句で結果セットをさらに分割したりする方法として使用できます。
FROM Transaction SELECT * WHERE mod(port, 2) = 1
FROM NrDailyUsage SELECT uniques(hostId, 10000) SINCE 1 day AGO FACET mod(hostId, 10)
percentage( )
関数を使用して、いくつかの条件に一致する目的のデータセットの割合を返します。
最初の引数には、目的の属性に対する集計関数が必要です。必ず2つの引数を使用してください(最初の2つ以外の引数は無視されます)。属性が数値でない場合、この関数は100%を値として返します。
FROM Transaction SELECT percentage(count(*), WHERE error is true ) AS 'Error Percent' Where host LIKE '%west%' EXTRAPOLATE
percentile( )
関数を使用して、所定の指定パーセンタイルでの属性の概算値を返します。この関数は属性が必須であり、パーセンタイル点を表す引数はいくつでも指定できます。percentile()
関数は、小数点以下3桁までの表示を可能にすることで、より厳密な内容を提供できます。パーセンタイルの閾値は小数点値として指定される場合があるものの、大半のデータセットにおいて、互いに0.1よりも近いパーセンタイルは解決されない点に注意してください。
パーセンタイルの表示例
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 agoTIMESERIESここでは、さまざまな時間枠でデータを比較するために
評価
を使用する方法を説明する短いビデオ(3分21秒)を紹介します。
round( )
関数を使用して、属性の丸め値を返します。
オプションで、round( )
は2番目の引数to_nearest
を取り、最初の引数を2番目の引数の最も近い倍数に切り上げます。to_nearest
は分数でも使用できます。
SELECT round(n [, to_nearest])
stddev()
関数を使用して、指定された時間範囲内に記録された数値属性の標準偏差値を返します。単一の引数を取ります。属性が数値でない場合は、ゼロを値として返します。
stdvar()
関数を使用して、指定された時間範囲内に記録された数値属性の標準分散を返します。
単一の引数を取ります。属性が数値でない場合は、ゼロを値として返します。
sum( )
関数を使用して、指定された時間範囲内に記録された数値属性の合計値を返します。
単一の引数を取ります。最初の引数以外は無視されます。属性が数値でない場合は、ゼロを値として返します。
uniqueCount( )
関数を使用して、指定された時間内に記録された属性のユニーク値の数を返します。
ヒント
クエリのパフォーマンスを最適化するため、この関数は256を超えるユニーク値を検査するクエリのおおよその結果を返します。
uniques( )
関数を使用して、指定された時間範囲内に記録された属性のユニーク値のリストを返します。facet
句と共に使用すると、各ファセット値ごとにユニーク属性値リストが返されます。
limit
パラメーターはオプションです。提供されない場合は、ファセットあたり1,000のユニーク属性値のデフォルトlimitが適用されます。最大10,000までの、別のlimit
値を指定できます。uniques( )
関数は、limitに達するまで、発見したユニーク属性値の最初のセットを返します。このため、データセットに5,000のユニーク属性値があり、リミットが1,000に設定されている場合は、演算子はその頻度に関わらず、発見した最初の1,000のユニーク値を返します。
クエリ結果で返すことができる値の最大数は、uniques( )
のlimitとfacet
limitの積です。以下のクエリでは、論理的に返すことができる値の最大数は500万です(5,000 x 1,000)。
クエリするデータセットとクエリの複雑性に応じて、メモリ保護limitで非常に大きなクエリの実行が阻止される場合があります。
From Transaction SELECT uniques(host,5000) FACET appName LIMIT 1000
少数の属性のユニークな組み合わせを知りたい場合、SELECT unique(tuple(x, y, ... z)) ...
形式でクエリを構築することで、値のユニークなタプルをすべて取得して、それらの関係を維持できます。以下のクエリでは、タプル
がインデックス
とcellName
で一緒に使用され、これらの2つの値が組み合わせで発生する一意の要素を見つけます。
FROM NodeStatus SELECT uniques(tuple(index, cellName), 5)
capture()
を使用して、RE2構文の正規表現を使用して属性から値を抽出します。
2つの引数が必要です。
属性名
capture構文を使用した正規表現。NRQLの正規表現は、Pythonのような構文
r'...'
を使用します。キャプチャする場合は、RE2名前付きキャプチャ構文
...(? P<name> パターン )...
は、指定された名前で、含まれるパターンをキャプチャします。現在、サポートされているキャプチャグループは1つのみです。正規表現キャプチャを使用してクエリ結果を改善する方法をお読みください。
capture()
を使用して、ダッシュボードの読みやすさを向上する方法を紹介する短いビデオ(3分05秒)もあります。詳しくは、以下の例をご覧ください。
以下では、ウェブサイトのドメイン名を選択し、https://と.comに続くパスを削除します。
SELECT capture(pageUrl, r'https://(?P<baseUrl>.*.com)/.+') FROM PageView SINCE 1 day ago以下では、エラーメッセージの最初のワードのみがキャプチャされます。
SELECT capture(errorMessage, r'(?P<firstWord>\S+)\s.+') FROM Transaction SINCE 1 hour ago where errorMessage is not nullキャプチャしたHTTPメソッドによって、以下がファセットされます。
SELECT count(*) FROM Log WHERE message like '%HTTP%' FACET capture(message, r'.* "(?P<httpMethod>[A-Z]+) .*')以下は、キャプチャされたジョブ名が
ExampleJob
である正規表現と一致するメッセージ
属性を持つログイベントに基づいて、結果をフィルタ処理します。SELECT message FROM Log WHERE capture(message, r'.*Job Failed: (?P<jobName>[A-Za-z]+),.*') = 'ExampleJob' SINCE 10 minutes ago以下では、ログラインからCPU時間の合計をキャプチャします。数学演算を実行するには、明示的に数値にキャストする必要があります。
SELECT sum(numeric(capture(message, r'.*CpuTime:\s(?P<cpuTime>\d+)'))) FROM Log WHERE message like '%CpuTime:%' SINCE 1 hour ago
非集計関数
NRQLクエリ内の非数値データには非集計関数を使用します。
earliest( )
関数を使用して、指定された時間範囲における属性の最も古い値を返します。
単一の引数を取ります。最初の引数以外は無視されます。
FACET
と併用する場合、この関数は得られた各ファセットの属性の最新値を返します。
このクエリは、PageView イベントからユーザーエージェントごとに最も古い国コードを返します。
SELECT earliest(countryCode) FROM PageView FACET userAgentName
...WHERE eventType() = 'EventNameHere'......FACET eventType()...
FACET句でeventType()
関数を使用し、選択したデータ型別に結果を取り出し、またはWHERE句で特定のデータ型に結果をフィルタリングします。これは filter() や percentage() 関数で特定のデータ型を対象とする際に特に便利です。
重要
この文脈において、「イベントタイプ」はNRQLクエリでアクセス可能なデータ型を指します。
このクエリは、合計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
このクエリは、各データ型(Transaction
およびTransactionError
)が返すレコード数を表示します。
SELECT count(*) FROM Transaction, TransactionError FACET eventType() TIMESERIES
filter( )
関数を使用して、SELECT文内の集計関数の1つに結果を制限します。filter()
は、FACET
またはTIMESERIES
と併用できます。フィルターは、SELECT filter(sum(x)、 WHERE attribute='a') AS 'A'、filter(sum(x)、WHERE attribute='b') AS 'B' ...
など、複数の異なる集計を選択している場合のみ有用です。そうでない場合は、標準WHERE
句のみを使用するのが好ましいです。
funnel()
関数を使用して、ファネルチャートを生成します。属性を最初の引数として取ります。その後、カンマで区切られたWHERE
句(オプションでラベル付け用にAS
句を含める)としてステップを指定します。
詳細な情報と例については、 ファネルのドキュメントを参照してください。
getField()
関数を使用して、メトリックデータなどの複合データ型からフィールドを抽出します。
次の引数を取ります。
メトリックタイプ | サポートされているフィールド |
---|---|
| count、total、max、min、type |
| count、total、max、min、latest、type |
| count、total、max、min、type |
| count、type |
| count、total、totalExclusive、min、max |
例:
SELECT max(getField(mySummary, count)) from Metric
SELECT sum(mySummary) from Metric where getField(mySummary, count) > 10
histogram( )
関数を使用して、ヒストグラムを生成します。この関数は、以下の3つの引数を取ります。
属性名
サンプル範囲の最大値
バケットの合計数(1~500(500を含む))
このクエリは20バケットにわたって10秒以内のレスポンスタイムのヒストグラムを生成します。
SELECT histogram(duration, 10, 20) FROM PageView SINCE 1 week agohistogram( )
は、Prometheusヒストグラムバケットを受け取ります。SELECT histogram(duration_bucket, 10, 20) FROM Metric SINCE 1 week agohistogram( )
は、ディストリビューションメトリックを入力として受け取ります。SELECT histogram(myDistributionMetric, 10, 20) FROM Metric SINCE 1 week agoFACET句とともに
histogram( )
を使用し、ヒートマップチャートを生成します。SELECT histogram(duration) FROM PageView FACET appName SINCE 1 week ago
keyset()
を使用すると、所定の時間範囲における所定のデータ型に対するすべての属性を表示できます。この関数は引数を取りません。文字列型キー、数値型キー、ブール型キー、およびすべてのキーをグループ化したJSON構造体を返します。
このクエリは、最後の日からのPageView
イベントで見つかった属性を返します。
SELECT keyset() FROM PageView SINCE 1 day ago
latest( )
関数を使用して、指定された時間範囲における属性の最新値を返します。
単一の引数を取ります。最初の引数以外は無視されます。
FACET
と併用する場合、この関数は得られた各ファセットの属性の最新値を返します。
このクエリは、PageViewイベントからユーザーエージェントごとに最新の国コードを返します。
SELECT latest(countryCode) FROM PageView FACET userAgentName
データ型変換
NRQLは「型強制」をサポートしていません。つまり、文字列として保存されたフロートは文字列として取り扱われ、フロート値を要求する関数に渡しても操作できません。
以下に示す関数で、数値を伴う文字列、または文字列を伴うブーリアン値をそれぞれ数またはブール型に変換できます。
numeric()
関数を用いて、文字列形式の数値を数値関数に変換します。この関数は、クエリ結果に数学関数を使用するクエリ、またはaverage()
などのNRQL 集計関数に組み込むことができます。boolean()
関数を使用して、「true」または「false」の文字列値を対応するブーリアン値に変換します。