New Relicのデータをより深く理解したいですか? New Relic Query Language(NRQL)がお手伝いします。NRQLを使うと、リアルタイムでデータを分析できます。最初は複雑に思えるかもしれませんが、心配しないでください。この2部構成のブログでは、NRQLをより深く理解し、データからより深い洞察を得るのに役立つ、10の重要なNRQL関数と句について説明します。これらの関数と句を使用することで、パーセンテージの計算、ヒートマップの作成、条件付きウィジェットの作成などに役立ちます。NRQLを使用することで、データ分析からより多くのことを引き出すことができます。早速、NRQLを使用してデータから貴重な洞察を得る方法を学びましょう。
クエリビルダーからの自動提案を利用するには、FROM
句を使用します。たとえば、FROM Transaction SELECT transactionSubType
は、選択したデータセットの関連属性のみを提案します。
すべてのNRQLクエリは、SELECT
ステートメントまたはFROM
句で始まる必要があります。他のすべての句はオプションですが、初期クエリをさらに具体的に改善することも可能です。たとえば、時間範囲を指定したり、カスタムラベルを比較したり追加したりすることができます。以下を試してみてください:
SINCE
SINCE
句を使用して、返されるデータの時間範囲の開始を定義します。クエリにはタイムゾーンを指定できますが、結果には指定できません。NRQLの結果は、since 5 minutes ago
、since 1 months ago limit max
などのシステム時間に基づいています。注:デフォルト値は 1 時間前です。
UNTIL
デフォルト以外のエンドポイントを指定するために使用します。時間範囲を指定すると、データが保存され、時間範囲が終了した後に確認できます。注:デフォルト値はNOWです。これは、SINCE
とUNTIL
を組み合わせて、1 か月間のトランザクションのmax(duration)
から今日のデータを引いた値の時系列グラフをプロットできる便利なクエリです。
FROM Transaction
SELECT MAX(duration)
WHERE appName = 'node-express-mongodb'
since 1 months ago until 1 DAY ago TIMESERIES auto
注:日付と時刻を指定することもできます:SINCE ‘2022-10-10 09:00:00’ or UNTIL ‘2022-10-10 10:00:00’
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
AS
AS
句は、属性、集計、数学関数の結果にラベルを付けるために使用します。これは、関数やクエリの結果をより明確に識別できるため、グラフを作成するときに非常に役立ちます。以下は、AS
を使用してデータセットのラベルを付けたグラフの例です。このラベルにより、グラフ内のデータソースが明確に示されるため、グラフの結果を理解しやすくなります。
SELECT count(*)/uniqueCount(session) AS 'Pageviews per Session'
FROM PageView
No2:数学関数
NRQL を使用すると、SELECT
句で単純な数学演算子と複雑な数学演算子を使用できます。個々の属性だけでなく、集計関数の出力に対しても計算できます。
-
count:利用可能なレコードの数を取得します。これは SQL の動作に似ており、指定された属性のすべてのレコードをカウントします。
FROM Transaction SELECT count(*)
-
average , min, max:ある属性の最小値、最大値、および平均値を計算します。例として、トランザクションの持続時間を確認してみましょう。
FROM Transaction SELECT average(duration) ,max(duration), min(duration) WHERE host LIKE '%west%'
-
percentage:対象のデータセットのパーセンテージを計算します。最初の引数には、求める属性に対する集計関数が必要です。
FROM TRANSACTION SELECT percentage(count(*), WHERE error IS true) AS 'Error Percent' WHERE host LIKE '%west%' EXTRAPOLATE
-
percentile:必要な属性のパーセンタイルを計算します
FROM TRANSACTION SELECT percentile(duration, 95, 75, 60) WHERE host LIKE '%west%' EXTRAPOLATE
参考資料
詳細については、集計関数 をご覧ください
No3:時系列
TIMESERIES
句を使用して、特定の時間間隔(例えば、1時間、1日など)ごとに分割された時系列データを取得します。これらの特定の時間間隔は「バケット」とも呼ばれ、秒、分、時間などで定義できます。
TIMESERIES
キーワードは、集計関数を使用して値を時系列にプロットするクエリに追加できます。
FROM Transaction
SELECT MAX(duration)
WHERE appName = 'node-express-mongodb'
SINCE 1 MONTHS AGO
TIMESERIES AUTO
また、時系列のタイムスライスを定義することもできます。たとえば、時系列内のデータポイントを30秒間隔でキャプチャするTIMESERIES 30 seconds
、時系列のデータポイントを1分間隔でキャプチャするTIMESERIES 1 minute
、またTIMESERIES max
では定義された間隔なしで時系列内のすべてのデータポイントをキャプチャすることもできます。これにより、時系列のタイムスライスを好みの時間枠にカスタマイズできます。
参考資料
- 詳細については、TIMESERIES をご覧ください
No4:FACET(グループ化)
FACET
FACET
を使用して、結果を属性値ごとに条件付きでグループ化し、グループごとに分離します。これは、さまざまなカテゴリまたはディメンション別にデータを分析する場合に役立ちます。
以下は、FACET
句を使用した簡単な例です。データセット内に存在する各都市ごとに PageViewのカウントをグループ化できます。
SELECT count(*) FROM PageView FACET city
このクエリの結果には、都市属性に基づいてグループ分けされた各都市のページビュー数を表示します。
FACET CASES
FACET
のもう1つのバリエーションはFACET CASES
です。キーワードCASES
をF ACET
とともに使用すると、クエリに複数の条件を追加したり、各FACET CASE
内で複数の属性を組み合わせたりすることもできます。
以下に、FACET CASES句を使用してPageViewデータをクエリし、データセットから異なる期間値の間で複数の結果を取得できる例を示します。
SELECT count(*) FROM PageView
FACET CASES
(WHERE duration < 1,
WHERE duration > 1 and duration < 10)
クエリ結果を読みやすく理解しやすくするために、ラベル付けに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'
)
参考資料
No5:フィルター
クエリ結果をフィルターすると、結果を最も関連性の高い情報のみに絞り込むことができます。NRQLは、データセットをフィルタリングするためのさまざまな方法を提供します。
ワイルドカードフィルター
ワイルドカードフィルターは、クエリ結果を特定のパターンでフィルタリングする場合に役立ちます。NRQLは、%
記号を使用してワイルドカードフィルターを追加する優れた機能を提供します。
以下のサンプルでは、データセット内の**.duration**で終わるすべての属性の平均を取得しています。結果には、フィルターに一致する2つの属性が表示されます。
FROM Metric SELECT average(%.duration)FACET metricName TIMESERIES
filter()
関数
filter()
関数は、複数の属性からのクエリ結果を組み合わせる必要がある場合に役立ちます。クエリ内でコンマで区切って、複数のデータセットの結果を簡単に組み合わせることができます。
この例では、 PageView および Transaction の属性から「結合されたイベント」としてラベル付けされたデータセット内のすべてのイベントの総数を集計しています。
SELECT COUNT(*) AS 'Combined Events' FROM Transaction, PageView SINCE 1 DAY AGO
すべてのイベントの合計だけでなく、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()
を使用して、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() をご覧ください
このブログでは、データのクエリに必要な基本的なNRQL関数について説明しました。次のパートでは、NRQLのもう少し高度な機能と特徴について説明します。これらは、複雑なデータのクエリと視覚化に取り組むのに役立ち、テレメトリデータを最大限に活用できるようになります。
次のステップ
New Relicをまだ使用していない方は、無料アカウントに登録して、すべての機能をお試しいただけます。無料アカウントには、毎月100GBの無料データ取り込み、1名の無料のフルアクセスユーザー、および無制限の無料ベーシックユーザーが含まれます。
NRQL関数とベストプラクティスについては、このブログシリーズの次のパートをご覧ください。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。