独自のデータのコンテキストでサンプル クエリと説明を確認することで、変化率や集計などのより高度な概念を使用してデータを変換する方法をより深く理解できることを願っています。このチュートリアルでは、 NRQL の使用の基礎にある概念に基づいて、より高度な概念を使用して NRQL でデータを制御します。
ケース別のファセット、高度な集計関数、 EXTRAPOLATE
キーワード、集計関数のフィルタリング、値のオーバーライドを使用して、ダッシュボードを進化させる方法を学習します。 具体的には、以下の使用方法を学びます。
filter()
、apdex()
、rate()funnel()
、histogram()
などの高度な集計関数。EXTRAPOLATE
句。FACET CASES()
属性とグループの一致する値の使用方法を含みます。filter()
イベント タイプを結合します。- 必要に応じて値をオーバーライドします。
これらの関数や機能をすべてのダッシュボードで使用できるわけではありませんが、特定の問題や要件に取り組む場合には間違いなく役立ちます。始めましょう!
高度なアグリゲータを使用する
レートの計算
rate()
関数から始めましょう。これにより、時間の経過に伴うイベントの頻度を視覚化できるため、より大きな時間枠内の短い期間におけるイベントの頻度を確認するのに役立ちます。
以下の例では、過去 1 時間の 5 分ごとのリクエストの平均頻度を、前の 1 時間の 5 分間の平均頻度と比較して確認できます。クエリではSINCE 1 hour ago
が使用されていることに注目してください。これは、レートを計算する全体の時間枠です。
SELECT rate(count(*), 5 minutes) FROM Public_APICall SINCE 1 hour ago COMPARE WITH 1 hour ago
rate()
を使用して、時間間隔を 1 分または 1 秒に設定することで、1 分あたりのリクエスト数または 1 秒あたりのリクエスト数を計算できます。
ファネル チャートでエンド ユーザーの行動を理解する
ファネル チャートは、複数のレコードにわたる属性値の出現を追跡し、多くの人がエンド ユーザーの行動を理解するために使用します。これらは、特にカスタム属性を使用する場合に、定義されたパスをユーザーがどのように順調に進んでいるかを視覚化するためによく使用されます。
funnel()
アグリゲータ関数を使用すると、別のページに移動する前に特定のページにアクセスしたユーザーの数を視覚化できます。最初のパラメータは、カウントする一意のエントリの識別属性です。この場合、New Relic はサイト上の各ユーザーにsession ID
属性を割り当てて保持します (Cookie が有効になっていることが条件です)。カスタム属性を使用して独自のセッション ID を設定することもできます。
残りのパラメーターは、ファネルの各ステップの計算方法を決定し、 , WHERE attr OP value
の形式で記述されます。この場合、2 つあります。1 つはホームページにアクセスしたユーザー セッションの数を示し、もう 1 つは他のページに移動したユーザー セッションの数を示します。自分のデータに対してこのようなクエリを試して、何が得られるかを確認してください。
SELECT funnel(awsAPI, WHERE http.url LIKE '%.amazonaws.com', WHERE http.url LIKE '%.us-west%.amazonaws.com') FROM Public_APICall SINCE 1 week ago UNTIL now
アグリゲーターフィルター
filter()
は、単一のクエリで複数のデータ ポイントを集約できる強力なツールで、関数の結果が返すイベントをより詳細に制御できます。この例では、 filter()
を使用して、トランザクション合計、Web トランザクション合計、および非 Web トランザクション合計の個別の値を返します。
SELECT count(*) AS 'All Transactions', filter(count(*), WHERE awsAPI = 'dynamodb') AS 'DynamoDB', filter(count(*), WHERE awsAPI = 'sqs') AS 'SQS' FROM Public_APICall SINCE 1 day ago
数値が返されるため、クエリの結果に対して計算を実行することもできます。 たとえば、合計 API コールをすべての API コールで割ると、そのうちの何パーセントが DynamoDB であったかを確認できます。
SELECT filter(count(*), WHERE awsAPI = 'dynamodb') / count(*) AS 'Percent of APIs that are DynamoDB' FROM Public_APICall SINCE 1 day ago
ヒストグラム
ヒストグラムを使用すると、データの分布をより適切に視覚化できます。これは、単なる平均ではなく、頻度によるデータ ポイントのグループ化を理解するのに役立ちます。histogram()
関数は 3 つの引数を取ります。
プロットする属性 (期間など)。
考慮したい範囲の最大値(1秒以下は「1」など)。
データをグループ化するバケットの数。この例では、0 ~ 1 秒のすべての継続時間値の
histogram()
グラフを作成し、それらを 50 ミリ秒のバケットにグループ化します。これを行うには、バケットの数に「20」を指定します。1 秒を超えるすべての継続時間が最後のバケットにグループ化されます。SELECT histogram(duration, 1, 20)FROM Public_APICallSINCE 1 day ago
Apdex
apdex()
関数は、任意の数値 (期間など) に基づいて Apdex スコアを計算します。カスタム属性値を考慮して、1 つ以上の特定のトランザクションの Apdex を計算できます。アプリケーションの設定を妨げることなく、独自の Apdex-T 値を指定することもできます。この例では、関数に「duration」の属性と 0.01 の Apdex-T 値を指定し、「Apdex of Duration」としてレポートします。
SELECT apdex(duration, 0.1) AS 'Apdex Of Duration' FROM Public_APICall SINCE 1 week ago
TIMESERIES
演算子を追加して、データの経時的なグラフを表示することもできます。これには、Apdex の満足、許容、および不満のしきい値もプロットされていることに注意してください。
SELECT apdex(duration, 0.1) AS 'Apdex Of Duration' FROM Public_APICall SINCE 1 week ago TIMESERIES
これで、 funnel()
とhistogram()
を使用した全く新しい一連のビジュアライゼーションを探索できました。またfilter()
WHERE
句を使用したクエリでより具体的な情報を取得するのにどのように役立つか、またrate()
時間の経過に伴う属性の割合を表示する方法についても学びました。
これらのクエリにより、NRQL 能力がさらに向上します。Apdex は業界標準であり、多くのシナリオに適用されます。ファネルは目的のパスを通じて進行状況を追跡でき、ヒストグラムはデータの明確な分布を視覚化します。最後に、フィルターを使用すると、戻り値を非常に具体的にすることができます。次に、 EXTRAPOLATE
について学びます。
大量のデータには外挿を使用する
New Relic データベース (NRDB) は、毎日大量のデータを超高速で受信して処理します。 APM が大量のイベント データを記録する場合、New Relic エージェントはサンプリング手法を実装して、アプリケーションへの潜在的な影響を軽減しながら意味のあるデータの収集を継続します。 これは通常、アプリケーションまたはサービスの単一のイベントが非常に大量のリクエストを処理する場合にのみ発生します。
負荷分散されたサービスの複数のインスタンスに複数のエージェントが分散している場合は、この制限さえ守らない可能性があります。 このような場合に何ができるかを見てみましょう。 EXTRAPOLATE
演算子は、サンプリングの影響を数学的に補正するように New Relic に指示し、それによってシステム内のアクティビティをより正確に表す結果を返します。 追加の値を保存して、制限を超えて発生した同様のイベントの数を記録することで、統計的に正確な結果を提供できます。
SELECT count(*) FROM Transaction SINCE 60 minutes ago FACET appName TIMESERIES 1 minute EXTRAPOLATE
このままでは限界に達してしまうのではないかと思うかもしれません。クエリからEXTRAPOLATE
を削除して、カウントが変化するかどうかを確認してください。そうでない場合は、制限に達していない可能性があります。
クエリにEXTRAPOLATE
を含めると、報告されたイベントと合計イベントの比率が計算されます。次に、この比率を使用して、サンプリングされていないデータの近似値を推定します。一部のクエリのみがこの使用をサポートしていることに注意してください。サポートしていない、またはサンプリングされたデータを使用していない NRQL クエリに含めても、効果はありません。
スループットなどの均質なデータは、 EXTRAPOLATE
関数を最大限に活用します。 個別のもの ( uniqueCount()
やuniques()
など) の数を推定しようとする場合には、あまり効果がありません。 したがって、 EXTRAPOLATE
、次の集計関数のいずれかを使用する NRQL クエリでのみ機能します。
- apdex
- 平均
- count
- ヒストグラム
- sum
- percentage
- レート
- stddev
EXTRAPOLATE
が完了したら、ファセット ケースの使用に進みましょう。
ファセットケースを使用する
前に学習したように、 FACET
はデータをセグメント化し、異なるグループ化された観点からデータを理解するのに役立ちます (さまざまな応答コードに基づいて平均応答時間を確認するなど)。FACET
を使用すると、NRDB は、指定された属性の値に基づいてデータをグループに編成します。しかし、HTTP 応答コード 200 と 201 など、異なる値をグループ化したい場合はどうなるでしょうか。
FACET CASES()
ファセット バケットを分割する方法を選択できるようにすることで、この問題を解決します。演算子は、 WHERE attr OP value
形式で任意の数のパラメータを受け取ります。以下の例では、「amazon」、「google」、「microsoft」で始まるhttp.url
のすべてのトランザクションをバケットに分類します。また、エラー応答コードなどに対してこれを実行して、可読性を高め、アプリケーションで何が起こっているかを理解しやすくする方法でデータをグループ化することもできます。
SELECT count(*) FROM Public_APICall FACET CASES(WHERE http.url LIKE '%amazon%', WHERE http.url LIKE '%google%', WHERE http.url LIKE '%microsoft%')
ご覧のとおり、これらのグループ化には価値がありますが、読み取るのが難しい場合があります。前のチュートリアルで学んだ内容を使用して、それらをクリーンアップしましょう。
SELECT count(*) FROM Public_APICall FACET CASES(WHERE http.url LIKE '%amazon%' AS 'Amazon', WHERE http.url LIKE '%google%' AS 'Google', WHERE http.url LIKE '%microsoft%' AS 'Microsoft')
FACET CASES()
を使用すると、組み合わせたい異なる値を持つ属性を照合してグループ化できます。この機能には多くの用途があり、トランザクション データにカスタム データをタグ付けするとさらに強力になります。これにより、データのナビゲートとグループ化をより細かく制御できるようになります。次に、今回はイベント タイプごとにフィルタリングを詳しく調べます。
イベントタイプでフィルタリングする
次に、New Relic の顧客のほとんどが気づいていないこと、つまりイベント タイプへのフィルタリングについて調べてみましょう。ここまでは、単一のソースからデータを取得するクエリを作成しました。しかし、2 つの異なるイベント タイプとして保存された 2 つのデータ ポイントをプロットしたい場合はどうすればよいでしょうか?NRDB データのクエリには、単一のイベント タイプに対する制限はなく、カンマで区切ることにより、さまざまなイベント タイプからクエリを実行できます。
SELECT count(*) AS 'Combined Events' FROM NrdbQuery, NrDailyUsage SINCE 1 day ago
これをさらに便利にするために、 eventType()
関数はレコードがどのイベント タイプに由来するかを示します。これを使用してデータ出力を制御できます。この例では、 Transaction
とPageView
のイベントを組み合わせた合計数と、 Transaction
とPageView
のみの合計を確認できます。
SELECT count(*) as 'Combined Events', filter(count(*), WHERE eventType() = 'PageView') as 'Page Views', filter(count(*), WHERE eventType()='Transaction') as 'Transactions' FROM Transaction, PageView SINCE 1 day ago
これをさらに詳しく見てみましょう。 count(*)
は、 Transaction
とPageView
の両方のイベントの合計数を示します。ただし、最近学習したアグリゲータ関数filter()
を使用して、何かユニークなことを行うことができます。クエリにはWHERE eventType()='PageView'
があり、フィルター関数を呼び出して、合計結果セットの一部としてイベント タイプを監視します。次に、フィルタリングして、それらの特定のイベントのみを表示します。TIMESERIES
を追加して、直接比較できる 2 つのデータ ポイントを折れ線グラフで視覚化することもできます。
SELECT count(*) as 'Combined Events', filter(count(*), WHERE eventType() = 'PageView') as 'Page Views', filter(count(*), WHERE eventType()='Transaction') as 'Transactions'FROM TransactionSINCE 1 day ago TIMESERIES max
これで、2 つの異なるイベント タイプからのデータを特定し、返し、グラフ化することができました。 この例は、NRQL を使用して必要なデータを迅速かつ簡潔にナビゲートできる方法を示しています。複雑な結合や結合ステートメントは必要ありません。 次に、オーバーライド値の使用方法を学びます。
値を上書きする
NULL 値のカウント
データが必要な形式でレポートされない場合があります。たとえば、整数が文字列として返されることがありますが、数学を実行するには整数として必要になります。あるいは、 NULL
結果が得られるかもしれませんが、この場合NULL
実際には 0 を意味します。心配しないでください。皆様の声を聞き、この問題を解決するための機能を追加しました。
NULL
属性の値は、すぐに使用できるデータとカスタム データの両方に表示できます。count()
やaverage()
などのアグリゲータを使用すると、NRQL は計算からNULL
値を自動的に削除し、 NULL
値のないイベントに対してのみ関数を実行します。NRQL では、 OR value
句を使用して計算で予期しないNULL
値を考慮できます。たとえば、 cartValue
属性のNULL
値が 0 としてカウントされるようにしたい場合は、クエリでcartValue OR 0
を使用できます。
この例では、「http.url」でcount()
を実行しています。「http.url」の回数のみをカウントします値があります。ただし、クエリにOR 'Null'
を追加すると、「http.url」が含まれるすべてのトランザクションをカウントできます。が存在し、それらもNULL
値です。
SELECT count(duration) AS 'Events With Durations', count(http.url OR 'Null') AS 'Events With and Without URL' FROM Public_APICall SINCE 1 day ago
ダッシュボードの作成を進めるために必要なすべてをほぼ学習しました。次に、強制を使用する方法を学びます。
強制
NRQL は自動的に強制を適用しません。これは、文字列として保存された float を他の文字列と同様に扱い、 sum()
やaverage()
のような数学関数と一緒に使用できないことを意味します。この動作をオーバーライドするには、 boolean()
またはnumeric()
を使用して引数をブール値または数値に変換します。この例では、「duration」のaverage()
関数は、この属性が文字列であるため値を提供しません。ただし、 numeric(duration)
使用して属性を数値に変換すると、 average()
関数を正常に使用できます。
SELECT average(numeric(duration)) AS 'Ensuring stored value is treated as numeric', average(duration) AS 'Non-Converted Attribute' FROM Public_APICall SINCE 1 day ago
もう 1 つの一般的な例は、 BOOLEAN
(TRUE または FALSE) 値で、文字列として誤ってフォーマットされることがよくあります。 これが発生した場合は、ソースがデータを送信する方法を変更して、データを適切なブール値にすることができます。 または、 boolean()
関数を使用することもできます。 以下のクエリ例は同じ結果を返しますが、これはエージェントから送信された値をBOOLEAN
として使用しているためです。 属性が文字列「TRUE」の場合、 boolean()
はそれを適切なブール形式に変換し、クエリを意図したとおりに実行できるようにします。
SELECT count(boolean(sampleDataSet)), count(sampleDataSet) FROM Public_APICall SINCE 24 hours ago
string()
関数を使用して、ブール値と数値を文字列に変換することもできます。数値を浮動小数点数として使用すると、オプションのprecision
引数を使用して文字列の小数点以下の桁数を制限できます。このクエリは、小数点以下 3 桁までに制限された文字列として期間値を返します。
SELECT string(duration, precision: 3) FROM Public_APICall SINCE 24 hours ago
ここでは、データ形式を制御し、NRQL にどのように動作させたいかを指示する権限を提供しました。NRQL は、最も論理的であると思われる方法で動作しますが、それが独自のシナリオに合わない場合は、このレッスンで説明する関数を使用してこれらの値をオーバーライドできます。学ぶべきことは 1 つだけ残っています。それは文字列の連結です。
文字列連結を使用して引数を追加する
場合によっては、属性の戻り値にテキストを追加または先頭に追加する必要がある場合があります。これは、 concat()
関数を使用して実現できます。concat()
関数には最大 20 個の引数を指定して文字列に連結できます。
SELECT concat('The duration of ', http.url, ' is ', duration, ' seconds') FROM Public_APICall
連結された属性の値内の浮動小数点数に使用する小数点以下の桁数を制限できます。これを行うには、オプションのprecision:
引数を最後の値として使用します。この例では、秒を示すために「s」を追加し、値を小数点以下 3 桁に制限します。
SELECT http.url, concat(duration, 's', precision: 3) FROM Public_APICall
http(s)
で始まる値は、クリックして新しいページを開くことができるリンクとして自動的に表示されます。つまり、動的 URL でエンティティに関連するページを開くことができるソリューションへの統合を作成できます。次の例は、属性値によってクエリ パラメーター値を設定する URL の例を示しています。
SELECT http.url, concat('https://www.example.com/?appId=', api, '&error=', error) AS 'URL' FROM Public_APICall
concat()
関数を使用すると、場所の都市と国などの値を組み合わせたり、必要に応じて追加の文字列を先頭または末尾に追加してデータを表示したりできます。
このチュートリアルでは、具体的で強力な NRQL 機能について説明しました。これらのスキルは、次回 NRQL を使用してデータの核心に迫るときに役立ちます。
これで 3 番目の NRQL チュートリアルが完了しました。準備ができたら、このシリーズの次の最後のチュートリアル「 NRQL の高度な関数」でさらに多くの機能を紹介します。