Expression 機能は、既存の Query を加工して新しい Query を作成する機能です。
利用できる加工方法は以下のとおりです。なお、加工方法によって、データの個数が変わります。
加工方法 | 説明 | データの個数 |
---|---|---|
Math | 既存の Query に対して、四則演算 (+ 、- 、* 、/ ) や関数 (abs() 、log() など) を利用して、新しい Query を作成します。利用できる関数については、 をクリックしてください。 | 計算に利用した Query と同じ個数 |
Reduce | 既存の Query の Dashboard で表示する時間範囲 または Panel ごとに表示する時間範囲 における最小値などを、新しい Query として作成します。最小値、最大値、平均値、合計値、データ数、最終値を利用できます。 | 1 個 |
Resample | 既存の Query を任意の時間間隔 (例: 10 分) で再集計して、新しい Query として作成します。再集計する方法は、最小値、最大値、平均、合計から選択できます。値が存在しない場合に補うこともできます。 | 指定した時間によって個数が異なる |
Classic condition | 条件を満たす場合に 1 になり、条件を満たさない場合に 0 になる新しい Query を作成します。 | 1 個 |
Threshold | 値が指定した値、または範囲に含まれる場合に 1 になり、そうでない場合に 0 になる新しい Query を作成します。 | 計算に利用した Query と同じ個数 |
データが表示されない場合は
データの個数が 1 個になる加工方法を選択した場合、Time series や Bar chart など、複数のデータの表示に適した Panel の種類 を選択しているときは、データが表示されません。Stat や Gauge など、1 個のデータを表示できる Panel の種類を選択してください。
Harvest Data に保存する前に Orbit で加工できます
Harvest Data に保存する前にデータを演算する Orbit も利用できます。
- Expression 機能は、Public Beta です。
- 詳しくは、Grafana documentation の Write expression queries (英語) を参照してください。
四則演算と関数を利用する (Math)
既存の Query に対して、四則演算 (+
、-
、*
、/
) や関数 (abs()
、log()
など) を利用して、新しい Query を作成できます。
摂氏 (°C) から華氏 (°F) に変換して新しい Query を作成する例
たとえば、摂氏 (°C) で保存されている温度データを、Panel では華氏 (°F) で表示できます。
Time series の Panel を作成し、「A」という名前の Query を作成します。
Query A に、サンプルデータソース (Demo) の Device-1 の temperature を指定します。
この「A」が摂氏 (°C) で保存されている温度データです。計算対象の Query です。
をクリックします。
「B」という名前の Expression が作成されます。
以下の項目を設定します。
項目 説明 「Math」を選択します。 摂氏 (°C) を、華氏 (°F) に変換する計算式 ( ${A} * 1.8 + 32
) を入力します。${A}
は、手順 1 で作成した、計算対象の Query の名前です。 で利用できる数字、演算子、関数については、Math の [Expression] で利用できる表現について を参照してください。華氏 (°F) のグラフが追加されます。
Query「A」の
をクリックします。摂氏 (°C) のグラフが非表示になり、華氏 (°F) のグラフだけが表示されます。
Math の [Expression] で利用できる表現について
に入力できる数値 (定数)、Query の参照、演算子、関数を紹介します。
Query と Query の演算はタイムスタンプを基準に行われます
複数の Query の値を演算する際は、タイムスタンプごとに値が演算されます。
たとえば、Query「A」が 20 秒ごとに 1
、Query「B」が 30 秒ごとに 2
になる場合、${A} + ${B}
の演算結果は以下のとおりです。
タイムスタンプ | Query「A」の値 | Query「B」の値 | ${A} + ${B} の演算結果 |
---|---|---|---|
10:00:00 | 1 | 2 | 3 |
10:00:10 | |||
10:00:20 | 1 | 1 | |
10:00:30 | 2 | 2 | |
10:00:40 | 1 | 1 | |
10:00:50 | |||
10:01:00 | 1 | 2 | 3 |
異なるデバイスから送信されたデータを演算して意味がある数値を取得するには、再集計 (Resample) をしてタイムスタンプを揃える方法があります。
たとえば、Query「A」の 20 秒ごとの平均値を「A Mean」として作成し、Query「B」の 20 秒ごとの平均値を「B Mean」として作成した場合、${A Mean} + ${B Mean}
の演算結果は以下のとおりです。
タイムスタンプ | Query「A Mean」の値 | Query「B Mean」の値 | ${A Mean} + ${B Mean} の演算結果 |
---|---|---|---|
10:00:55 | |||
10:00:15 | 1 | 2 | 3 |
10:00:35 | 1 | 2 | 3 |
10:01:55 | 1 | 2 | 3 |
詳しくは、Grafana documentation の Math (英語) を参照してください。
数字 (定数)
数字は、10 進数、8 進数、16 進数、指数、符号などがサポートされています。
種類 | 例 |
---|---|
10 進数 |
|
8 進数 (先頭に 0 をつける) | 074 : 10 進数の 60 |
16 進数 (先頭に 0x をつける) | 0x6B : 10 進数の 107 |
Query のデータ
Query の名前を指定すると、Query のデータを利用できます。たとえば、Query「Temp query」のデータを利用する場合は、${Temp query}
を入力します。
演算子
利用できる演算子は、以下のとおりです。
演算子の種類 | 説明 | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
算術演算子 | 四則演算 (+ 、- 、* 、/ ) および 剰余 (% )、累乗 (** )、括弧 (() ) を利用できます。 | ||||||||||||||||||||||||||||||
関係演算子、論理演算子 | いずれも、真の場合に
|
関数
代表的な関数は、以下のとおりです。
関数の種類 | 意味 |
---|---|
abs() | 絶対値 |
log() | 自然対数 (底が e) |
関数について詳しくは、Grafana documentation の Math Functions (英語) を参照してください。
代表値を利用する (Reduce)
既存の Query の Dashboard で表示する時間範囲 または Panel ごとに表示する時間範囲 における代表値を、新しい Query として作成できます。代表値として、以下の項目を利用できます。
項目 | 説明 |
---|---|
Min | 最小値 |
Max | 最大値 |
Mean | 平均値 |
Sum | 合計値 |
Count | データ数 |
Last | 最終値 |
たとえば、定期的に送信される温度データの平均値 (Mean) を、Stat に表示できます。
- 代表値はデータが 1 個のため、Time series や Bar chart など、複数のデータの表示に適した Panel の種類 を選択しているときは、データが表示されません。
- Stat を利用すると折れ線グラフに代表値を重ねて表示できます。なお、Stat を利用する場合は、Expression 機能は利用しません。
以下の 2 つの Panel を作成し、どちらにも「A」という名前の Query を作成します。
どちらの Panel にも Query A に、サンプルデータソース (Demo) の Device-1 の temperature を指定します。
Stat の Query「A」が計算対象の Query です。手順 3 の
で選択します。Stat の Panel のタイトル →
の順にクリックして、 をクリックします。「B」という名前の Expression が作成されます。
以下の項目を設定します。
項目 説明 「Reduce」を選択します。 「Mean」を選択します。 「A」を選択します。「A」は手順 1 で作成した、計算対象の Query です。 計算対象の Query に数値以外のデータが含まれていた場合の計算方法を選択します。
- Stict: 計算結果を NaN (Not a Number) にします。
- Drop Non-numeric Values: 計算できないデータは無視して計算します。
- Replace Non-numeric Values: 計算できないデータは、任意の値に置き換えて計算します。
をクリックします。
平均値が表示されます。
Query「A」の をクリックします。
「A」の値が非表示になり、平均値だけが表示されます。
をクリックします。
Dashboard に戻ります。
「Reduce」で取得した代表値は「Math」の計算式で利用できます
たとえば、「Reduce」で取得した代表値を「Math」の計算式に含めると、ある系列のデータについて平均との差を算出できます。
再集計する (Resample)
既存の Query を任意の時間間隔 (例: 10 分) で再集計して、新しい Query として作成できます。再集計する方法は、最小値、最大値、平均、合計から選択できます。値が存在しない場合に補うこともできます。たとえば、定期的に送信される温度データに対して、10 分ごとの平均値 (Mean) のグラフを表示できます。
Time series の Panel を作成し、「A」という名前の Query を作成します。
Query A に、サンプルデータソース (Demo) の Device-1 の temperature を指定します。
この「A」が計算対象の Query です。
ここでは、
→ で「Red-Yellow-Green (by value)」を選択して、グラフの色を赤系にしています。をクリックします。
「B」という名前の Expression が作成されます。
以下の項目を設定します。
項目 説明 「Resample」を選択します。 「A」を選択します。「A」は手順 1 で作成した、計算対象の Query です。 再集計する時間間隔 ( 10m
) を入力します。単位の文字として、s
(秒)、m
(分)、h
(時間)、d
(日) を利用できます。「Mean」を選択します。 で指定した時間間隔にデータが含まれていない場合の値を選択します。
- pad: 直前の値を利用します。
- backfilling: 直後の値を利用します。
- fillna: NaN (Not a Number) にします。
をクリックします。
10 分ごとの平均値のグラフが追加されます。
Query「A」の をクリックします。
「A」の値が非表示になり、10 分ごとの平均値のグラフだけが表示されます。
真偽値を利用する (Classic condition)
既存の Query の Dashboard で表示する時間範囲 における値から、以下の定義済みの関数を利用して取得した真偽値 (条件を満たす場合に 1
になり、条件を満たさない場合に 0
になる) を、新しい Query として作成できます。
1 行目の
では、以下の項目を選択します。項目 説明 avg() 平均値を計算します。 min() 最小値を計算します。 max() 最大値を計算します。 sum() 合計値を計算します。 count() データの個数を数えます。 last() 最終値を取得します。 median() 中央値を取得します。中央値は、データを並べたときに中央にあるデータです。たとえば、7 個のデータが存在する場合は、4 番目のデータを取得できます。また、8 個のデータが存在する場合は、4 個目のデータと 5 個目のデータの平均値を取得できます。 diff() 最終値 - 最初値
を計算します。diff_abs() 最終値 - 最初値
の絶対値を計算します。percent_diff() 最初値から最終値までに増減した割合 (%) を計算します。たとえば、最初値が 26.92
、最終値が26.51
の場合、(26.92 / (26.51 - 26.92)) * 100
の値 (-1.55
) が評価されます。percent_diff_abs() 最初値から最終値までに増減した割合 (%) の絶対値を計算します。たとえば、最初値が 26.92
、最終値が26.51
の場合、(26.92 / (26.51 - 26.92)) * 100
の絶対値 (1.55
) が評価されます。count_non_null() null を除いたデータの個数を数えます。 1 行目の
では、Query または Expression を選択します。2 行目の設定では、
と で選択した内容に従って計算した値が、どのような条件のときに1
にするかを設定します。
たとえば、以下のように設定すると、定期的に送信される温度データの平均値 (Mean) が、20 °C を超えたら 1
を表示できます。
Expression には Classic condition を利用できません
Classic condition の計算対象を選択する
では、Query を選択してください。Expression を選択すると、エラーが発生します。真偽値はデータが 1 個のため、Time series や Bar chart など、複数のデータの表示に適した Panel の種類 を選択しているときは、データが表示されません。
複数の条件を「OR」または「AND」を利用して組み合わせて評価できます
1
または 0
を算出したうえで、「OR」または「AND」を利用して組み合わせた結果が Classic Condition の結果になります。ただし、以下の点に注意してください。
- すべての条件で値 (
1
または0
) を算出できた場合に限り (No Data
にならなかった場合に限り)、「OR」または「AND」を利用して組み合わせた結果も値 (1
または0
) が算出されます。 - いずれか 1 つの条件が参照している Query/Expression が
No Data
の場合は、Classic Condition の結果もNo Data
になります。 - 各条件が算出した結果 (
1
または0
) は、個別に確認できません。
Stat の Panel を作成し、「A」という名前の Query を作成します。
Query A に、サンプルデータソース (Demo) の Device-1 の temperature を指定します。
この「A」が計算対象の Query です。次に、Stat の数値を平均値に変更します。
ここでは、
→ で「Blue-Purple (by value)」を選択して、グラフの色を青系にしています。をクリックし、 → で「Mean」を選択します。
Query「A」のグラフと平均値が表示されます。
をクリックします。
「B」という名前の Expression が作成されます。
以下の項目を設定します。
項目 説明 「Classic condition」を選択します。 - で「avg()」を選択します。
- で「A」を選択します。「A」は手順 2 で作成した、計算対象の Query です。
- (より大きい) が表示されていることを確認して「20」を入力します。
[OF] で Expression を選択しないでください
では、計算対象の Query を選択してください。Expression を選択すると、エラーが発生します。
をクリックします。
Query「A」の平均値が「20」より大きい場合は
1
が表示されます。それ以外の場合は0
が表示されます。
「Classic condition」で取得した真偽値は「Math」の計算式で利用できません。
しきい値を利用する (Threshold)
既存の Query の値が指定した範囲に含まれるかどうかを表す真偽値 (値が指定した値、または範囲に含まれる場合に 1
になり、そうでない場合に 0
になる) を、新しい Query として作成できます。
以下のような Time series を作成できます。この Panel は、緑 (temperature) が 19.5 より大きい値のときは、黄色い円がグラフの上部に表示される仕組みです。しきい値の 19.5 を青い線で表現しています。
項目 | 設定 |
---|---|
Quick ranges | Last 15 minutes |
A (Query) | Demo > Device-1 > Standard > temperature |
B (Expression) |
|
C (Expsesion) |
|
Override 1 |
|
Override 2 |
|