New Relicのデータをより深く理解したいですか? New Relic Query Language(NRQL)がお手伝いします。NRQLを使うと、リアルタイムでデータを分析できます。最初は複雑に思えるかもしれませんが、心配しないでください。この2部構成のブログでは、NRQLをより深く理解し、データからより深い洞察を得るのに役立つ、10の重要なNRQL関数と句について説明します。これらの関数と句を使用することで、パーセンテージの計算、ヒートマップの作成、条件付きウィジェットの作成などに役立ちます。NRQLを使用することで、データ分析からより多くのことを引き出すことができます。早速、NRQLを使用してデータから貴重な洞察を得る方法を学びましょう。

No1: Select X from Y

SELECT X FROM Y , FROM Y SELECT X

 何かをクエリする最も簡単な方法です。すべてのNRQLクエリは、SELECTまたはFROM句で始まります。最初のクエリをFROMで始めるのがベストです。これにより、利用可能なイベント/メトリクスの値のリストが表示されます。SELECTは、属性 または 関数 を指定してデータ型のどの部分をクエリするかを指定します。たとえば、SELECT * FROM Transactionは、*をワイルドカードとして使用し、使用可能なすべての属性の値を取得します。

NRQL SELECT句

 クエリビルダーからの自動提案を利用するには、FROM句を使用します。たとえば、FROM Transaction SELECT transactionSubTypeは、選択したデータセットの関連属性のみを提案します。

NRQL FROM句

 すべてのNRQLクエリは、SELECTステートメントまたはFROM句で始まる必要があります。他のすべての句はオプションですが、初期クエリをさらに具体的に改善することも可能です。たとえば、時間範囲を指定したり、カスタムラベルを比較したり追加したりすることができます。以下を試してみてください:

SINCE

 SINCE句を使用して、返されるデータの時間範囲の開始を定義します。クエリにはタイムゾーンを指定できますが、結果には指定できません。NRQLの結果は、since 5 minutes agosince 1 months ago limit maxなどのシステム時間に基づいています。注:デフォルト値は 1 時間前です。

UNTIL

 デフォルト以外のエンドポイントを指定するために使用します。時間範囲を指定すると、データが保存され、時間範囲が終了した後に確認できます。注:デフォルト値はNOWです。これは、SINCEUNTILを組み合わせて、1 か月間のトランザクションのmax(duration)から今日のデータを引いた値の時系列グラフをプロットできる便利なクエリです。

FROM Transaction
SELECT MAX(duration) 
WHERE appName = 'node-express-mongodb' 
since 1 months ago until 1 DAY ago TIMESERIES auto
NRQL SINCE UNTIL句

COMPARE WITH

 2つの異なる時間範囲の値を比較するには、COMPARE WITH を使用します。COMPARE WITH にはSINCEまたはUNTIL句が必要です。COMPARE WITHで指定された時間は、SINCEまたはUNTILで指定された時間を基準とします。たとえば、SINCE 1 day ago COMPARE WITH 1 day agoは昨日と前日を比較します。2つの異なる時間範囲の値を比較する例を次に示します:

SELECT average(duration) FROM Transaction SINCE 1 DAY AGO COMPARE WITH 1 WEEK AGO
NRQL COMPARE句(withがある場合とない場合)

AS

 AS句は、属性、集計、数学関数の結果にラベルを付けるために使用します。これは、関数やクエリの結果をより明確に識別できるため、グラフを作成するときに非常に役立ちます。以下は、ASを使用してデータセットのラベルを付けたグラフの例です。このラベルにより、グラフ内のデータソースが明確に示されるため、グラフの結果を理解しやすくなります。

SELECT count(*)/uniqueCount(session) AS 'Pageviews per Session'
FROM PageView
NRQL AS句の比較

参考資料


No2:数学関数

NRQL を使用すると、SELECT句で単純な数学演算子と複雑な数学演算子を使用できます。個々の属性だけでなく、集計関数の出力に対しても計算できます。

  1. count:利用可能なレコードの数を取得します。これは SQL の動作に似ており、指定された属性のすべてのレコードをカウントします。

     FROM Transaction SELECT count(*)
    

    example for count(*)

  2. average , min, max:ある属性の最小値、最大値、および平均値を計算します。例として、トランザクションの持続時間を確認してみましょう。

    FROM Transaction
    SELECT average(duration) ,max(duration), min(duration)
    WHERE host LIKE '%west%'
    

example for average(), min() & max()

  1. percentage:対象のデータセットのパーセンテージを計算します。最初の引数には、求める属性に対する集計関数が必要です。

    FROM TRANSACTION
    SELECT percentage(count(*), WHERE error IS true) AS 'Error Percent'
    WHERE host LIKE '%west%' EXTRAPOLATE
    

    NRQL for percentage

  2. percentile:必要な属性のパーセンタイルを計算します

    FROM TRANSACTION
    SELECT percentile(duration, 95, 75, 60)
    WHERE host LIKE '%west%' EXTRAPOLATE
    

95th, 75th & 60th Percentile for transaction duration

参考資料

詳細については、集計関数 をご覧ください


