• /
  • EnglishEspañol日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は、参考として提供されています。

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、このページを参照してください。

問題を作成する

NRQL でデータを制御する

最初の NRQL チュートリアルでは、クエリ構築の基礎を学びました。基本的なクエリ構造、時間枠の定義、観察する特定の属性を選択する方法について説明しました。また、グラフやその他の視覚化を使用してデータの集計と表示を開始する方法も学びました。

このチュートリアルでは、さらに深く掘り下げて、有用な集計を作成するための関数をさらに検討していきます。ここでは、返されたデータを以前の期間と比較し、データを特定の時間枠にグループ化する方法を学習します。また、 SINCEUNTIL機能をさらに活用したり、フィルタでのワイルドカードの使用について調べたりすることもできます。具体的には、次の方法を学びます。

  • を使用して一意の値をクエリします。 uniques(attributeName)
  • 次を使用して、属性内に存在する一意の値の数を確認します。 uniqueCount(attributeName)
  • 特定の時間枠内でearliest(attributeName)latest(attributeName)を取得します
  • 修飾子またはその他のデータ ポイントに基づいてパーセンテージを計算します。 percentile()
  • 属性と集計関数、または両方の組み合わせを使用して基本的な計算を実行します。
  • 属性名をカスタムで読みやすいものにキャストします
  • LIKEまたはNOT LIKEのワイルドカードを使用して含める/除外する検索、または結果をリストINまたはリストNOT INに限定する
  • 日付、エポック、および WITH TIMEZONE
  • 時間ベースのコホートを使用して、データを興味深い時間枠にグループ化します。

それでは始めましょう。

集計関数

最初の NRQL チュートリアルを完了すると、 count()average()sum()max()min()を使用してデータを意味のある方法で変換できるようになります。 しかし、ユニークな値を見つけて数えたい場合はどうすればよいでしょうか? 指定された期間にわたってプロパティに記録された固有値の数を見つけるには、 uniqueCount()関数を使用できます。 検査したい属性を引数として指定するだけで済みます。 とりあえず、一意のパブリックAPIコールをすべて表示するコードを次に示します。

SELECT uniqueCount(http.url)
FROM Public_APICall
SINCE 1 day ago
A screenshot displaying a query for aggregating functions

クエリのパフォーマンスを最適化するために、上記の関数は 256 を超える一意の値を検査するクエリのおおよその結果を返します。指定された時間範囲における属性の一意の値の実際のリストを返すには、 uniques()関数を使用できます。

SELECT uniques(http.url)
FROM Public_APICall
SINCE 1 day ago

2 番目の制限パラメータを指定して、デフォルトの 1,000 とは異なる制限値を指定する場合。これを行うには、 uniques(attribute[,limit])を使用します。これにより、制限が最大 10,000 までの任意の値に変更されます。

指定した時間範囲における属性の最新の値を取得するには、 latest()関数を使用します。このサンプル クエリでは、過去 1 日の API 呼び出しの最新の応答時間を見つけることができます。これは、断続的にレポートされるトランザクションまたはサービスの最新の値を見つけるのに役立ちます。

SELECT latest(duration)
FROM Public_APICall
WHERE awsAPI = 'sqs'
SINCE 1 day ago
A screenshot displaying a query for aggregating using the latest function

逆に、 earliest()関数を使用すると、その逆のことを実現できます。指定された時間範囲内に記録された属性の最も古い値を返します。このサンプル クエリでは、過去 1 日の API 呼び出しの最も早い応答時間を取得できます。データが一貫してレポートされている場合、過去 24 時間の最も古いイベントのデータ ポイントがレポートされます。

SELECT earliest(duration)
FROM Public_APICall
WHERE awsAPI = 'sqs'
SINCE 1 day ago
A screenshot displaying a query for aggregating using the earliest function

数、合計、平均ではなくパーセンテージが必要な場合があります。percentage()関数を使用すると、指定した条件に一致するデータセット内の値の割合を計算できます。この関数は 2 つの引数を取ります。1 つ目は、目的の属性の集計関数 ( count()など) です。2 番目は、クエリするデータのサブセットを指定するためのWHERE条件です。

