series_metric_fl()

この関数はseries_metric_fl()Prometheus 監視システムを使用してクラスターに取り込まれた時系列メトリックを選択して取得するユーザー定義関数 (UDF) です。 この関数は、クラスターに格納されているデータが Prometheus データ モデルに従って構造化されていることを前提としています。 具体的には、各レコードに次の値が含まれます。

  • timestamp
  • メトリックの名前
  • メトリックの値
  • ラベルの変数セット ("key":"value" ペア)

Prometheus では、メトリック名とラベルの個別のセットによって時系列が定義されます。 Prometheus Query Language (PromQL) を使用し、メトリック名と時系列セレクター (ラベルのセット) を指定することにより、時系列のセットを取得できます。

構文

T | invoke series_metric_fl(timestamp_col,name_col,labels_col,value_col,metric_name,labels_selector,lookback,offset)

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

パラメーター

名前 必須 説明
timestamp_col string ✔️ タイムスタンプを含む列の名前。
name_col string ✔️ メトリック名を含む列の名前。
labels_col string ✔️ ラベル ディクショナリを含む列の名前。
value_col string ✔️ メトリック値を含む列の名前。
metric_name string ✔️ 取得するメトリック時系列。
labels_selector string PromQL に似た時系列セレクター文字列。 これは、"key":"value" ペアのリストを含む文字列です (例: '"key1":"val1","key2":"val2"')。 既定値は空の文字列です。これは、フィルター処理がないことを意味します。 正規表現はサポートされていないことに注意してください。
ルックバック timespan PromQL と同様に、取得する範囲ベクトル。 既定では 10 分です。
offset datetime PromQL と同様に、取得する現在の時刻からオフセットします。 ago(offset)-lookback から ago(offset) までの範囲のデータが取得されます。 既定値は 0 です。つまり、データは まで now()取得されます。

関数の定義

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

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

重要

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

let series_metric_fl=(metrics_tbl:(*), timestamp_col:string, name_col:string, labels_col:string, value_col:string, metric_name:string, labels_selector:string='', lookback:timespan=timespan(10m), offset:timespan=timespan(0))
{
    let selector_d=iff(labels_selector == '', dynamic(['']), split(labels_selector, ','));
    let etime = ago(offset);
    let stime = etime - lookback;
    metrics_tbl
    | extend timestamp = column_ifexists(timestamp_col, datetime(null)), name = column_ifexists(name_col, ''), labels = column_ifexists(labels_col, dynamic(null)), value = column_ifexists(value_col, 0)
    | extend labels = dynamic_to_json(labels)       //  convert to string and sort by key
    | where name == metric_name and timestamp between(stime..etime)
    | order by timestamp asc
    | summarize timestamp = make_list(timestamp), value=make_list(value) by name, labels
    | where labels has_all (selector_d)
};
// Write your query to use the function here.

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

セレクターを指定する場合

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

let series_metric_fl=(metrics_tbl:(*), timestamp_col:string, name_col:string, labels_col:string, value_col:string, metric_name:string, labels_selector:string='', lookback:timespan=timespan(10m), offset:timespan=timespan(0))
{
    let selector_d=iff(labels_selector == '', dynamic(['']), split(labels_selector, ','));
    let etime = ago(offset);
    let stime = etime - lookback;
    metrics_tbl
    | extend timestamp = column_ifexists(timestamp_col, datetime(null)), name = column_ifexists(name_col, ''), labels = column_ifexists(labels_col, dynamic(null)), value = column_ifexists(value_col, 0)
    | extend labels = dynamic_to_json(labels)       //  convert to string and sort by key
    | where name == metric_name and timestamp between(stime..etime)
    | order by timestamp asc
    | summarize timestamp = make_list(timestamp), value=make_list(value) by name, labels
    | where labels has_all (selector_d)
};
demo_prometheus
| invoke series_metric_fl('TimeStamp', 'Name', 'Labels', 'Val', 'writes', '"disk":"sda1","host":"aks-agentpool-88086459-vmss000001"', offset=now()-datetime(2020-12-08 00:00))
| render timechart with(series=labels)

出力

10 分間のディスク書き込みメトリックを示すグラフ。

セレクターを指定しない

次の例では、セレクターを指定していないので、すべての "writes" メトリックが選択されます。 この例では、関数が既にインストールされていることが想定されており、代替直接呼び出し構文を使用し、最初のパラメーターとして入力テーブルを指定しています。

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

let series_metric_fl=(metrics_tbl:(*), timestamp_col:string, name_col:string, labels_col:string, value_col:string, metric_name:string, labels_selector:string='', lookback:timespan=timespan(10m), offset:timespan=timespan(0))
{
    let selector_d=iff(labels_selector == '', dynamic(['']), split(labels_selector, ','));
    let etime = ago(offset);
    let stime = etime - lookback;
    metrics_tbl
    | extend timestamp = column_ifexists(timestamp_col, datetime(null)), name = column_ifexists(name_col, ''), labels = column_ifexists(labels_col, dynamic(null)), value = column_ifexists(value_col, 0)
    | extend labels = dynamic_to_json(labels)       //  convert to string and sort by key
    | where name == metric_name and timestamp between(stime..etime)
    | order by timestamp asc
    | summarize timestamp = make_list(timestamp), value=make_list(value) by name, labels
    | where labels has_all (selector_d)
};
series_metric_fl(demo_prometheus, 'TimeStamp', 'Name', 'Labels', 'Val', 'writes', offset=now()-datetime(2020-12-08 00:00))
| render timechart with(series=labels, ysplit=axes)

出力

10 分間のすべてのディスクのディスク書き込みメトリックを示すグラフ。