series_metric_fl()
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Die series_metric_fl()
Funktion ist eine benutzerdefinierte Funktion (UDF), die mithilfe des Prometheus-Überwachungssystems Zeitreihen von Metriken auswählt und abruft, die in Ihre Datenbank aufgenommen werden. Diese Funktion setzt voraus, dass die in Ihrer Datenbank gespeicherten Daten nach dem Prometheus-Datenmodell strukturiert sind. Insbesondere enthält jeder Datensatz Folgendes:
- Zeitstempel
- Metrikname
- Metrikwert
- variabler Satz von Bezeichnungen (
"key":"value"
Paare)
Prometheus definiert eine Zeitreihe anhand des metrischen Namens und einer eindeutigen Gruppe von Bezeichnungen. Mit Prometheus Query Language (PromQL) können Sie Sätze von Zeitreihen abrufen, indem Sie den Metriknamen und den Zeitreihenmarkierer (eine Gruppe von Bezeichnungen) angeben.
Syntax
T | invoke series_metric_fl(
,
timestamp_col name_col,
,
labels_col value_col,
metric_name,
labels_selector,
Lookback-Offset,
)
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
timestamp_col | string |
✔️ | Der Name der Spalte, die den Zeitstempel enthält. |
name_col | string |
✔️ | Der Name der Spalte, die den Metriknamen enthält. |
labels_col | string |
✔️ | Der Name der Spalte, die das Bezeichnungswörterbuch enthält. |
value_col | string |
✔️ | Der Name der Spalte, die den Metrikwert enthält. |
metric_name | string |
✔️ | Die metriken Zeitreihen, die abgerufen werden sollen. |
labels_selector | string |
Zeitreihenauswahlzeichenfolge, ähnlich wie PromQL. Es ist eine Zeichenfolge, die eine Liste von "key":"value" Paaren enthält, z. B '"key1":"val1","key2":"val2"' . . Der Standardwert ist eine leere Zeichenfolge, was bedeutet, dass keine Filterung erfolgt. Beachten Sie, dass reguläre Ausdrücke nicht unterstützt werden. |
|
Lookback | timespan |
Der abzurufende Bereichsvektor, ähnlich wie PromQL. Standardwert: 10 Minuten. | |
offset | datetime |
Versetzt von der aktuellen Zeit zurück, um abzurufen, ähnlich wie PromQL. Daten werden aus ago(offset)-lookback to ago(offset) abgerufen. Der Standardwert ist 0, was bedeutet, dass Daten bis zu now() . |
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_metric_fl()
finden Sie unter "Beispiele".
let series_metric_fl=(metrics_tbl:(*), timestamp_col:string, name_col:string, labels_col:string, value_col:string, metric_name:string, labels_selector:string='', lookback:timespan=timespan(10m), offset:timespan=timespan(0))
{
let selector_d=iff(labels_selector == '', dynamic(['']), split(labels_selector, ','));
let etime = ago(offset);
let stime = etime - lookback;
metrics_tbl
| extend timestamp = column_ifexists(timestamp_col, datetime(null)), name = column_ifexists(name_col, ''), labels = column_ifexists(labels_col, dynamic(null)), value = column_ifexists(value_col, 0)
| extend labels = dynamic_to_json(labels) // convert to string and sort by key
| where name == metric_name and timestamp between(stime..etime)
| order by timestamp asc
| summarize timestamp = make_list(timestamp), value=make_list(value) by name, labels
| where labels has_all (selector_d)
};
// Write your query to use the function here.
Beispiele
In den folgenden Beispielen wird der Aufrufoperator zum Ausführen der Funktion verwendet.
Mit angabe des Selektors
Um eine abfragedefinierte Funktion zu verwenden, rufen Sie sie nach der definition der eingebetteten Funktion auf.
let series_metric_fl=(metrics_tbl:(*), timestamp_col:string, name_col:string, labels_col:string, value_col:string, metric_name:string, labels_selector:string='', lookback:timespan=timespan(10m), offset:timespan=timespan(0))
{
let selector_d=iff(labels_selector == '', dynamic(['']), split(labels_selector, ','));
let etime = ago(offset);
let stime = etime - lookback;
metrics_tbl
| extend timestamp = column_ifexists(timestamp_col, datetime(null)), name = column_ifexists(name_col, ''), labels = column_ifexists(labels_col, dynamic(null)), value = column_ifexists(value_col, 0)
| extend labels = dynamic_to_json(labels) // convert to string and sort by key
| where name == metric_name and timestamp between(stime..etime)
| order by timestamp asc
| summarize timestamp = make_list(timestamp), value=make_list(value) by name, labels
| where labels has_all (selector_d)
};
demo_prometheus
| invoke series_metric_fl('TimeStamp', 'Name', 'Labels', 'Val', 'writes', '"disk":"sda1","host":"aks-agentpool-88086459-vmss000001"', offset=now()-datetime(2020-12-08 00:00))
| render timechart with(series=labels)
Output
Ohne Angabe des Selektors
Im folgenden Beispiel wird kein Selektor angegeben, sodass alle "Writes"-Metriken ausgewählt sind. In diesem Beispiel wird davon ausgegangen, dass die Funktion bereits installiert ist und eine alternative Syntax für direkte Aufrufe verwendet wird, 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_metric_fl=(metrics_tbl:(*), timestamp_col:string, name_col:string, labels_col:string, value_col:string, metric_name:string, labels_selector:string='', lookback:timespan=timespan(10m), offset:timespan=timespan(0))
{
let selector_d=iff(labels_selector == '', dynamic(['']), split(labels_selector, ','));
let etime = ago(offset);
let stime = etime - lookback;
metrics_tbl
| extend timestamp = column_ifexists(timestamp_col, datetime(null)), name = column_ifexists(name_col, ''), labels = column_ifexists(labels_col, dynamic(null)), value = column_ifexists(value_col, 0)
| extend labels = dynamic_to_json(labels) // convert to string and sort by key
| where name == metric_name and timestamp between(stime..etime)
| order by timestamp asc
| summarize timestamp = make_list(timestamp), value=make_list(value) by name, labels
| where labels has_all (selector_d)
};
series_metric_fl(demo_prometheus, 'TimeStamp', 'Name', 'Labels', 'Val', 'writes', offset=now()-datetime(2020-12-08 00:00))
| render timechart with(series=labels, ysplit=axes)
Output