このサンプル クエリでは、過去 1 日の期間 (または応答時間) が 100 ミリ秒を超えた API 呼び出しの割合を見つけることができます。

SELECT percentage(count(*), WHERE duration > 0.1)
FROM Public_APICall
SINCE 1 day ago
A screenshot displaying a query for aggregating using the where condition

アプリケーションのパフォーマンスや顧客エクスペリエンスのデータを、平均ではなくパーセンタイルを使用して表示するのが非常に一般的です。percentile()関数を使用すると、n 番目のパーセンタイルのエクスペリエンスを理解できます。

たとえば、過去 1 日の顧客エクスペリエンスの 98% のうち、最悪のエクスペリエンス (最長期間) を知りたいとします。過去 24 時間から NRDB にpercentile(duration, 98)を要求できます。

SELECT percentile(duration,98)
FROM Public_APICall
SINCE 1 day ago
A screenshot displaying a query for aggregating using the percentile duration function

ご覧のとおり、集約は強力な方法でデータを操作できます。uniqueCount()を使用すると、特定の属性の一意のエントリをカウントできます。ただし、これを使用して、一意のマシン、レポートコンテナの数、または New Relic に送信されるカスタム データ ポイントの数を特定することもできます。また、クエリに使用できる一意の値を知りたい場合は、いつでもuniques()を使用してリストを要求できます。

latest()関数とearliest()関数は、スパース データを処理する場合や、レポートの開始または停止を調査する場合に特に役立ちます (New Relic がまだデータを保存していると仮定)。 percentage()関数を使用すると、結果セット全体と比較して、修飾子に一致したイベントの割合を表示できます。 最後に、すべてのエンドユーザー トランザクションの 90% が指定された期間を超えるように目標を設定することで、 percentile()主要業績評価指標として使用できます。

次のステップでは、NRQL を使用して基本的な数学を実行する方法を学びます。

算術演算子を使用する

NRQL は基本的な数学演算子をサポートします。数値属性値と集計関数の結果の両方に対して、加算 ( + )、減算 ( - )、乗算 ( * )、および除算 ( / ) を実行できます。

たとえば、トランザクション イベントを記録するときに、合計応答時間 ( durationとして) とデータベース応答時間 ( databaseDurationとして) の両方をキャプチャします。しかし、データベース処理以外に費やされる平均時間を知りたい場合はどうすればよいでしょうか?このようなクエリを使用して、データ セット内の各イベントの値を計算することから始めることができます。

SELECT GigabytesIngestedBillable - GigabytesIngestedFree, metric
FROM NrMTDConsumption
WHERE productLine IS NOT NULL

素晴らしい!基本的な計算を実行しました。これは、個々のイベントをリストするのに役立ちます。しかし、データベース時間を使わずにトランザクションの平均継続時間を知りたい場合はどうすればよいでしょうか?便利なことに、関数内で算術演算を行うことができます。

SELECT average(GigabytesIngestedBillable - GigabytesIngestedFree)
FROM NrMTDConsumption
WHERE GigabytesIngestedBillable IS NOT NULL

さて、同じクエリ内で減算、除算、乗算をさらに複雑にして、データベース時間を除いた時間を全体時間のパーセンテージとして計算したい場合はどうすればよいでしょうか?さて、次の計算を追加できます。

SELECT average(GigabytesIngestedBillable - GigabytesIngestedFree) / unitPrice * 100
FROM NrMTDConsumption
WHERE GigabytesIngestedBillable IS NOT NULL

New Relic はイベントの一部としてタイミングをレポートするため、それらを使用して意味のあるデータ ポイントを計算したり、パーセンテージの結果を生成したりすることもできます。カスタム アクションやイベントのタイミングを調整したり、カスタム データを送信したりすることで、基本的な数学の力をさらに最大限に活用できます。たとえば、注文サイズと支払い方法に関するデータをレポートする電子商取引プラットフォームは、数学を使用して、注文のコンバージョン率と個別の顧客訪問数などを計算できます。

次のステップでは、NRQL を使用して属性にラベルを付ける方法を学習します。

ラベルの属性

