Advent Calendar 8日目は、昨日に引き続き 3日連続で、New Relic Insights です。
今日は、具体的な NRQL の例と実行結果を見ていきたいと思います。
NQRL の実行例
最初に、実際に NRQL を書いて、実行した際の動きを見てもらいたいと思います。以下は、直近1日の国別のページビューのタイムチャートと以下のサンプルの1つ目の直近 1時間の全アプリのスループットの2つを続けて実行しています。(NRQL で使っているキーワードはおいおい説明していきますので、ここでは気にしないでください)
どうでしょうか。昨日は説明していませんでしたが、実行すると、結果はいくつか形式で表示されている(タブが3つあります)のがわかるかと思います。上の例では、折れ線グラフ、積み重ねチャート、JSON 形式の3つの形で出力されています。2つ目は、また違った形式(タブが4つ)なのが分かるかと思います。JSON は常にあります。それ以外は出力内容によって異なります。
NQRL のサンプル(基本編)
New Relic Insights の Query 画面には、いくつか例がありますので、それを紹介していきます。Insights を使える方は、是非、一回アクセスして、試してみてください。実際に実行できるので、よりイメージがわくと思います。
直近 1時間の全アプリのスループットは?
SELECT count(*) from Transaction
※ 時間を指定する必要はありません。デフォルトでは、直近1時間のデータが対象となります。
直近 1 時間の特定のアプリに属する特定のホストのスループットは?
SELECT count (*) from Transaction WHERE host='<ホスト名>' AND appName = '<アプリ名>'
直近 12 時間から 1時間前までのあるアプリの全スループットは?
SELECT count(*) FROM Transaction WHERE appName = '<アプリ名>' SINCE 12 hours ago UNTIL 1 hour ago
SINCE
の後の hours
は、他にも、days
, weeks
, months
が使えます。
SINCE
や UNTIL
を使うことで、毎回 Insights を表示したときに、現在時刻をベースとした最新のデータが見えるようになります。
3 日前から現在までのあるアプリのスループットは?
SELECT count(*) FROM Transaction WHERE appName = '<アプリ名>' SINCE '2015-12-06' UNTIL '2015-12-08' TIMESERIES AUTO
ここでは、日付を指定する例ですね。TIMESERIES
を使うことで、時系列データ返ってきます。そして、表示もそれに沿ったグラフが表示されています。最後の AUTO
は時系列データの区切り幅を指定しています。AUTO は、自動で期間にあったみやすい値が適用されるようです。ここでは、1時間区切りになっています。これは、30 minutes
や 2 hours
とか変えることもできます。
コントローラー名別のスループットの内訳は?
SELECT count(*) FROM Transaction FACET name
NRQL では、GROUP BY
の代わりに FACET
というキーワードが用意されています。GROUP BY
と同じ動き出そうです。逆に分かりづらい気がするんだよねこれ。
アプリの昨日と今日のスループットの比較がしたい
SELECT count(*) FROM Transaction SINCE 1 day ago TIMESERIES AUTO COMPARE WITH 1 day ago
ここでは、COMPARE WITH
を使って1日前と今日のデータを比較しています。これ両方とも 1 day ago って書いてあるから、アレ?ってなるんだよね。
トップ50のトランザクションの平均、最大、最小処理時間がみたい
SELECT count(*), average(duration), max(duration), min(duration), sum(duration) FROM Transaction FACET name LIMIT 50
このように表形式にした場合、SELECT
の最初の function (ここでは count(*)
)でソートされるそうです。
直近 1 日で受け付けたリクエストのユニークなコントローラーの数は?
SELECT uniqueCount(name) FROM Transaction WHERE appName = '<アプリ名>' SINCE 1 day ago
uniqueCount
は、SQL の DISTINCT
と同じ動作をするようです。
直近 1 日間にリクエストを受け付けた全ホスト名前のリストは?
SELECT uniques(host) FROM Transaction SINCE 1 day ago
この uniques
はいろいろな場面で使えます。例えば、カスタム属性で商品名などを収取していた場合、一日で売れた商品名のリストが簡単に取り出せます。
直近 1 日間における特定のリクエストを利用した最後のホストは?
SELECT latest(host) FROM Transaction FACET name SINCE 1 day ago
latest
関数は、特定の期間における属性の最新の値を返します。FACET
句と一緒に使うことで、指定した値(ここでは、name
)でグループ化した結果に対して、最新の値を表示しています。
リクエストの処理の何パーセントの時間が、データベース処理以外に費やされてる?
SELECT (1-(average(duration)-average(databaseDuration))/average(duration))*100 AS '% of time in DB' FROM Transaction FACET name WHERE appName = '<アプリ名>'
(1 - (平均処理時間-DB平均処理時間)/平均処理時間) * 100 = DB 以外に費やした処理の時間の割合
ここでは、数値データに対して、Math関数を利用しています。SQL と同じ感じ。NQRL では、+, -, /, *
をサポートしています。
また、ラベルとして、AS
も利用しています。
さいごに
どうでしたでしょうか?NRQL や Insights のイメージが分かってきたでしょうか。ここにあるのは、あくまで例なので、ここの書いてある内容でイメージを膨らめていただいて、是非、お使いのアプリで有効に活用してください。
NQRL の詳しい文法やキーワードは、NRQL リファレンス(英語)に書いてありますので、是非活用してみてください。
ここでは、チュートリアルにある、基本のみなので、別の日に応用の方も紹介したいと思います。