No3:時系列

 TIMESERIES句を使用して、特定の時間間隔(例えば、1時間、1日など)ごとに分割された時系列データを取得します。これらの特定の時間間隔は「バケット」とも呼ばれ、秒、分、時間などで定義できます。 TIMESERIESキーワードは、集計関数を使用して値を時系列にプロットするクエリに追加できます。

    FROM Transaction
    SELECT MAX(duration)
    WHERE appName = 'node-express-mongodb'
    SINCE 1 MONTHS AGO
    TIMESERIES AUTO

Timeseries.

 また、時系列のタイムスライスを定義することもできます。たとえば、時系列内のデータポイントを30秒間隔でキャプチャするTIMESERIES 30 seconds、時系列のデータポイントを1分間隔でキャプチャするTIMESERIES 1 minute、またTIMESERIES maxでは定義された間隔なしで時系列内のすべてのデータポイントをキャプチャすることもできます。これにより、時系列のタイムスライスを好みの時間枠にカスタマイズできます。

参考資料

  • 詳細については、TIMESERIES をご覧ください

No4:FACET(グループ化)

FACET

 FACETを使用して、結果を属性値ごとに条件付きでグループ化し、グループごとに分離します。これは、さまざまなカテゴリまたはディメンション別にデータを分析する場合に役立ちます。

以下は、FACET句を使用した簡単な例です。データセット内に存在する各都市ごとに PageViewのカウントをグループ化できます。

SELECT count(*) FROM PageView FACET city

このクエリの結果には、都市属性に基づいてグループ分けされた各都市のページビュー数を表示します。

example for FACET clause

FACET CASES

FACETのもう1つのバリエーションはFACET CASESです。キーワードCASESF ACETとともに使用すると、クエリに複数の条件を追加したり、各FACET CASE内で複数の属性を組み合わせたりすることもできます。

以下に、FACET CASES句を使用してPageViewデータをクエリし、データセットから異なる期間値の間で複数の結果を取得できる例を示します。

SELECT count(*) FROM PageView 
FACET CASES 
(WHERE duration < 1,
 WHERE duration > 1 and duration < 10)

Example for FACET CASES

クエリ結果を読みやすく理解しやすくするために、ラベル付けにAS句を使用して、FACET CASES内の各条件にカスタムラベルを割り当てることができます。

SELECT count(*) from Transaction
FACET CASES(
where response.status LIKE '2%' OR httpResponseCode LIKE '2%' as '2xx Responses',
where response.status LIKE '3%' OR httpResponseCode LIKE '3%' as '3xx Responses',
where response.status LIKE '4%' OR httpResponseCode LIKE '4%' as '4xx Responses',
where response.status LIKE '5%' OR httpResponseCode LIKE '5%' as '5xx Responses'
)

FACET CASES with ‘AS’ label

参考資料


No5:フィルター

 クエリ結果をフィルターすると、結果を最も関連性の高い情報のみに絞り込むことができます。NRQLは、データセットをフィルタリングするためのさまざまな方法を提供します。

ワイルドカードフィルター

 ワイルドカードフィルターは、クエリ結果を特定のパターンでフィルタリングする場合に役立ちます。NRQLは、%記号を使用してワイルドカードフィルターを追加する優れた機能を提供します。

以下のサンプルでは、データセット内の**.duration**で終わるすべての属性の平均を取得しています。結果には、フィルターに一致する2つの属性が表示されます。

FROM Metric SELECT average(%.duration)FACET metricName TIMESERIES

Example dashboard for wildcard filter

filter()関数

filter()関数は、複数の属性からのクエリ結果を組み合わせる必要がある場合に役立ちます。クエリ内でコンマで区切って、複数のデータセットの結果を簡単に組み合わせることができます。

この例では、 PageView および Transaction の属性から「結合されたイベント」としてラベル付けされたデータセット内のすべてのイベントの総数を集計しています。

SELECT COUNT(*) AS 'Combined Events' FROM Transaction, PageView SINCE  1 DAY AGO

Example for simple usage of filter() function

すべてのイベントの合計だけでなく、PageViewおよびTransactionイベントの個々の合計数を表示することで、出力をより興味深いものにすることができます。以下のクエリでfilter()関数を使用することで、これを簡単に実現できます:

SELECT count(*) as 'Combined Events',
filter(count(*), WHERE eventType() = 'PageView') as 'Page Views',
filter(count(*), WHERE eventType()='Transaction') as 'Transactions'
FROM Transaction, PageView SINCE  1 DAY AGO

filter() function for events across multiple dimensions

また、filter()を使用して、WHERE句を使い、Transactionの異なるメトリクスの数を取得する別の例です:

FROM Transaction SELECT 
filter(count(*), where request.uri not like '/api/%') as 'Others',
filter(count(*), where request.uri like '/api/tutorials%') as 'Tutorial Endpoints',
filter(count(*), where request.uri like '/api/weather%') as 'Weather Endpoints'
where appName = 'node-express-mongodb'
since 2 months ago limit max

filter() example with WHERE clause


参考資料




このブログでは、データのクエリに必要な基本的なNRQL関数について説明しました。次のパートでは、NRQLのもう少し高度な機能と特徴について説明します。これらは、複雑なデータのクエリと視覚化に取り組むのに役立ち、テレメトリデータを最大限に活用できるようになります。