より複雑な NRQL 関数を実行し始めると、特に NRQL を知らない人にとって、クエリ属性に表示される名前をもっと便利にできないか疑問に思うかもしれません。前のチュートリアルで学んだ内容を使用した例を考えてみましょう。

SELECT average(duration-externalDuration)
FROM Transaction

関数または属性の後にAS句を使用すると、結果に読みやすく意味のある名前を付けることができます。これにより、あなたとあなたのチームは、グラフが何を表しているのかを正確に理解しやすくなります。

SELECT average(duration-externalDuration)
AS 'Non-External Response Time'
FROM Transaction

これは単なる見た目の美しさのように思えるかもしれませんが、詳細なダッシュボードを構築するときは、データに明確にラベルを付けることが重要です。 これにより、ウィジェット、看板、折れ線グラフ、または表を閲覧する人にとって曖昧さがなくなります。

これについては、今後のグループ化に関するレッスンで再度参照し、より高度なシナリオでもASクリーンな結果セットを作成する方法を検討します。次に、さまざまな時間枠でデータを比較する方法を学びます。

時間枠を比較する

ここまでで、 SINCEUNTIL句で時間範囲を使用する練習をしました。しかし、異なる時間範囲の値を比較したい場合はどうすればよいでしょうか?これは、 COMPARE WITH句を使用して実現できます。

NRQL は、 SINCEUNTILを使用して対象期間を定義します。次に、相対オフセット値を含むCOMPARE WITH [time period] AGO句を使用して、比較する期間を指定できます。

たとえば、以下のサンプル クエリでは、1 週間前の相対オフセットを使用して、前日のデータと前の週のデータを比較できます。

SELECT average(duration)
FROM Public_APICall
SINCE 1 day ago
COMPARE WITH 1 week ago
A screenshot displaying a query using the compare with function

時間の経過に伴う値の比較をマッピングするには、 TIMESERIESを追加します。これにより、比較の折れ線グラフが作成され、この期間が最近のデータとどのように比較されるかを視覚化し、長期にわたって追跡できるようになります。

SELECT average(duration)
FROM Public_APICall
SINCE 1 day ago
COMPARE WITH 1 week ago
TIMESERIES
A screenshot displaying a query using the compare with function using a time series

UNTILと同様に、同じ形式でさまざまな相対期間を指定することもできます。たとえば、 4 WEEKS AGOまたは6 HOURS AGOを指定できます。

SELECT average(duration)
FROM Public_APICall
SINCE 1 hour ago
COMPARE WITH 6 hours ago
TIMESERIES
A screenshot displaying a query using the compare with function using a relative time series

比較すると、アプリケーションで何が起こっているかに関する質問にすぐに答えることができます。さまざまな売上、パフォーマンス、MTTR、エラー値は先週と比較して増加していますか?また、問題を調査している場合は、問題のあるパフォーマンスの期間と通常のパフォーマンスの期間を比較すると便利です。

ワイルドカードフィルターを使用する

これで、 WHERE句を使用してクエリの結果をフィルタリングする方法がわかりました。標準の比較演算子を使用する以外に、属性に指定された部分文字列が含まれているかどうかを確認する場合は、 LIKENOT LIKEを使用することもできます。これを実現するには、文字列内の任意の場所でパーセント ( % ) 記号をワイルドカードとして使用できます。

このサンプル クエリでは、名前の任意の場所 (先頭、中間、または末尾) に「amazonaws」という用語が含まれるトランザクションの数を取得できます。

SELECT count(*)
FROM Public_APICall
WHERE http.url
LIKE '%amazonaws%'
FACET http.url
SINCE 1 day ago
A screenshot displaying a query using a wildcard filter

代わりにNOT LIKEを使用するようにクエリを変更すると、選択した単語 (以下の「google」など) が名前に含まれないトランザクションの数が取得されます。

SELECT count(*)
FROM Public_APICall
WHERE http.url NOT
LIKE '%google%'
FACET http.url
SINCE 1 day ago
A screenshot displaying a query using a Not like filter

