NRQL とは 、 NRQL の仕組み、 NRQLと チャートやダッシュボードとの関係 など、他のトピックで NRQL の基本を学んだ後は、このチュートリアルの例を試す準備ができています!このチュートリアルでは、データを使用していくつかの基本的な NRQL クエリを作成するのに役立つ、言語内のいくつかの基本的な概念について説明します。次の方法が含まれます。
SELECT
を使用し、FROM
- 使用する
LIMIT
- 属性を指定する
average()
、max()
、min()
、sum()
、およびcount()
SINCE
を使用し、UNTIL
- 折れ線グラフをプロットする
TIMESERIES
- を使用してフィルタリングする
WHERE
- を使用して属性をグループ化する
FACET
前提条件
このチュートリアルを進めるために必要なのは、New Relic プラットフォームにいくつかのデータを取り込むことだけです。 New Relic を初めて使用し、NRQL をいかに簡単に使用できるかを知りたい場合は、無料でプラットフォームを使い始めて、チュートリアルに従うことができます。 あなたがしなければならないことは次のとおりです。
- まだお持ちでない場合は、無料のアカウントにサインアップしてください。
- 当社のエージェントと統合を使用して、一般的なフレームワークやツールからデータを自動的に収集します。
- New Relic のセットアップ方法に関する推奨パスについては、クイック リリース ガイドを参照してください。 クエリするデータの取り込みを開始すると、このチュートリアルまたはこのシリーズの他のチュートリアルを使用する準備が整います。
始める準備はできていますか?さあ行こう!
1. 最初のクエリを作成します
クエリビルダーで開始するのに最適な場所は、New Relic APM によって収集されたTransaction
と呼ばれる NRDB の単一のイベントタイプを調べることです。すべての NRQL クエリにはSELECT
} 句とFROM
句が必要です。データをSELECT
し、そのデータがFROM
である場所を指定する必要があります。Transaction
イベント タイプからすべてを選択する次の基本的なクエリから始めます。
SELECT *FROM Transaction
これにより、タイムスタンプと属性のコレクションを含む多くの結果が返されます。今のところ、必要な結果は 1 つだけなので、 LIMIT 1
を使用して結果を 1 つのレコードに制限できます。
SELECT *FROM TransactionLIMIT 1
重要
LIMIT
が指定されていない場合、クエリは、 SELECT *
クエリの場合は 100 のテーブル行のデフォルトを返し、 FACET
クエリとSELECT (attributes)
クエリの場合は 10 の集計値を返します。LIMIT MAX
を使用して、最大値まで任意の制限を指定できます。
これで、結果のボリュームを制御する方法ができました。しかし、すべての属性が必要ない場合はどうすればよいでしょうか?特定のデータ ポイントのみを表示したい場合はどうすればよいでしょうか。SQL と同様に、 *
を必要な属性の名前に置き換えることで、数文字だけでこれを行うことができます。この場合、トランザクションの名前と所要時間を尋ねることができます。
SELECT name, durationFROM Transaction
これで、イベントのすべてまたは一部の特定の属性を返すことができるクエリと、特定の数のイベントをクエリするクエリを作成できました。次のステップ、つまりデータの集約に取り掛かります。
2.データの集計
場合によっては、個々のデータ ポイントを表示するのではなく、多数のイベントにわたって要約された集計データを表示したい場合があります。 ここがNRDBの強みです。 NRDB は、数十億のイベントをスキャンし、データに関する質問に対して即座にリアルタイムの回答を提供できます。 たとえば、各Transaction
イベントには、呼び出しの実行にかかった秒数を表す期間属性があります。 次のクエリを使用して、すべてのTransaction
イベントの平均継続時間を確認します。
SELECT average(duration) FROM Transaction
NRQL には、イベント データの集計に使用できる多くの組み込み関数があります。一般的に使用される関数には、 max()
、 min()
、 average()
、 median()
、およびpercentile()
が含まれます。次のクエリを使用して、過去 60 分間で最も遅いトランザクションの期間を NRDB に問い合わせることができます。これを行うには、NRDB に max(duration).
SELECT max(duration) FROM Transaction
これで、過去 60 分間で最も遅いカスタマー エクスペリエンスにかかった時間がわかりました。次に、逆数を見つけて、NRDB にmin(duration)
を問い合わせて、最速のエクスペリエンスがどれくらいだったかを確認します。
SELECT min(duration) FROM Transaction
ご覧のとおり、 max()
とmin()
は両方とも重要なデータ ポイントを返します。 しかし、データに対して演算を実行したい場合はどうすればよいでしょうか? sum()
を使用すると、数値属性に対して基本的な加算を行うことができます。 このクエリでは、 databaseCallCount
という新しい属性を使用します。 この属性は、各トランザクションが行うデータベース呼び出しの数をカウントします。 これらを追加すると、デフォルトの 60 分の時間枠内のデータベース呼び出しの総量を取得できます (アプリがデータベースと通信しない場合、これは 0 になります)。
SELECT sum(databaseCallCount) FROM Transaction
最後に、記録されたすべてのトランザクション イベントをcount(*)
でカウントすることもできます。このクエリを使用すると、New Relic APM に報告するすべてのアプリケーションについて、記録されたすべてのイベントをカウントできます。
SELECT count(*) FROM Transaction
データについて多くのことを知ることができるようになりました。パフォーマンスの境界を測定したり、イベント データをグループ化したり、選択した属性に関する情報を計算したりすることもできます。 期間を選択し、 average
、 max
、およびmin
値を計算し、数値属性を追加して、一定期間にわたるすべてのイベントをカウントしました。 このようにデータを操作すると、データを視覚化して表示するときに役立ち、パフォーマンスの問題を特定しやすくなります。 次のステップは、時間範囲の使用です。
3. 時間範囲を使用する
NRDB のすべてのデータにはtimestamp
があり、すべてのクエリは時間範囲内のデータのサブセットで動作します。NRQL クエリで時間範囲を指定しない場合、前に見たようにデフォルトで過去 60 分間が返されます。しかし、異なる時間範囲のデータを表示したい場合はどうすればよいでしょうか?表示されるデータ ウィンドウをどのように制御しますか?これを行うには、 SINCE
およびUNTIL
キーワードを使用してクエリの時間範囲の開始と終了を指定します。
SELECT average(duration) FROM Transaction SINCE 1 day ago
day
、 week
、 hour
、 minute
、またはそれらに相当する複数形などのキーワードを使用して、クエリを作成する時間範囲を指定することもできます。SINCE
今日やSINCE
今週などの論理式を使用することもできます。
SELECT average(duration) FROM Transaction SINCE this week
相対時間範囲を示す別のクエリを次に示します。相対時間を指定する場合は、キーワードago
を含める必要があることに注意してください。
SELECT average(duration) FROM Transaction SINCE 1 week ago UNTIL 2 days ago
データをさらに細かく制御できるようになりました。クエリに時間枠を追加することで、表示するデータ ウィンドウを正確に定義できます。これらのコントロールを使用すると、データ レポートの開始場所と終了場所を定義することで、必要なデータに焦点を当てることができます。また、ウィンドウを選択し、 week
、 day
、 hour
、 minute
、およびそれらの複数形などの一般的な用語を使用しました。次のステップは、時系列のクエリです。
4. 時系列のクエリ
一般的な NRQL の使用例は、値が時間の経過とともにどのように変化するかを照会することです。このタイプのクエリは、折れ線グラフ、面グラフ、およびその他の視覚化用のデータを提供します。いくつかのクエリを実行して、集計関数average()
、 max()
、 min()
、 sum()
、およびcount()
を調査しました。ここで、この例を使用して、集計関数で作成された任意のクエリを取得し、 TIMESERIES
キーワードを追加して時間の経過に伴う値をプロットする方法を確認します。
SELECT average(duration) FROM Transaction SINCE 1 day ago TIMESERIES
時系列クエリは、指定された期間にわたってデータをバケットと呼ばれる複数の領域に分割します。 NRDB にバケットの幅の値を選択させることも、独自の値を選択することもできます。 このクエリを使用して、返されたデータを 1 時間のバケットに整理して、アプリケーション トランザクションの平均期間を NRDB に表示するように要求します。
SELECT average(duration) FROM Transaction SINCE 1 day ago TIMESERIES 1 hour
プロットされる 1 日間の期間にわたって 24 個のデータ ポイントしかないため、より平坦なグラフが返される可能性があることに注意してください。 しかし、可能な限り最大の粒度で確認したい場合はどうすればよいでしょうか? どの時系列クエリでも最大 366 個のデータ バケットを使用できます。つまり、24 時間で可能な最大の粒度は、データを 4 分間のウィンドウにバケット化することです。 TIMESERIES 4 minutes
またはTIMESERIES MAX
を使用してこれをクエリします。
SELECT average(duration) FROM Transaction SINCE 1 day ago TIMESERIES MAX
これで、集計された数値から、時間の経過に伴うデータ傾向の折れ線グラフまで、新しいレベルのデータ視覚化に到達しました。ご覧のとおり、 TIMESERIES
を使用すると、指定したウィンドウでのデータの視覚化、粒度、平均化を完全に制御できます。次のステップは、「Where」句の使用です。
5. WHERE句を使用する
場合によっては、NRDB データの特定のサブセットに対してクエリを実行したい場合があります。たとえば、アプリケーションの平均応答時間を照会する場合、 transactionType
という属性を使用できます。これは、トランザクションがWeb
またはNon-Web
(cron ジョブまたはキュー タスクなど) トランザクションであったかどうかを指定します。この例を使用して、 Web
トランザクション タイプのデータのみを返すクエリを作成します。
SELECT average(duration) FROM Transaction WHERE transactionType='Web' TIMESERIES
また、 AND
とOR
を組み合わせてより複雑なクエリを作成し、括弧(
と)
を使用してこれらの連携方法を制御することもできます。このクエリは、100 ミリ秒よりも高速で、応答コードが 200 または 302 の「Web」トランザクションの平均応答時間を示します。OR
を制御するために括弧を使用していることに注意してください。
SELECT average(duration) FROM Transaction WHERE transactionType='Web' AND duration < 0.1 AND (httpResponseCode=200 OR httpResponseCode=302) TIMESERIES
これまでに作成したすべてのクエリは、指定された時間枠内で利用可能なすべてのデータに対してアクションを実行しました。しかし、不要なデータを除外することも重要です。上記の例は、トランザクションの種類をフィルタリングする場合や、特定の応答コードが発生した場合に役立ちます。同様に、特定のappName
、トランザクションname
、またはデータにタグ付けしたカスタム属性にフィルターをかけることもできます。チュートリアルの最後のステップであるファセット クエリの使用に進みます。
6. クエリをファセット化する
多くの場合、特定の属性でグループ化された "上位 N" の値を特定したいことがあります。NRQL では、 FACET
を使用してこれを行います。たとえば、平均して観測された最も遅いTransaction
呼び出しを、名前別にグループ化してクエリできます。これを「名前によるファセット」と考えてください。
SELECT average(duration) FROM Transaction FACET name SINCE 1 day ago
デフォルトでは、ファセット クエリは上位 10 件の結果を返しますが、 LIMIT
を配置することで返される結果の数をカスタマイズできます。この例では、 TIMESERIES
を使用して、折れ線グラフに表示される上位 5 つの結果を取得します。
SELECT average(duration) FROM Transaction FACET name SINCE 3 hours ago LIMIT 5 TIMESERIES
しかし、折れ線グラフが必要ない場合や、トランザクションのより大きなリストが必要な場合があります。TIMESERIES
を削除すると、棒グラフまたは円グラフを表示でき、 LIMIT
を増やすことでリストの範囲を広げることができます。
SELECT average(duration) FROM Transaction FACET name SINCE 3 hours ago LIMIT 20
最後に、Web トランザクションの量を比較するもう少し複雑なクエリを次に示します。これは、New Relic に報告する個々のアプリケーションごとに分類されています。
SELECT count(*) FROM Transaction WHERE transactionType='Web' FACET appName LIMIT 5 SINCE 6 hours ago TIMESERIES
グループ化または「ファセット」により、データの次元を高めることができます。集計関数を適用する場合、 FACET
を使用して、イベント データを報告するデフォルトまたはカスタムの属性ごとにグループ化できます ( WHERE
句と同様)。結果のデータセットをより直接的に調査できるように、データにカスタム属性を追加するか、新しいカスタム イベントをレポートすることをお勧めします。
おめでとうございます: 最初の NRQL チュートリアルを完了しました!ここまでできれば、NRQL を使用したイベント データのクエリの基本を理解できたことになります。
次は何ですか?
より高度な概念とユースケースをカバーするさらに 3 つのチュートリアルでさらに多くの NRQL を探索できます。最初にデータの処理に関するチュートリアルに進み、次にダッシュボードの高度化に関するチュートリアルに進み、最後に最も高度な NRQL 関数に関するチュートリアルでシリーズを終了することをお勧めします。