New Relicのデータをより深く理解したいですか?New Relic Query Language(NRQL)が役に立ちます。NRQLを使えばリアルタイムでデータ分析が可能です。始めは大変そうに見えますが、心配する必要はありません。この2部構成のブログでは、NRQLをより深く理解しデータから深い洞察を得るための10の重要な関数と句を紹介します。これらはパーセンテージの計算、ヒートマップの作成、条件付きウィジェットの作成など、多岐にわたる機能です。NRQLを使ってデータ分析を最大限に活用しましょう。

パート1では、データのクエリに必要な基本的なNRQL関数について説明しました。パート2では、NRQLのより高度な機能について詳しく説明します。ヒストグラム、ヒートマップ、高度な比較演算子などのトピックを取り上げます。NRQLを使用して複雑なデータセットを分析し、データのパターンと傾向を特定する方法を探ります。また、効率的なクエリを作成し、NRQLクエリのパフォーマンスを最適化するためのベストプラクティスをいくつか見ていきます。

No6:Latest

 latest()関数を使用すると、指定された期間における属性の最新の値を取得できます。単一の属性を入力として、最後に記録された値を返すことができます。

PageViewイベントからマップウィジェットの属性 city の最新の値を取得する簡単な例を次に示します:

FROM PageView
SELECT LATEST(city) AS 'Name:City'
FACET STRING(asnLatitude, precision: 5) AS 'Lat',
      STRING(asnLongitude, precision: 5) As 'Lang'
SINCE 1 HOUR AGO
LIMIT MAX

Map widget example with latest() clause


References

  • 詳細については、latest をご覧ください。
  • 詳細については、map widget をご覧ください。

No7:If

 クエリで条件付き出力を取得するために単純なif-then-else制御フローを実行する必要がある場合、どうしますか?NRQLにはif()関数が用意されており、SELECT句と組み合わせると便利です。

次に、ワークロードのステータスをチェックし、statusValue属性に基づいて出力をOnまたはOffとして表示する簡単な例を示します:

FROM WorkloadStatus
SELECT LATEST(IF(statusValue = 'OPERATIONAL', '🟢 On', '🔴 Off')) AS 'Workload Status' 
SINCE 30 SECONDS AGO

7.if().png

参考資料

  • 詳細については、 if() をご覧ください。

No8:Aparse

  aparseは、文字列から特定の値を抽出する優れた関数です。これにより、構造化データを含む文字列を解析し、そこから特定の値を抽出できます。これは、ログデータやその他の種類の非構造化データを分析する必要がある場合に特に役立ちます。

aparse()は2つの引数を取ります:

  • 文字列値を持つ属性
  • アンカー文字列と抽出する文字を含む文字のパターン。たとえば、'www.*.com' を使用すると、URLからドメイン部分のみを抽出できます。

次の画像は、ホストの場所にプレフィックス値が含まれている例です: NRQL without aparse

以下の例では、指定されたアンカー/正規表現パターンに基づいてプレフィックス部分を削除した後、結果から文字列の必要な部分のみを抽出します。

SELECT APARSE(hostname,'host-tower-*') AS hostLocation
FROM SystemSample
WHERE hostname LIKE '%tower%'

NRQL with aparse to capture location


参考資料

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

No9:サブクエリ

NRQLは、サブクエリもサポートします。サブクエリは、NRQLで複数のクエリを一緒に使用し、異なるデータセットからの結果を生成する強力な方法です。

基本的な例として、ホスト名を明示的に指定せずに、エラーログのあるホストのすべてのトランザクションをフィルタリングして検索する方法です:

FROM Transaction
SELECT appId, appName, containerId, request.method
WHERE hostname = (
	FROM Log
	SELECT latest(host)
	WHERE level = 'ERROR'
)

9.subqueries.png

IN句を使用したサブクエリ

サブクエリのもう 1 つの優れた使用例は、条件に複数の値を記述する代わりに、より動的なクエリを作成したい場合です。サブクエリでIN()句を使用できます。これは、フィルタリング基準が時間経過とともに変更または増加する可能性がある場合に便利です。

以下が使用例です: サンプルクエリを使用すると、TransactionErrorに関する全エンティティのトランザクションの平均持続時間を見つけることができます。このクエリはすべてのentity.guidを検索します。サブクエリを使用して、その結果をaverage(duration)の集計用にWHERE句に適用します。

SELECT AVERAGE(duration) FROM Transaction
WHERE entity.guid IN (SELECT UNIQUES(entity.guid)FROM TransactionError)
FACET appName TIMESERIES LIMIT 3

9.a_IN_clause.png


参考資料

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

No10:Histograms and heatmaps

ヒストグラム

 ヒストグラムを使用すると、データのパターン、分布、傾向をすばやく特定できます。

histogram()は3つの引数をできます:

  • 属性名
  • サンプル範囲の最大値
  • 範囲境界を含むバケットの総数(1~500)

**PageViewからの応答時間のヒストグラムを、20個のバケットにわたって最大10秒の範囲で生成できます。このクエリは基本的に、**PageViewからの属性「duration」に対するY軸のリクエストの総数に対して、X軸に20の異なる時間間隔(またはバケット)の出力を生成します。

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

Histogram() to showcase PageView duration across timebuckets

ヒートマップ

 Heatmap()は、データセット内のパターンを視覚化するのに役立ちます。値が増加または減少すると、ヒートマップ内の色の強度が明るい状態から暗い状態に変化します。

ヒートマップを作成するには、Histogram()関数を使用します。数値の属性を1つだけ指定し、FACET句を追加します。 以下は、過去3時間に当社のウェブサイトにアクセスした、さまざまなOSを示すヒートマップの例です。

SELECT HISTOGRAM(duration) FROM PageView FACET userAgentOS SINCE 3 HOURS AGO

Heatmap showing PageViews by userAgentOS


参考資料

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

NRQLをマスターすると、データを取得して解釈できるようになり、全体像を理解しやすい部分に分解できるようになります。これにより、問題の発生時に問題を特定し、データをリアルタイムで分析して、貴重な洞察を得ることができます。パフォーマンスの最適化、トレンドの把握、またはビジネス上の意思決定を推進する主要なメトリクスの監視を検討している場合でも、NRQLはデータを包括的に理解する上で役立つ、不可欠なツールです。