最初と最後にワイルドカードとして%を使用できます。つまり、テキスト内のどこかに「Web」などの用語が含まれているかどうか、選択した属性の値が New Relic によってチェックされます。同様に、 %WebまたはWeb%を使用して、それぞれ「Web」で終わるか「Web」で始まるものと一致させることができます。

より絞り込んだ検索を行うために、文字列の間にワイルドカードを追加することもできます。このクエリは、「amazon」という単語の後に任意のテキストが続き、その後に「.com」という単語も含まれるトランザクション名をチェックします。その後に任意の数の文字が続きます。したがって、結果は名前に「amazon」と「.com」が含まれるトランザクションのみになります。

SELECT count(*)
FROM Public_APICall
WHERE http.url NOT
LIKE '%amazon%.com'
FACET http.url
SINCE 1 day ago
A screenshot displaying a query using a % filter

極端な特異性が必要で、ワイルドカードを使用して一致できる共通の文字列が名前にない場合はどうすればよいでしょうか?IN演算子とNOT IN演算子を使用すると、属性に対してチェックする値のセットを指定できます。AND演算子またはOR演算子を使用して複数のWHERE句を指定する代わりに、括弧内の値をカンマで区切ってリストすることで条件を簡素化できます。

このサンプル クエリでは、サブタイプが「graph.microsoft.com」または「s3.amazonaws.com」であるトランザクションの数をカウントできます。代わりにNOT INを使用するようにクエリを変更すると、サブタイプが "graph.microsoft.com" ではないトランザクションの数が取得されます。「s3.amazonaws.com」でもありません。

SELECT count(*)
FROM Public_APICall
WHERE http.url IN ('graph.microsoft.com', 's3.amazonaws.com')
SINCE 1 day ago
A screenshot displaying a query using an In filter

データを制御し、必要な操作を行うことができるようになり、強力で意味のあるダッシュボードやアラートを構築できるようになります。次に、NRQL を使用して時間範囲を指定する方法を学びます。

時間範囲を指定する

SINCEUNTIL句は、相対的な時間範囲に関する情報を提供するだけではなく、特定の日付や時刻を指定することもできます。次のサンプル クエリでは、 SINCE日付をYYYY-MM-DD形式で使用できます。

SELECT average(duration)
FROM Public_APICall SINCE '2023-10-28'
TIMESERIES MAX
A screenshot displaying a time range using since

これを使用して、指定した期間の SLA レポートを作成できます。YYYY-MM-DD HH:MMの形式で特定の時刻を含めることもできます。このクエリでは、データが午後 6 時に設定されていることがわかります。

SELECT average(duration)
FROM Public_APICall SINCE '2023-10-28 18:00'
TIMESERIES MAX
A screenshot displaying a specific time range using YYYY-MM-DD HH:MM

場合によっては、イベント時間をエポック (UNIX) 時間で受け取ることがあります。 便利なことに、 SINCE句とUNTIL句でエポック タイムスタンプを使用できるので、これらの値を手動で別の日付形式に変換する必要がありません。

SELECT average(duration)
FROM Public_APICall SINCE 1698525489519 UNTIL 1698698289519
TIMESERIES MAX
A screenshot displaying a specific time range using unix

NRDB は、一定期間にわたるデータを表示する場合、ユーザーがタイムゾーンの観点からデータを表示することを想定しています。しかし、国際チームが分散している場合、チームメイトの所在地に応じて、あなたの今日が明日、あるいは昨日になる可能性があります。WITH TIMEZONE句を使用して、データを表示するタイムゾーンを定義できます。これは、 SINCEUNTIL句の値の解釈に影響します。

以下の 2 つのグラフの例を考えてみましょう。各クエリには、 WITH TIMEZONEを使用して指定されたタイムゾーンがあります。両者の時差は8時間です。データのパターンは同じですが、それぞれのタイムゾーンに合わせて 8 時間オフセットしていることに注目してください。

SELECT count(*)
FROM Public_APICall
SINCE yesterday
UNTIL today WITH TIMEZONE 'America/Los_Angeles'
TIMESERIES
A screenshot displaying a specific time range using with timezone
SELECT count(*)
FROM Public_APICall
SINCE yesterday
UNTIL today WITH TIMEZONE 'Europe/London'
TIMESERIES
A screenshot displaying a specific time range using with the Europe/London timezone

