適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
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)
構文規則について詳しく知る。
パラメーター
関数定義
関数を定義するには、次のようにコードをクエリ定義関数として埋め込むか、データベースに格納された関数として作成します。
次の let ステートメントを使用して関数を定義。 権限は必要ありません。
重要
let ステートメント単独では実行できません。 その後に 表形式の式ステートメントが続く必要があります。 series_metric_fl()
の動作例を実行するには、「Examplesを参照してください。
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)
出力
セレクターを指定しない
次の例では、セレクターを指定していないので、すべての "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)
出力