series_rate_fl()

関数 series_rate_fl() は、1 秒あたりのメトリック増加率の平均を計算する ユーザー定義関数 (UDF) です。 このロジックは、PromQL rate() 関数に従います。 これは、Prometheus 監視システムによってクラスターに取り込まれた一連のカウンター メトリックに使用され、series_metric_fl()によって取得されます。

構文

T | invoke series_rate_fl([ n_bins [,fix_reset ]])

Tseries_metric_fl() から返されるテーブルです。 そのスキーマには (timestamp:dynamic, name:string, labels:string, value:dynamic) が含まれます。

構文規則について詳しく知る。

パラメーター

名前 必須 説明
n_bins int 率を計算するために抽出されたメトリック値間のギャップを指定するビンの数。 関数は、現在のサンプルとそれ以前の n_bins の差を計算し、それぞれのタイムスタンプの差 (秒単位) で除算します。 既定値は 1 つのビンです。 既定の設定では、PromQL の瞬間レート関数である irate() が計算されます。
fix_reset bool カウンターリセットをチェックし、PromQL rate() 関数のように修正するかどうかを制御します。 既定では、 trueです。 リセットを確認する必要がない場合のために冗長解析を保存するには、false に設定します。

関数の定義

関数を定義するには、次のように、コードをクエリ定義関数として埋め込むか、データベースに格納されている関数として作成します。

次の let ステートメントを使用して関数を定義します。 権限は必要ありません。

重要

let ステートメントは単独では実行できません。 その後に 表形式の式ステートメントを記述する必要があります。 の動作例 series_rate_fl()を実行するには、「 」を参照してください。

let series_rate_fl=(tbl:(timestamp:dynamic, value:dynamic), n_bins:int=1, fix_reset:bool=true)
{
    tbl
    | where fix_reset                                                   //  Prometheus counters can only go up
    | mv-apply value to typeof(double) on   
    ( extend correction = iff(value < prev(value), prev(value), 0.0)    // if the value decreases we assume it was reset to 0, so add last value
    | extend cum_correction = row_cumsum(correction)
    | extend corrected_value = value + cum_correction
    | summarize value = make_list(corrected_value))
    | union (tbl | where not(fix_reset))
    | extend timestampS = array_shift_right(timestamp, n_bins), valueS = array_shift_right(value, n_bins)
    | extend dt = series_subtract(timestamp, timestampS)
    | extend dt = series_divide(dt, 1e7)                              //  converts from ticks to seconds
    | extend dv = series_subtract(value, valueS)
    | extend rate = series_divide(dv, dt)
    | project-away dt, dv, timestampS, value, valueS
};
// Write your query to use the function here.

次の例では、 invoke 演算子 を使用して関数を実行します。

メトリックの増加率の平均を計算する

クエリ定義関数を使用するには、埋め込み関数定義の後にそれを呼び出します。

let series_rate_fl=(tbl:(timestamp:dynamic, value:dynamic), n_bins:int=1, fix_reset:bool=true)
{
    tbl
    | where fix_reset                                                   //  Prometheus counters can only go up
    | mv-apply value to typeof(double) on   
    ( extend correction = iff(value < prev(value), prev(value), 0.0)    // if the value decreases we assume it was reset to 0, so add last value
    | extend cum_correction = row_cumsum(correction)
    | extend corrected_value = value + cum_correction
    | summarize value = make_list(corrected_value))
    | union (tbl | where not(fix_reset))
    | extend timestampS = array_shift_right(timestamp, n_bins), valueS = array_shift_right(value, n_bins)
    | extend dt = series_subtract(timestamp, timestampS)
    | extend dt = series_divide(dt, 1e7)                              //  converts from ticks to seconds
    | extend dv = series_subtract(value, valueS)
    | extend rate = series_divide(dv, dt)
    | project-away dt, dv, timestampS, value, valueS
};
//
demo_prometheus
| invoke series_metric_fl('TimeStamp', 'Name', 'Labels', 'Val', 'writes', offset=now()-datetime(2020-12-08 00:00))
| invoke series_rate_fl(2)
| render timechart with(series=labels)

出力

すべてのディスクのディスク書き込みメトリックの 1 秒あたりのレートを示すグラフ。

2 つのホストのメイン ディスクを選択します

次の例では、2 つのホストのメイン ディスクを選択します。関数は既にインストールされていることが前提となっています。 この例では、最初のパラメーターとして入力テーブルを指定して、代替の直接呼び出し構文を使用します:

クエリ定義関数を使用するには、埋め込み関数定義の後にそれを呼び出します。

let series_rate_fl=(tbl:(timestamp:dynamic, value:dynamic), n_bins:int=1, fix_reset:bool=true)
{
    tbl
    | where fix_reset                                                   //  Prometheus counters can only go up
    | mv-apply value to typeof(double) on   
    ( extend correction = iff(value < prev(value), prev(value), 0.0)    // if the value decreases we assume it was reset to 0, so add last value
    | extend cum_correction = row_cumsum(correction)
    | extend corrected_value = value + cum_correction
    | summarize value = make_list(corrected_value))
    | union (tbl | where not(fix_reset))
    | extend timestampS = array_shift_right(timestamp, n_bins), valueS = array_shift_right(value, n_bins)
    | extend dt = series_subtract(timestamp, timestampS)
    | extend dt = series_divide(dt, 1e7)                              //  converts from ticks to seconds
    | extend dv = series_subtract(value, valueS)
    | extend rate = series_divide(dv, dt)
    | project-away dt, dv, timestampS, value, valueS
};
//
series_rate_fl(series_metric_fl(demo_prometheus, 'TimeStamp', 'Name', 'Labels', 'Val', 'writes', '"disk":"sda1"', lookback=2h, offset=now()-datetime(2020-12-08 00:00)), n_bins=10)
| render timechart with(series=labels)

出力

過去 2 時間のディスク書き込みメトリックメイン 1 秒あたりのレートと 10 ビンのギャップを示すグラフ。