Sdílet prostřednictvím


series_rate_fl()

Funkce series_rate_fl() je uživatelem definovaná funkce, která vypočítá průměrnou míru zvýšení metriky za sekundu. Jeho logika se řídí funkcí Rate () PromQL. Měl by se používat pro časové řady metrik čítačů přijatých do clusteru monitorovacím systémem Prometheus a načtených series_metric_fl().

Syntax

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

Tje tabulka vrácená z series_metric_fl(). Jeho schéma zahrnuje (timestamp:dynamic, name:string, labels:string, value:dynamic).

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

Parametry

Název Typ Vyžadováno Popis
n_bins int Počet intervalů pro určení mezery mezi extrahovanými hodnotami metrik pro výpočet sazby. Funkce vypočítá rozdíl mezi aktuálním vzorkem a vzorkem , který n_bins před, a vydělí ho rozdílem příslušných časových razítek v sekundách. Výchozí hodnota je jedna přihrádka. Výchozí nastavení vypočítává funkci okamžité rychlosti PromQL irate().
fix_reset bool Určuje, jestli se mají zkontrolovat resetování čítačů a opravit je jako funkce Rate() promQL. Výchozí formát je true. Nastavte ho na , false aby se uložila redundantní analýza pro případ, že není potřeba kontrolovat resetování.

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_rate_fl()příklady.

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.

Příklady

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

Výpočet průměrné míry zvýšení metriky

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

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)

Výstup

Graf znázorňující rychlost za sekundu metriky zápisu na disk pro všechny disky

Vybere hlavní disk dvou hostitelů.

Následující příklad vybere hlavní disk dvou hostitelů a předpokládá, že funkce je již nainstalována. Tento příklad používá alternativní syntaxi přímého volání a jako první parametr určuje vstupní tabulku:

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

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)

Výstup

Graf znázorňující rychlost za sekundu metriky zápisu na hlavní disk za poslední dvě hodiny s mezerou 10 intervalů