4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

New Relicのクエリ言語でJOINを使ってみた

Last updated at Posted at 2023-06-26

概要

New Relicに取り込んだデータを詳細に分析することができるクエリ言語のNRQLですが、より細かい分析をする際に2つのデータを結合して分析したいと感じたことは無いでしょうか?
この度、New Relic アップデート(2023年5月)の中で、遂にNew Relicのクエリ言語にJOINが追加されたので試してみます!

このアップデートの詳細はこちら。New Relic アップデート(2023年5月)

JOINの構文

JOINは次の構文で指定します。基本的にはSQLのJOINと同じなのでイメージしやすいと思います。
詳細はこちらを参照ください。

JOINの構文
FROM Event [INNER|LEFT] JOIN (subquery) ON [key =] key SELECT ...

JOINを活用するいくつかユースケースを紹介します。

1. パフォーマンスが悪いアプリのCPU使用率を確認

バックエンドのアプリケーションの応答時間であるレスポンスの情報は、Transactionイベントdurationという属性で含まれていますが、アプリケーションが動いているサーバーのCPU使用率はTransactionイベントには含まれていないため、Transactionイベントだけでは、レスポンスとCPU使用率の相関関係を一つにして表すことができませんでした。

そこで、今回追加されたJOINを使ってアプリケーションの応答時間を含むTransactionイベントと、CPU使用率の情報を含むProcessSampleイベントホスト名を使ってJOINで結合して、アプリケーションの応答速度が良くない場合に、ホストのCPU使用率がどのようになっているか一覧で確認できるようにしたいと思います。

まずはJOINする前にそれぞれのデータをNRQLで呼び出してみます。

Transactionイベントからレスポンスの平均時間を取得
FROM Transaction SELECT average(duration) FACET host 

image.png

SystemSampleイベントからCPU使用率の平均時間を取得
FROM SystemSample SELECT average(cpuPercent) FACET hostname

image.png

では、JOINの構文に従ってTransactionイベントhostSystemSampleイベントhostnameをキーとして結合します。

サブクエリのcpuPercentはそのままでは結合後のSELECTで呼び出せないので、ASでエイリアス名cpuをつけて、average(cpu)で使用しています。

TransactionイベントにSystemSampleイベントを結合
FROM Transaction
  JOIN (FROM SystemSample SELECT average(cpuPercent) AS cpu
  FACET hostname) ON host = hostname
SELECT average(duration), average(cpu)
FACET appName, host

image.png

このように、TransactionイベントにSystemSampleイベントを結合することで、アプリケーションのレスポンスが遅い場合に、ホストのCPU使用率がどのくらい高くなっているか一覧で確認できるようになりました。

2. アプリが呼び出す処理がブラウザ操作の時間に与える影響

ユーザーがブラウザを操作したときに、そのブラウザの処理の中で必要となる時間の中には、バックエンドのアプリケーションが使用するデータベースや外部サービスへのアクセスなどの時間が含まれていますが、ブラウザセッションの処理に関するBrowserInteractionイベントではバックエンドのアプリケーションのデータベース処理や外部アクセスの時間などは把握することができません。

そこで、今回追加されたJOINを使ってアプリケーションの外部アクセスの時間を含むTransactionイベントと、ブラウザセッションの処理にかかった時間を持っているBrowserInteractionイベントTransactionの名前を使ってJOINで結合していきたいと思います。

まずはJOINする前にそれぞれのデータをNRQLで呼び出してみます。

Transactionイベントからトランザクション名と外部アクセスの時間を取得
FROM Transaction SELECT name, externalDuration WHERE externalDuration IS NOT NULL

image.png

BrowserInteractionイベントからトランザクション名とブラウザインタラクションの時間を取得
FROM BrowserInteraction SELECT backendTransactionName, duration AS 'session duration'

image.png

では、JOINの構文に従ってTransactionイベントnameBrowserInteractionイベントbackendTransactionNameをキーとして結合します。

TransactionイベントにBrowserInteractionイベントを結合
FROM Transaction 
  JOIN(FROM BrowserInteraction SELECT backendTransactionName,
  duration AS total ) ON name=backendTransactionName
SELECT name, total AS 'session duration', externalDuration
WHERE externalDuration IS NOT NULL

image.png

このように、TransactionイベントにBrowserInteractionイベントを結合することで、ブラザセッションの処理時間とアプリケーションの外部アクセスの時間を一覧で確認できるようになり、ブラウザセッションのパフォーマンスにアプリケーションの外部アクセスがどの程度影響を与えているか把握しやすくなります。

3. 例外スローされたTransactionのログだけを一覧表示

構造化されたログを表形式で表示することで、どの時間帯にどんなメッセージがでているか確認することができますが、例外がスローされたTransactionのログだけを一覧で表示するには情報が足りないことがあります。

そこで、今回追加されたJOINを使ってログに関するLogイベントと、例外がスローされたTransactionを表すTransactionErrorイベントトレースIDを使ってJOINで結合していきたいと思います。

まずはJOINする前にそれぞれのデータをNRQLで呼び出してみます。

Logイベントからアプリ名とトレースIDとメッセージを取得
FROM Log SELECT appName, trace.id, message

image.png

traceId毎にTransactionErrorイベントの発生回数を取得
FROM TransactionError SELECT count(*) FACET traceId

image.png

では、JOINの構文に従ってLogイベントtrace.idTransactionErrorイベントtraceIdをキーとして結合します。

LogイベントにTransactionErrorイベントを結合
FROM Log
  JOIN (FROM TransactionError SELECT count(*) 
  facet traceId as 'trace.id', appName) ON trace.id
SELECT appName, trace.id, message

image.png

このように、LogイベントにTransactionErrorイベントを結合することで、例外がスローされたTransactionのログだけを一覧で表示することができました。

まとめ

New Relic アップデート(2023年5月)に記載されているJOINを試してみました。
New Relicに取り込んだ2つのデータを結合して分析することができる強力な機能なのでぜひお試しください。

このアップデートの詳細はこちら。New Relic アップデート(2023年5月)

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?