次の方法で共有


series_rate_fl()

適用対象: ✅Microsoft FabricAzure データ エクスプローラーAzure MonitorMicrosoft Sentinel

関数 series_rate_fl() は、 ユーザー定義関数 (UDF) であり、1 秒あたりのメトリックの増加率の平均を計算します。 このロジックは、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) が含まれます。

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

パラメーター

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

関数定義

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

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

重要

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

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 ビンのギャップを示すグラフ。