Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 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 リファレンス(英語)に書いてありますので、是非活用してみてください。

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

kumatronik
基本、Rails エンジニア。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away