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
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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla