Share via


series_rate_fl()

La funzione è una funzione series_rate_fl()definita dall'utente che calcola il tasso medio di aumento della metrica al secondo. La logica segue la funzione PromQL rate(). Deve essere usato per la serie temporale di metriche contatori inserite nel cluster dal sistema di monitoraggio Prometheus e recuperate da series_metric_fl()..

Sintassi

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

T è una tabella restituita da series_metric_fl(). Lo schema include (timestamp:dynamic, name:string, labels:string, value:dynamic).

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria Descrizione
n_bins int Numero di bin per specificare il divario tra i valori delle metriche estratte per il calcolo della frequenza. La funzione calcola la differenza tra l'esempio corrente e quella n_bins prima e dividerla in base alla differenza dei rispettivi timestamp in secondi. Il valore predefinito è un bin. Le impostazioni predefinite calcolano irate(), la funzione frequenza istantanea di PromQL.
fix_reset bool Controlla se controllare la reimpostazione dei contatori e correggerla come la funzione PromQL rate(). Il valore predefinito è true. Impostarlo su per false salvare l'analisi ridondante nel caso in cui non sia necessario verificare la presenza di reimpostazioni.

Definizione di funzione

È possibile definire la funzione incorporando il codice come funzione definita da query o creandola come funzione archiviata nel database, come segue:

Definire la funzione usando l'istruzione let seguente. Non sono necessarie autorizzazioni.

Importante

Un'istruzione let non può essere eseguita autonomamente. Deve essere seguito da un'istruzione espressione tabulare. Per eseguire un esempio funzionante di series_rate_fl(), vedere Esempi.

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.

Esempio

Gli esempi seguenti usano l'operatore invoke per eseguire la funzione.

Calcolare il tasso medio di aumento delle metriche

Per usare una funzione definita da query, richiamarla dopo la definizione di funzione incorporata.

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)

Output

Grafico che mostra la frequenza al secondo della metrica di scrittura del disco per tutti i dischi.

Seleziona il disco principale di due host

Nell'esempio seguente viene selezionato il disco principale di due host e si presuppone che la funzione sia già installata. In questo esempio viene usata una sintassi di chiamata diretta alternativa, specificando la tabella di input come primo parametro:

Per usare una funzione definita da query, richiamarla dopo la definizione di funzione incorporata.

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)

Output

Grafico che mostra la frequenza al secondo della metrica di scrittura del disco principale nelle ultime due ore con 10 bin gap.