このレッスンが始まるまでは、時間制御メカニズムはすべて、今からの相対時間に依存していました。これで、世界の誰かの位置に応じてビューを調整できるようになりました。おそらく、アメリカ東海岸の顧客が西海岸にあるエンジニアリング チームに問題を報告するとします。チームはダッシュボードを構築し、顧客が引用するタイムゾーンにマップするようにビューを変換できます。そのため、顧客が東海岸の午前 9 時に問題についてアドバイスした場合、午前 9 時にその違いを頭の中で解釈する必要がないことを確認できます。

インシデントの特定の日付にデータを集中させる必要があり、現在時刻に対して移動する時間枠を使用せずにデータを調査したい場合、これは静的な時間枠でデータを取得するのに役立ちます。次の最後のレッスンでは、時間ベースのコホーティングを使用してレポートに時間を使用する方法を引き続き学習します。

時間ベースのコホートの使用

複雑に聞こえるかもしれませんが、時間ベースのコホートは、単にデータをminuteOfhourOfweekOfなどの時間ベースのグループに整理する方法を意味します。

期間にSINCE句を使用すると、クエリされた時間全体の長さを取得します。しかし、そのデータが常にすべてを物語っているとは限りません。一定期間内のパフォーマンスをより詳しく分析する必要がある場合はどうすればよいでしょうか?時間ベースのコホートを使用すると、データをさらに論理的な時間ベースのグループに分類できます。

FACETと多くの時間ベースの関数 ( hourOf(timestamp)など) の 1 つを組み合わせて使用すると、1 週間分のデータを取得し、発生した特定の時間に基づいてパフォーマンスを把握できます。これにより傾向が明らかになり、アプリケーションにとって最もクリティカルな時期が特定されます。

SELECT average(duration)
FROM Public_APICall
FACET hourOf(timestamp)
SINCE 1 week ago
A screenshot displaying the use of time-based cohorting using Facet and hour of functions

上記のクエリを実行すると、時間帯に基づいて最も遅い応答時間がわかります。New Relic は、時間に基づいてファセットするためのさまざまなオプションを提供します。前の例では時間ごとにグループ化していますが、曜日ごとにグループ化して、応答時間が最も良い日と最も悪い日を特定することもできます。

SELECT average(duration)
FROM Public_APICall
FACET weekdayOf(timestamp)
SINCE 1 week ago
A screenshot displaying the use of time-based cohorting using Facet and weekday of functions

特定の日のアプリケーションの最も遅い期間を確認できるようになりました。これを使用して、「製品が最も多く売れるのはいつですか?」などのビジネスクリティカルな質問に答えることができます。または「サインアップまたはログインが最も多いのはいつですか?」

結果を特定の日付でグループ化することもできます。これは、SLA レポートを検討する場合や、一定期間のパフォーマンスの変化を分析する場合に役立ちます。

SELECT average(duration)
FROM Public_APICall
FACET dateOf(timestamp)
SINCE 1 week ago
A screenshot displaying the use of time-based cohorting using Facet and ate of functions

時間ベースのコホートにより、特定の分、時間、日、または週に発生する問題が明らかになります。 New Relic に送信するデータに関係なく、NRQL を使用すると、必要に応じてデータをスライス、ダイス、整理、視覚化できます。

データ保持に応じて、週、月、年など、グループ化に使用できる他のオプションも多数あります。完全なリストを確認するには、 「グループ結果の期間別ドキュメント ページ」にアクセスしてください。

次は何ですか?

ここで得た知識を利用して、ダッシュボードの視覚化を作成し、データの最も関心のある側面を制御できます。これらの強力なテクニックを使用して、より詳細で特定のアラートに焦点を絞り、より興味深い視覚化を作成できます。準備ができたら、 3 番目のチュートリアルに進むことができます。ここでは、フィルター、ファセット ケース、ヒストグラム、apdex、eventType へのフィルター処理、値のオーバーライド、外挿など、さらに興味深い NRQL スキルを学びます。

Copyright © 2024 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.