Sdílet prostřednictvím


series_metric_fl()

Funkce series_metric_fl() je uživatelem definovaná funkce, která vybírá a načítá časové řady metrik přijatých do clusteru pomocí monitorovacího systému Prometheus . Tato funkce předpokládá, že data uložená v clusteru jsou strukturovaná podle datového modelu Prometheus. Konkrétně každý záznam obsahuje:

  • časové razítko
  • název metriky
  • hodnota metriky
  • proměnná sada popisků ("key":"value" páry)

Prometheus definuje časovou řadu podle názvu metriky a jedinečné sady popisků. Sady časových řad můžete načíst pomocí jazyka Prometheus Query Language (PromQL) zadáním názvu metriky a voliče časových řad (sady popisků).

Syntax

T | invoke series_metric_fl(, timestamp_col, name_col, labels_col, value_col, metric_name, labels_selectorlookback,Posun)

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
timestamp_col string ✔️ Název sloupce obsahujícího časové razítko.
name_col string ✔️ Název sloupce, který obsahuje název metriky.
labels_col string ✔️ Název sloupce obsahujícího slovník popisků.
value_col string ✔️ Název sloupce obsahujícího hodnotu metriky.
metric_name string ✔️ Časová řada metrik, která se má načíst.
labels_selector string Řetězec selektoru časových řad podobný řetězci PromQL. Jedná se o řetězec obsahující seznam párů "key":"value" , například '"key1":"val1","key2":"val2"'. Výchozí hodnota je prázdný řetězec, což znamená, že se nefiltruje. Všimněte si, že regulární výrazy nejsou podporovány.
lookback timespan Vektor rozsahu, který se má načíst, podobný PromQL. Výchozí hodnota je 10 minut.
Posun datetime Posun zpět od aktuálního času pro načtení, podobně jako PromQL. Data se načítají z ago(offset)-lookback do ago(offset). Výchozí hodnota je 0, což znamená, že se data načítají až do now()hodnoty .

Definice funkce

Funkci můžete definovat vložením jejího kódu jako funkce definované dotazem nebo jejím vytvořením jako uložené funkce v databázi, a to následujícím způsobem:

Definujte funkci pomocí následujícího příkazu let. Nejsou vyžadována žádná oprávnění.

Důležité

Příkaz let nelze spustit samostatně. Musí za ním následovat příkaz tabulkového výrazu. Pokud chcete spustit funkční příklad , podívejte se na series_metric_fl()příklady.

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.

Příklady

V následujících příkladech se ke spuštění funkce používá operátor invoke .

Se zadaným selektorem

Pokud chcete použít funkci definovanou dotazem, vyvolejte ji po definici vložené funkce.

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)

Výstup

Graf znázorňující metriku zápisu na disk za 10 minut

Bez zadání selektoru

Následující příklad neurčí selektor, takže se vyberou všechny metriky zápisů. Tento příklad předpokládá, že funkce je už nainstalovaná, a používá alternativní syntaxi přímého volání, která jako první parametr určuje vstupní tabulku:

Pokud chcete použít funkci definovanou dotazem, vyvolejte ji po definici vložené funkce.

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)

Výstup

Graf znázorňující metriku zápisu na disk pro všechny disky za 10 minut