Freigeben über


series_rate_fl()

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Die Funktion series_rate_fl() ist eine benutzerdefinierte Funktion (UDF), die die durchschnittliche Rate der Metrikerhöhung pro Sekunde berechnet. Die Logik folgt der PromQL-Rate () -Funktion. Sie sollte für Zeitreihen von Indikatormetriken verwendet werden, die von Prometheus-Überwachungssystem in Ihre Datenbank aufgenommen und von series_metric_fl()abgerufen werden.

Syntax

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

T ist eine Tabelle, die von series_metric_fl()zurückgegeben wird. Das Schema enthält (timestamp:dynamic, name:string, labels:string, value:dynamic).

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich Beschreibung
n_bins int Die Anzahl der Bins, um die Lücke zwischen den extrahierten Metrikwerten für die Berechnung der Rate anzugeben. Die Funktion berechnet die Differenz zwischen der aktuellen Stichprobe und dem zuvor n_bins , und dividiert sie durch die Differenz der jeweiligen Zeitstempel in Sekunden. Der Standardwert ist ein Container. Die Standardeinstellungen berechnen irate(), die PromQL-Funktion zur sofortigen Rate.
fix_reset bool Steuert, ob auf Zählerzurücksetzungen überprüft und wie die PromQL-Rate () -Funktion korrigiert werden soll. Der Standardwert ist true. Legen Sie sie fest, false um redundante Analysen zu speichern, falls keine Überprüfung auf Zurücksetzungen erforderlich ist.

Funktionsdefinition

Sie können die Funktion definieren, indem Sie den Code entweder als abfragedefinierte Funktion einbetten oder wie folgt als gespeicherte Funktion in Ihrer Datenbank erstellen:

Definieren Sie die Funktion mithilfe der folgenden Let-Anweisung. Es sind keine Berechtigungen erforderlich.

Wichtig

Eine Let-Anweisung kann nicht alleine ausgeführt werden. Auf sie muss eine tabellarische Ausdrucksanweisung folgen. Informationen zum Ausführen eines funktionierenden Beispiels series_rate_fl()finden Sie unter "Beispiele".

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.

Beispiele

In den folgenden Beispielen wird der Aufrufoperator zum Ausführen der Funktion verwendet.

Berechnen der durchschnittlichen Erhöhungsrate der Metrik

Um eine abfragedefinierte Funktion zu verwenden, rufen Sie sie nach der definition der eingebetteten Funktion auf.

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

Diagramm mit der Rate pro Sekunde der Datenträgerschreibmetrik für alle Datenträger.

Wählt den Hauptdatenträger von zwei Hosts aus.

Im folgenden Beispiel wird der Hauptdatenträger von zwei Hosts ausgewählt, und es wird davon ausgegangen, dass die Funktion bereits installiert ist. In diesem Beispiel wird eine alternative Syntax für direkte Aufrufe verwendet, die die Eingabetabelle als ersten Parameter angibt:

Um eine abfragedefinierte Funktion zu verwenden, rufen Sie sie nach der definition der eingebetteten Funktion auf.

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

Diagramm, das die Rate pro Sekunde der Metrik zum Schreiben des Hauptdatenträgers in den letzten zwei Stunden mit einer Lücke von 10 Bins anzeigt.