series_rate_fl()
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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
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