Udostępnij za pośrednictwem


series_rate_fl()

Funkcja series_rate_fl() jest funkcją zdefiniowaną przez użytkownika (UDF), która oblicza średni współczynnik wzrostu metryki na sekundę. Jego logika jest zgodna z funkcją PromQL rate(). Powinien być używany do szeregów czasowych metryk liczników pozyskanych do klastra przez system monitorowania Prometheus i pobierany przez series_metric_fl().

Składnia

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

T to tabela zwracana z series_metric_fl(). Jego schemat zawiera (timestamp:dynamic, name:string, labels:string, value:dynamic)element .

Dowiedz się więcej o konwencjach składniowych.

Parametry

Nazwa Typ Wymagane Opis
n_bins int Liczba pojemników do określenia luki między wyodrębnionymi wartościami metryki do obliczenia stawki. Funkcja oblicza różnicę między bieżącą próbką a jedną n_bins przed i dzieli ją przez różnicę odpowiednich sygnatur czasowych w sekundach. Wartość domyślna to jeden pojemnik. Ustawienia domyślne obliczają szybkość transmisji (), funkcję natychmiastowego współczynnika PromQL.
fix_reset bool Określa, czy należy sprawdzić resetowanie liczników i poprawić je tak, jak funkcja PromQL rate(). Wartość domyślna to true. Ustaw ją w celu false zapisania nadmiarowej analizy, jeśli nie ma potrzeby sprawdzania resetowania.

Definicja funkcji

Funkcję można zdefiniować, osadzając kod jako funkcję zdefiniowaną przez zapytanie lub tworząc ją jako funkcję przechowywaną w bazie danych w następujący sposób:

Zdefiniuj funkcję przy użyciu następującej instrukcji let. Nie są wymagane żadne uprawnienia.

Ważne

Instrukcja let nie może być uruchamiana samodzielnie. Należy po nim wykonać instrukcję wyrażenia tabelarycznego. Aby uruchomić działający przykład programu series_rate_fl(), zobacz Przykłady.

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.

Przykłady

W poniższych przykładach użyto operatora invoke , aby uruchomić funkcję.

Obliczanie średniej szybkości wzrostu metryki

Aby użyć funkcji zdefiniowanej przez zapytanie, wywołaj ją po osadzonej definicji funkcji.

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)

Dane wyjściowe

Wykres przedstawiający szybkość na sekundę metryki zapisu dysku dla wszystkich dysków.

Wybiera dysk główny dwóch hostów

Poniższy przykład wybiera dysk główny dwóch hostów i zakłada, że funkcja jest już zainstalowana. W tym przykładzie użyto alternatywnej składni wywołania bezpośredniego, określając tabelę wejściową jako pierwszy parametr:

Aby użyć funkcji zdefiniowanej przez zapytanie, wywołaj ją po osadzonej definicji funkcji.

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)

Dane wyjściowe

Wykres przedstawiający szybkość na sekundę metryki zapisu dysku głównego w ciągu ostatnich dwóch godzin z 10 przedziałami.