Share via


series_metric_fl()

La series_metric_fl() funzione è una funzione definita dall'utente che seleziona e recupera una serie temporale di metriche inserite nel cluster usando il sistema di monitoraggio Prometheus . Questa funzione presuppone che i dati archiviati nel cluster siano strutturati seguendo il modello di dati Prometheus. In particolare, ogni record contiene:

  • timestamp
  • nome metrica
  • valore della metrica
  • un set di variabili di etichette ("key":"value" coppie)

Prometheus definisce una serie temporale in base al nome della metrica e a un set distinto di etichette. È possibile recuperare set di serie temporali usando Prometheus Query Language (PromQL) specificando il nome della metrica e il selettore delle serie temporali (un set di etichette).

Sintassi

T | invoke series_metric_fl(, timestamp_col, name_col, labels_col, value_col, metric_name, labels_selectorlookback,compensare)

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria Descrizione
timestamp_col string ✔️ Nome della colonna contenente il timestamp.
name_col string ✔️ Nome della colonna contenente il nome della metrica.
labels_col string ✔️ Nome della colonna contenente il dizionario delle etichette.
value_col string ✔️ Nome della colonna contenente il valore della metrica.
metric_name string ✔️ Serie temporale della metrica da recuperare.
labels_selector string Stringa del selettore di serie temporali, simile a PromQL. Si tratta di una stringa contenente un elenco di "key":"value" coppie, ad esempio '"key1":"val1","key2":"val2"'. Il valore predefinito è una stringa vuota, ovvero nessun filtro. Si noti che le espressioni regolari non sono supportate.
lookback timespan Vettore di intervallo da recuperare, simile a PromQL. Il valore predefinito è 10 minuti.
offset datetime Eseguire l'offset dall'ora corrente al recupero, simile a PromQL. I dati vengono recuperati da ago(offset)-lookback ad ago(offset). Il valore predefinito è 0, il che significa che i dati vengono recuperati fino a now().

Definizione di funzione

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

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

Importante

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

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.

Esempio

Negli esempi seguenti viene usato l'operatore invoke per eseguire la funzione .

Con la specifica del selettore

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

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

Grafico che mostra la metrica di scrittura del disco in più di 10 minuti.

Senza specificare il selettore

L'esempio seguente non specifica il selettore, quindi vengono selezionate tutte le metriche "scritture". In questo esempio si presuppone che la funzione sia già installata e usi 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 della funzione incorporata.

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

Grafico che mostra la metrica di scrittura del disco per tutti i dischi in più di 10 minuti.