翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
式クエリの書き込み
このドキュメントトピックは、Grafana バージョン 10.x をサポートする Grafana ワークスペース向けに設計されています。
Grafana バージョン 9.x をサポートする Grafana ワークスペースについては、「」を参照してくださいGrafana バージョン 9 での作業。
Grafana バージョン 8.x をサポートする Grafana ワークスペースについては、「」を参照してくださいGrafana バージョン 8 での作業。
サーバー側の式を使用すると、数学やその他のオペレーションでクエリから返されるデータを操作できます。式は新しいデータを作成し、データソースから返されるデータを操作しません。
式について
サーバー側の式を使用すると、数学やその他のオペレーションでクエリから返されるデータを操作できます。式は新しいデータを作成し、式のデータを許容できる入力にするためのマイナーデータ再構築を除いて、データソースによって返されるデータを操作しません。
式の使用
式は、Grafana アラート によって最も一般的に使用されます。処理はサーバー側で行われるため、式はブラウザセッションなしで動作できます。ただし、式はバックエンドのデータソースやビジュアライゼーションでも使用できます。
注記
式はレガシーダッシュボードアラートでは機能しません。
式は、さまざまなデータソースからのクエリを組み合わせて有効にするか、データソースで使用できないオペレーションを提供することで、データソースを強化することを目的としています。
注記
可能であれば、データソース内でデータ処理を行う必要があります。ストレージから Grafana サーバーにデータをコピーして処理することは非効率的であるため、式は軽量データ処理を対象としています。
式は、時系列または数値データを返すデータソースクエリで機能します。また、多次元データ でも動作します。例えば、複数のシリーズを返すクエリで、各シリーズがラベルまたはタグによって識別されます。
個々の式は、1 つ以上のクエリまたは他の式を入力として受け取り、結果にデータを追加します。個々の式またはクエリはそれぞれ、RefID と呼ばれる名前付き識別子である変数 (デフォルト文字A
または などB
) で表されます。
個々の式または別の式のデータソースクエリの出力を参照するには、この識別子を変数として使用します。
式のタイプ
式は 2 種類のデータで機能します。
-
時系列のコレクション。
-
数値のコレクション。各数値は項目です。
各コレクションは、単一のデータソースクエリまたは式から返され、RefID で表されます。各コレクションはセットであり、セット内の各項目は、ラベルまたはキーと値のペアとして保存されるディメンションによって一意に識別されます。
データソースクエリ
サーバー側の式は、バックエンドデータソースのデータソースクエリのみをサポートします。データは一般的に、時系列データにラベル付けされていると見なされます。
データソースクエリは、式とともに使用すると、式エンジンによって実行されます。これを行うと、データは 1 つの時系列またはデータフレームごとに 1 つの数値に再構成されます。例えば、テーブルビューの 1 つのフレームで複数のシリーズを返すデータソースを使用する場合、式で実行すると異なるように見えることがあります。
現在、データフレームを使用する場合にサポートされる時系列以外の形式 (数値) は、時間なしのデータフレーム、文字列列、および 1 つの数値列を返すテーブルレスポンスのみです。
次の例の表は、式で動作する数値を生成します。文字列列はラベルになり、数値列は対応する値になります。例えば、値が 1 {"Loc": "MIA", "Host": "A"}
の場合です。
Loc | ホスト | 平均 CPU |
---|---|---|
MIA |
A |
1 |
NYC |
B |
2 |
オペレーション
式では、数学、削減、再サンプリングのオペレーションを使用できます。
数学
Math は、時系列または数値データの自由形式の数式用です。数学オペレーションでは、数値と時系列を入力として受け取り、それらを異なる数値と時系列に変更します。
他のクエリまたは式からのデータは、ドル記号のプレフィックスが付いた RefID で参照されます$A
。例えば、。変数の名前にスペースが含まれている場合は、 のような中括弧構文を使用できます${my variable}
。
数値定数は、10 進数 (2.24
)、8 進数 ( のように先頭に 0 を付ける072
)、または 16 進数 ( のように先頭に 0x を付ける) にすることができます0x2A
。指数と記号もサポートされています (例: -0.8e-2
)。
演算子
算術 (+
、バイナリおよび単項 -
、、*
/
%
、、指数 **
)、リレーショナル (<
、>
、、==
、<=
)!=
>=
、論理 (&&
、||
、および単項 !
) 演算子がサポートされています。
データに対するオペレーションの動作は、数値データか時系列データかによって異なります。
$A + $B
や などのバイナリオペレーションでは$A || $B
、データの種類に応じて以下の方法で演算子が適用されます。
-
$A
と の両方$B
が数値の場合、オペレーションは 2 つの数値の間で実行されます。 -
1 つの変数が数値で、もう 1 つの変数が時系列の場合、時系列の各ポイントの値と数値の間のオペレーションが実行されます。
-
$A
と の両方$B
が時系列データである場合、2 つのシリーズ内の各値間のオペレーションは、$A
と の両方に存在するタイムスタンプごとに実行されます$B
。Resample
オペレーションを使用して、タイムスタンプをラインアップできます。
概要:
-
数値 <Operation> number = number
-
数値 <Operation> シリーズ = シリーズ
-
シリーズ <Operation> シリーズ = シリーズ
式は 1 つの変数で表される複数のシリーズまたは数値で動作するため、バイナリオペレーションは 2 つの変数間の結合 (結合) も実行します。これは、個々のシリーズまたは番号に関連付けられた識別ラベルに基づいて行われます。
したがって、 {host=web01}
に のようなラベルを持つ数値$A
と、同じラベル$B
を持つ に別の数値がある場合、各変数内のこれら 2 つの項目間でオペレーションが実行され、結果は同じラベルを共有します。このユニオンの動作のルールは次のとおりです。
-
ラベルのない項目は、すべてに結合されます。
-
$A
と の両方$B
に 1 つの項目 (1 つのシリーズ、または 1 つの数値) しか含まれていない場合、それらは結合されます。 -
ラベルが完全に一致すると、結合されます。
-
ラベルが他の項目のサブセットである場合、例えば、 の項目
$A
にはラベルが付けられ{host=A,dc=MIA}
、 の項目にはラベル$B
が付けられ{host=A}
、結合されます。 -
などの変数内に項目ごとに異なるタグキー
$A
がある場合、結合動作は未定義です。
リレーショナル演算子と論理演算子は、true の場合は false 1 に対して 0 を返します。
数学関数
ほとんどの関数は独自の式オペレーションに存在しますが、数学オペレーションには数学演算子や記号に似た関数がいくつかあります。関数が数値またはシリーズのいずれかを取ることができる場合、引数と同じ型が返されます。シリーズの場合、シリーズ内の各ポイントの値に対して実行される のオペレーション。
abs
abs は、引数の絶対値を返します。これは、数値またはシリーズです。たとえば、abs(-1)
、abs($A)
などです。
is_inf
is_inf は数値またはシリーズを受け取り、Inf
値 (負または正) 1
の場合は を返し、他の値0
の場合は を返します。例えば「is_inf($A)
」のようにです。
注記
例えば、負の無限大を具体的に確認する必要がある場合は、 のような比較を行うことができます$A == infn()
。
is_nan
is_nan は数値またはシリーズを受け取り、NaN
値1
の場合は を返し、他の値0
の場合は を返します。例えば「is_nan($A)
」のようにです。が と等しくないためNaN
、このチェックにはこの関数が必要ですNaN
。
is_null
is_null は数値またはシリーズを受け取り、null
値1
の場合は を返し、他の値0
の場合は を返します。例えば「is_null($A)
」のようにです。
is_number
is_number は数値またはシリーズを受け取り、1
すべての実数値と他の値 (null
、、Inf+
、Inf-
) 0
に対して を返しますNaN
。例えば「is_number($A)
」のようにです。
ログ
ログは、数値またはシリーズである引数の自然対数を返します。値が 0 未満の場合、 NaN
が返されます。たとえば、log(-1)
、log($A)
などです。
inf、infn、nan、null
inf、infn、nan、null 関数はすべて名前の単一の値を返します。これらは主にテスト用です。例えば、null()
などです。
round
丸めは、丸められた整数値を返します。例えば、round(3.123)
、round($A)
などです。
ceil
Ceil は、数値を最も近い整数値に切り上げます。たとえば、ceil(3.123)
は 4
を返します。
floor
下限は、数値を最も近い整数値に切り下げます。例えば、floor(3.123
) は を返します3
。
削減
Reduce は、クエリまたは式から返された 1 つ以上の時系列を受け取り、各シリーズを 1 つの数値に変換します。時系列のラベルは、出力される各数値のラベルとして保持されます。
フィールド:
-
関数 — 使用する削減関数
-
入力 – 再サンプリングする変数 (refID ( など
A
)) -
モード – シリーズに数値以外の値 (null、NaN、+-Inf) が含まれている場合、リダクション関数の制御動作を許可します。
削減関数
Count (カウント)
カウントは、各シリーズのポイントの数を返します。
平均値
平均は、各シリーズのすべての値の合計をそのシリーズのポイント数で割った値を返します。strict
モードで、シリーズ内のいずれかの値が null または nan の場合、またはシリーズが空の場合、NaN が返されます。
最小と最大
Min と Max は、シリーズ内の最小値または最大値をそれぞれ返します。strict
モードで、シリーズ内のいずれかの値が null または nan の場合、またはシリーズが空の場合、NaN が返されます。
合計
Sum は、シリーズ内のすべての値の合計を返します。シリーズの長さがゼロの場合、合計は 0 になります。strict
モードで、シリーズに NaN 値または Null 値がある場合、NaN が返されます。
最終
Last は、シリーズ内の最後の数値を返します。シリーズに値がない場合、 は NaN を返します。
削減モード
厳密
Strict モードでは、入力シリーズがそのまま処理されます。シリーズ内のいずれかの値が数値以外の場合 (null、NaN、または +-Inf)NaN が返されます。
非数値の削除
このモードでは、入力シリーズ内のすべての非数値 (null、NaN、または +-Inf) が除外されてから、リダクション関数が実行されます。
数値以外の を置き換える
このモードでは、数値以外の値はすべて事前定義された値に置き換えられます。
再サンプリング
再サンプリングでは、各時系列のタイムスタンプが一定の時間間隔になるように変更されます。主なユースケースは、同じタイムスタンプを共有しない時系列を再サンプリングして、それらの間で数学を実行できるようにするためです。これは、2 つのシリーズをそれぞれ再サンプリングし、再サンプリングされた変数を参照する数学オペレーションで実行できます。
フィールド:
-
入力 – 再サンプリングする時系列データの変数 (refID (
A
など)) -
再サンプリング先 — 再サンプリング先の期間。例:
10s
。単位は、秒s
、m
分、h
時間、d
日、w
週、年y
です。 -
ダウンサンプリング — ウィンドウサンプルごとに複数のデータポイントがある場合に使用する削減関数。動作の詳細については、「縮小オペレーション」を参照してください。
-
Upsample – データポイントがないウィンドウサンプルを埋めるために使用するメソッド。
-
パッドが最後のナレッジ値で埋められる
-
次の既知の値でバックフィルする
-
fillna で空のサンプルウィンドウを埋める NaNs
-
式を記述する
データソースがそれらをサポートしている場合、Grafana は式ボタンを表示し、クエリエディタリストに既存の式を表示します。
式を記述するには
-
パネルを開きます。
-
クエリの下で、式 を選択します。
-
オペレーション フィールドで、書き込む式のタイプを選択します。
-
式を記述します。
-
[適用] を選択します。
特殊なケース
クエリされたデータソースがシリーズまたは数値を返さない場合、式エンジンは を返しますNoData
。例えば、リクエストに式によってマージされた 2 つのデータソースクエリが含まれている場合、 NoData
が少なくとも 1 つのデータソースクエリによって返された場合、クエリ全体で返される結果は になりますNoData
。Grafana アラートがNoData
結果を処理する方法の詳細については、「」を参照してくださいGrafana マネージドアラートルールを設定する。
複数のクエリで式を使用する場合、式エンジンでは、すべてのクエリが同じタイムスタンプを返す必要があります。例えば、数学を使用して、それぞれが を使用する複数の SQL クエリの結果を結合する場合SELECT NOW() AS "time"
、式はすべてのクエリが同じタイムスタンプNOW()
に評価される場合にのみ機能しますが、必ずしも発生するわけではありません。これを解決するには、 を などの任意の時刻SELECT 1 AS "time"
、またはその他の有効な UNIX タイムスタンプNOW()
に置き換えます。