Partilhar via


series_metric_fl()

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

A series_metric_fl() função é uma função definida pelo usuário (UDF) que seleciona e recupera séries temporais de métricas ingeridas em seu banco de dados usando o sistema de monitoramento Prometheus . Essa função pressupõe que os dados armazenados em seu banco de dados sejam estruturados seguindo o modelo de dados do Prometheus. Especificamente, cada registro contém:

  • timestamp
  • nome da métrica
  • valor da métrica
  • um conjunto variável de rótulos ("key":"value" pares)

O Prometheus define uma série temporal por seu nome métrico e um conjunto distinto de rótulos. Você pode recuperar conjuntos de séries temporais usando o Prometheus Query Language (PromQL) especificando o nome da métrica e o seletor de séries temporais (um conjunto de rótulos).

Sintaxe

T | invoke series_metric_fl(, timestamp_col name_col, labels_col, value_col, metric_name, labels_selector, deslocamento de lookback, )

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Digitar Obrigatória Descrição
timestamp_col string ✔️ O nome da coluna que contém o carimbo de data/hora.
name_col string ✔️ O nome da coluna que contém o nome da métrica.
labels_col string ✔️ O nome da coluna que contém o dicionário de rótulos.
value_col string ✔️ O nome da coluna que contém o valor da métrica.
metric_name string ✔️ A série temporal da métrica a ser recuperada.
labels_selector string String seletora de série temporal, semelhante ao PromQL. É uma string que contém uma lista de "key":"value" pares, por exemplo '"key1":"val1","key2":"val2"'. O padrão é uma cadeia de caracteres vazia, o que significa que não há filtragem. Observe que não há suporte para expressões regulares.
olhar para trás timespan O vetor de intervalo a ser recuperado, semelhante ao PromQL. O padrão é 10 minutos.
deslocamento datetime Deslocamento de volta da hora atual para recuperar, semelhante ao PromQL. Os dados são recuperados de ago(offset)-lookback para ago(offset). O padrão é 0, o que significa que os dados são recuperados até now().

Definição de função

Você pode definir a função inserindo seu código como uma função definida por consulta ou criando-a como uma função armazenada em seu banco de dados, da seguinte maneira:

Defina a função usando a instrução let a seguir. Nenhuma permissão é necessária.

Importante

Uma instrução let não pode ser executada sozinha. Ele deve ser seguido por uma instrução de expressão tabular. Para executar um exemplo funcional de series_metric_fl(), consulte Exemplos.

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.

Exemplos

Os exemplos a seguir usam o operador invoke para executar a função.

Com seletor de especificação

Para usar uma função definida por consulta, invoque-a após a definição da função inserida.

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)

Saída

Gráfico mostrando a métrica de gravação de disco em 10 minutos.

Sem especificar o seletor

O exemplo a seguir não especifica o seletor, portanto, todas as métricas de "gravação" são selecionadas. Este exemplo pressupõe que a função já esteja instalada e use sintaxe alternativa de chamada direta, especificando a tabela de entrada como o primeiro parâmetro:

Para usar uma função definida por consulta, invoque-a após a definição da função inserida.

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)

Saída

Gráfico mostrando a métrica de gravação de disco para todos os discos em 10 minutos.