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

この機械翻訳は参考用に提供されます。

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

問題を作成する

高度なNRQL関数を使用する

ここまでは、NRQL の使用の基本、NRQL を使用してデータを制御する方法、NRQL を使用してダッシュボードを拡張する方法を学習しました。この最後のチュートリアル シリーズでは、データから必要なものをすべてクエリできるようにする最も高度な NRQL テクニックを学びます。このチュートリアルでは、追加の集計手法、高レベルの数学関数、正規表現フィルタリングやネストされた集計などの高度な機能について説明します。具体的には、以下の使用方法を学びます。

  • stddev()集計関数、およびbuckets()関数を使用して集計データをグループ化する方法。
  • NRQL 内でデータの平滑化、クランプ、操作を行うための高度な数学関数を使用できます。
  • 特定の期間内のデータ内で利用可能なイベント タイプと属性を検出する方法。
  • RLIKEを使用して正規表現でデータをフィルタリングする方法。
  • ネストされた集計とサブクエリの使用方法。

これらの機能が非常に貴重であることがお分かりいただけると思います。始めましょう!

集計でバケット化を使用する

標準偏差は、一連の値内の変動または分散の量を測定します。低 (平均に近い値) から高 (平均から遠い値) までのスケールが使用されます。stddev()関数を使用すると、平均線の間を調べて、報告された値をより深いレベルで理解できます。この例では、前日と前日のトランザクション応答時間 (「期間」) の標準偏差を比較します。

SELECT stddev(duration)
FROM Transaction
SINCE 24 hours ago
COMPARE WITH 24 hours ago
TIMESERIES

stdvar()関数はstddev()と同様に機能しますが、数値属性の標準分散を返します。

前のレッスンでは、 FACET cases()を使用してデータをバケットの特定の構成にグループ化する方法を学習しました。FACET buckets()を使用して、特定の属性ごとにデータを自動的にバケット化することもできます。この関数は、任意の集計関数のデータのグループ化を簡素化し、次の 3 つの引数を受け取ります。

buckets(attribute, ceiling, number-of-buckets)

  • バケット化する属性。

  • サンプル範囲の最大値 (外れ値は最終バケットに表示されます)。

  • 必要なバケットの総数。

    このクエリ例では、NRQL を使用してトランザクション全体の平均継続時間を見つけます。 ただし、そのパフォーマンスを、特定の量のデータベース呼び出しを行うトランザクションにグループ化します。 したがって、バケット属性をdatabaseCallCountとして指定し、上限を 400 呼び出しに設定し、それを 10 個のバケットにグループ化します。 これにより、0 ~ 40、40 ~ 80、80 ~ 120、120 ~ 160、160 ~ 200、200 ~ 240、240 ~ 280、280 ~ 320、320 ~ 360、および >360 のデータベース呼び出しを行うトランザクションのパフォーマンスが向上します。透明なバケツを天井まで均等に10個。

    SELECT average(duration)
    FROM Transaction
    SINCE 12 hours ago
    FACET buckets(databaseCallCount, 400, 10)

これで、NRQL に現在存在するすべての集計関数を学習したことになります。プロのようにデータを細かく分割できます。NRQL に集約機能が欠けていると思われる場合は、アカウント チームに知らせてください。私たちは、お客様が必要とする可能性のある次のキラー機能を常に探しています。

高度な数学関数を使用する

NRQL は、データを深く理解する必要がある人のために、より高度な数学関数もサポートしています。 これらの関数は、値を X 乗に外挿したり、平方根を見つけたり、クランプを適用して上限と下限を課したり、Y 軸の値を正の値に維持したりすることさえできます。

NRQL には、何らかの方法で値を操作する多くの数学関数があります。この例では、いくつかのデモが同時に行われていることがわかります。

abs(n)関数は n の絶対値を返します。負でない n 値の場合は「n」を返し、負の n 値の場合は正の数「n」を返します。たとえば、 abs(2) = 2、 abs(-4) = 4 です。

floor()ceil() 、およびround()を使用して、10 進数を整数に丸めることもできます。floor()は最も近い整数を切り捨てて返し、 ceil()はその逆を切り上げて返します。round()は双方向であり、最も近い完全な整数に切り上げまたは切り下げられます。

SELECT abs(duration), round(duration), ceil(duration), floor(duration)
FROM Transaction
SINCE 1 day ago

属性にクランプを使用して、その値に上限または下限を課すことができます。これは、極端な外れ値によって時系列グラフのスケールが歪められないようにするなどに使用されます。clamp_max(duration, 10)は期間を返します。ただし、10 を超えない限り、10 を超えた場合は 10 を返します。非常に単純に、10 より大きいものはすべて 10 に等しいものとして返されます。 clamp_min(duration,1)はその逆を行います。いずれかの期間が 1 未満の場合、1 と等しいものとして報告されます。

SELECT clamp_max(average(duration), 10), clamp_min(average(duration), 1)
FROM Transaction
SINCE 1 day ago
TIMESERIES

