Edited at

New Relic Insights: NRQL をいろいろ試しみよう(基本編)

More than 3 years have passed since last update.

Advent Calendar 8日目は、昨日に引き続き 3日連続で、New Relic Insights です。

今日は、具体的な NRQL の例と実行結果を見ていきたいと思います。


NQRL の実行例

最初に、実際に NRQL を書いて、実行した際の動きを見てもらいたいと思います。以下は、直近1日の国別のページビューのタイムチャートと以下のサンプルの1つ目の直近 1時間の全アプリのスループットの2つを続けて実行しています。(NRQL で使っているキーワードはおいおい説明していきますので、ここでは気にしないでください)

insights_image.gif

どうでしょうか。昨日は説明していませんでしたが、実行すると、結果はいくつか形式で表示されている(タブが3つあります)のがわかるかと思います。上の例では、折れ線グラフ、積み重ねチャート、JSON 形式の3つの形で出力されています。2つ目は、また違った形式(タブが4つ)なのが分かるかと思います。JSON は常にあります。それ以外は出力内容によって異なります。


NQRL のサンプル(基本編)

New Relic Insights の Query 画面には、いくつか例がありますので、それを紹介していきます。Insights を使える方は、是非、一回アクセスして、試してみてください。実際に実行できるので、よりイメージがわくと思います。

insights_query.png

直近 1時間の全アプリのスループットは?

SELECT count(*) from Transaction

結果

insights_query_01.png

※ 時間を指定する必要はありません。デフォルトでは、直近1時間のデータが対象となります。


直近 1 時間の特定のアプリに属する特定のホストのスループットは?

SELECT count (*) from Transaction WHERE host='<ホスト名>' AND appName = '<アプリ名>'

結果

insights_query_02.png


直近 12 時間から 1時間前までのあるアプリの全スループットは?

SELECT count(*) FROM Transaction WHERE appName = '<アプリ名>' SINCE 12 hours ago UNTIL 1 hour ago

結果

insights_query_03.png

SINCE の後の hours は、他にも、days, weeks, months が使えます。

SINCEUNTIL を使うことで、毎回 Insights を表示したときに、現在時刻をベースとした最新のデータが見えるようになります。


3 日前から現在までのあるアプリのスループットは?

SELECT count(*) FROM Transaction WHERE appName = '<アプリ名>' SINCE '2015-12-06' UNTIL '2015-12-08' TIMESERIES AUTO

結果

insights_query_04.png

ここでは、日付を指定する例ですね。TIMESERIES を使うことで、時系列データ返ってきます。そして、表示もそれに沿ったグラフが表示されています。最後の AUTO は時系列データの区切り幅を指定しています。AUTO は、自動で期間にあったみやすい値が適用されるようです。ここでは、1時間区切りになっています。これは、30 minutes2 hours とか変えることもできます。


コントローラー名別のスループットの内訳は?

SELECT count(*) FROM Transaction FACET name

結果

insights_query_05.png

NRQL では、GROUP BY の代わりに FACET というキーワードが用意されています。GROUP BY と同じ動き出そうです。逆に分かりづらい気がするんだよねこれ。


アプリの昨日と今日のスループットの比較がしたい

SELECT count(*) FROM Transaction SINCE 1 day ago TIMESERIES AUTO COMPARE WITH 1 day ago

結果

insight_query_06.png

ここでは、COMPARE WITH を使って1日前と今日のデータを比較しています。これ両方とも 1 day ago って書いてあるから、アレ?ってなるんだよね。


トップ50のトランザクションの平均、最大、最小処理時間がみたい

SELECT count(*), average(duration), max(duration),  min(duration), sum(duration) FROM Transaction FACET name LIMIT 50

結果

insights_query_07.png

このように表形式にした場合、SELECT の最初の function (ここでは count(*))でソートされるそうです。


直近 1 日で受け付けたリクエストのユニークなコントローラーの数は?

SELECT uniqueCount(name) FROM Transaction WHERE appName = '<アプリ名>' SINCE 1 day ago

結果

insights_query_08.png

uniqueCount は、SQL の DISTINCT と同じ動作をするようです。




  • 直近 1 日間にリクエストを受け付けた全ホスト名前のリストは?

SELECT uniques(host) FROM Transaction SINCE 1 day ago

結果

insights_query_09.png

この uniques はいろいろな場面で使えます。例えば、カスタム属性で商品名などを収取していた場合、一日で売れた商品名のリストが簡単に取り出せます。


直近 1 日間における特定のリクエストを利用した最後のホストは?

SELECT latest(host) FROM Transaction FACET name SINCE 1 day ago

結果

insights_query_10.png

latest 関数は、特定の期間における属性の最新の値を返します。FACET 句と一緒に使うことで、指定した値(ここでは、name )でグループ化した結果に対して、最新の値を表示しています。


リクエストの処理の何パーセントの時間が、データベース処理以外に費やされてる?

SELECT (1-(average(duration)-average(databaseDuration))/average(duration))*100 AS '% of time in DB' FROM Transaction FACET name WHERE appName = '<アプリ名>'

結果

insights_query_11.png

(1 - (平均処理時間-DB平均処理時間)/平均処理時間) * 100 = DB 以外に費やした処理の時間の割合

ここでは、数値データに対して、Math関数を利用しています。SQL と同じ感じ。NQRL では、+, -, /, * をサポートしています。

また、ラベルとして、AS も利用しています。


さいごに

どうでしたでしょうか?NRQL や Insights のイメージが分かってきたでしょうか。ここにあるのは、あくまで例なので、ここの書いてある内容でイメージを膨らめていただいて、是非、お使いのアプリで有効に活用してください。

NQRL の詳しい文法やキーワードは、NRQL リファレンス(英語)に書いてありますので、是非活用してみてください。

ここでは、チュートリアルにある、基本のみなので、別の日に応用の方も紹介したいと思います。