Freigeben über


series_metric_fl()

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft 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

Diagramm, in dem die Metrik für Datenträgerschreibvorgänge über 10 Minuten angezeigt wird.

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

Diagramm mit datenträgerschreibmetrischer Metrik für alle Datenträger über 10 Minuten.