ここで、多くの人が使用するのが難しいと感じる高度な数学に進むことができます。前と同様に、これらの関数をすべて 1 つのクエリ例で示すことができます。

pow()関数は、最初の引数を 2 番目の引数で累乗します。この例では、期間を 2 乗します。値の平方根が必要な場合は、 sqrt()関数を使用するとすぐにこれを取得できます。そして、 exp()関数はその引数の自然指数関数を計算します。

最後に、NRQL は、多くの同様の関数に対応した対数も提供します。

  • ln(n) は、自然対数:対数ベースeを計算します。

  • log2(n) は、対数(基数 2)を計算します。

  • log10(n) は、対数(基数 10)を計算します。

  • log(n, b) b. 任意の底を使用して対数を計算できます。

    SELECT pow(duration, 2), sqrt(duration), exp(duration), ln(duration), log2(duration)
    FROM Transaction
    SINCE 1 day ago

このレッスンでは、イベント データの平滑化について学びました。round() / ceil() / floor()を使用すると、好きな方法で丸められます。クランプを使用すると、データに境界を設けることができ、対数、平方根、べき乗、指数関数などの高度な数学ツールはすべて、必要に応じてデータを操作するためのさらなる制御を提供します。次に、イベントと属性を検出する方法について学びます。

イベントと属性を検出する

イベントと属性を検出すると、利用可能なデータをクエリする前に質問に答え、自動化を支援できます。この強力なユーティリティを少し見てみましょう。

現在 New Relic アカウントに報告されているすべてのイベント タイプのリストが必要だとします。SHOW EVENT TYPES構文は、指定された期間に報告されたすべてのイベント タイプのリストを返します。これは、NRQL クエリにSELECTFROMが必要ない、まれな例外の 1 つです。この機能は、カスタム イベント データの存在を確認する場合などに使用できます。

SHOW EVENT TYPES
SINCE 1 week ago

特定のイベント タイプで使用できる属性を知る必要がある場合があります。 keyset()関数は、イベント タイプのすべての属性のリストをプロパティ タイプごとにグループ化して提供します。 指定された時間枠内の値を含む属性のみを取得し、データの探索に使用できます。 顧客データが正しくレポートされるようにするなど、自動化にも使用できます。

SELECT keyset()
FROM Transaction
SINCE 1 week ago

これらの機能は、イベントのタイプと属性の変更を検出するのに役立ちます。より多くの DevOps エンジニアがこれらの機能を使用してジョブを完了したり、ジョブを迅速に自動化したりしています。次に、正規表現を使用してデータをフィルターする方法を学習します。

正規表現でフィルタリングする

LIKE提供できるよりも複雑なパターン マッチングを使用してデータをフィルタリングしたい場合があります。RLIKE句を使用すると、正規表現でフィルタリングして、より複雑な照合を行うことができます。

LIKEを使用できるどのシナリオでも、代わりにRLIKEを使用して対応する正規表現を引用符で囲むオプションがあります。 この例には、偶数または子音で終わるすべてのホスト名のリストがあります。

SELECT uniques(host)
FROM Transaction
WHERE host
RLIKE '^.*[02468bcdfghjklmnpqrstvwxyz]'

簡単なマッチングも可能です。 たとえば、特定の文字または単語で始まる値を一致させたい場合。

SELECT count(*)
FROM Transaction
WHERE name
RLIKE 'W.*|O.*'
FACET name

正規表現エンジンは RE2 構文を使用します。文字を削除する必要がある場合は、二重バックスラッシュのエスケープ シーケンスを使用する必要がある場合があります。(例えば\)。

RLIKE本質的にLIKEよりも複雑でパフォーマンスが低いことに注意してください。 LIKEやその他のフィルタリング機能がニーズに合わない場合にのみ使用してください。

正規表現のサポートにより、ほぼ無限のパターン マッチングが可能になります。 すでに正規表現の専門家であれば、これが NRQL にどれほどの力を加えるかを知っているでしょう。 しかし、そうでない場合でも、心配しないでください。 Regex には、オンラインで参照できるリソースが多数あります。 NRQL で正規表現を使用する方法を学習したので、次はネストされた集計の使用です。

ネストされた集計を使用する

NRQL を使用して、クエリを親クエリのFROMとして使用するネストされた集計クエリを作成できます。これにより、次のような質問に答えることができます。

  • 私のアプリケーションは 1 分あたり何件のトランザクションを処理しましたか?また、過去 1 時間の 1 分あたりの最大リクエスト速度はいくらでしたか?
  • すべてのサーバーの平均 CPU 使用率はどれくらいですか? また、90% を超えている特定のサーバーはどれですか?
  • すべてのユーザー セッションのうち、すぐにバウンスした割合は何パーセントですか (つまり、セッション内の PageView は 1 つだけですか)?

これらの各ユースケースをさらに詳しく見てみましょう。

例 1: 過去 1 時間の最大 API 呼び出し数

まず、過去 1 時間の 1 分あたりの API 呼び出し数をカウントできます。これにより、グラフ上に 60 個のデータ ポイントが返されます。

SELECT count(*) AS apicalls
FROM Transaction
TIMESERIES 1 MINUTE

ここで、その期間にわたって報告された最大値を見つけるために、クエリを括弧で囲み、次のようにSELECT ... FROMを使用します。 SELECT z FROM (SELECT x AS z FROM y)

SELECT max(apicalls)
FROM ( SELECT count(*) AS apicalls FROM Public_APICall TIMESERIES 1 minute )

例 2: CPU 負荷が高いサーバー

この例では、 New Relic Infrastructureのデータを使用します。 CPU が平均して特定のパーセンテージを超えているホストのみを表示したい場合があります。 NRQL にaverage(cpuPercent)を要求すると、平均 CPU パーセントが最も高いホストのリストが取得されます。 ただし、単純にWHERE cpuPercent > 90を追加して 90% 以上で実行されているホストのみに制限することはできません。平均を計算する前にデータが削除されてしまうためです。

しかし、ネストされた集計を使用すると、これを解決できます。サブクエリでaverage(cpuPercent)を要求すると、ホストとその平均 CPU のリストが取得されます。これで、外側のクエリで、 > x% ! であった結果のみをフィルタリングできるようになりました。 (ヒント: ホストの CPU で動作するには、このクエリのしきい値を調整する必要がある場合があります。ここでは 20% に設定しています。)

SELECT hostname, cpu
FROM (SELECT average(cpuPercent) AS cpu FROM SystemSample FACET hostname)
WHERE cpu > 20

例 3 - セッションのバウンス

フロントエンド監視の直帰率をどのように計算すればよいか疑問に思う人がよくいます。これは、単一のページを表示し、さらに多くのページにアクセスする前に「バウンス」するセッションを指します。ネストされた集計を使用すると、これを簡単に実現できます。内部クエリはPageViewsをカウントし、セッションごとにグループ化します。外部クエリに渡される結果セットには、すべてのセッションと各セッションが表示されたページ数がリストされます。次に、外側のクエリは、カウントが 1 のセッションの割合を計算します (これは、単一ページしか表示されないため、「バウンスされたセッション」を示します)。

SELECT percentage(count(*), WHERE sessionLength = 1)
FROM (SELECT count(*) AS sessionLength FROM PageView FACET session)

このレッスンでは、クエリを別のクエリのFROMとして使用して、より複雑な質問に答える方法を学習しました。最後に学ぶべきことは 1 つだけです、それはサブクエリの使用方法です。

サブクエリを使用

NRQL のサブクエリはネストされた集計に似ており、別のクエリ内にネストされたクエリを使用できます。サブクエリの場合、ネストされたクエリはSELECTステートメントとWHERE句に入りますが、ネストされた集計はFROM句に入ります。

これらのさまざまなタイプのサブクエリの例をいくつか見てみましょう。

数値条件

数値条件では単一の数値を返す任意のクエリを使用できます。この例では、 WHERE句でサブクエリを使用し、API 呼び出しの継続時間の 97 パーセンタイルの値を返し、その値を超える呼び出しの名前と継続時間を返します。

SELECT http.url, duration
FROM Public_APICall
WHERE duration > (SELECT percentile(duration,97) FROM Public_APICall)

IN条件

サブクエリから複数の値が返される場合は、親クエリにIN条件を使用して各値と比較します。この例では、 entity.guid属性はトランザクション エラーのある一意のエンティティごとにデータを提供し、これがトランザクションのentity.guid値と照合されて、エラーが発生したエンティティの平均期間が決定されます。

SELECT average(duration)
FROM Transaction
WHERE entity.guid
IN (SELECT uniques(entity.guid) FROM TransactionError)
FACET appName
TIMESERIES

SELECT ステートメント内のサブクエリ

サブクエリの結果は、 SELECTステートメントを使用した計算で使用でき、外部クエリとは異なる時間範囲を指定できます。この例では、現在の平均期間と過去 7 日間の平均期間の差分を計算します。

SELECT average(duration) - (SELECT average(duration) FROM Public_APICall SINCE 7 days ago)
FROM Public_APICall
TIMESERIES

サブクエリはデータ探索のための強力なツールであり、さまざまなデータ ソースや時間範囲にわたるより高度なクエリを可能にします。

このチュートリアルが完了しましたこと、おめでとうございます。 追加の集計テクニック、高レベルの数学関数、正規表現フィルタリング、ネストされた集計、サブクエリなどの高度な機能について学習しました。 これまでの 3 つのチュートリアルを完了している場合は、使用できる NRQL のほぼすべての側面を操作したことになります。

NRQL がデータの探索に役立つことを願っています。さらに質問がある場合や問題が発生した場合は、お気軽にNew Relic サポート までお問い合わせください。または、ご希望であれば、オンライン コミュニティであなたの経験を共有することもできます。

Copyright © 2024 New Relic株式会社。

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