O Simple Log Service (SLS) oferece suporte às sintaxes PromQL, SQL e SQL+PromQL combinadas para consultar e analisar dados de métricas, com convenções de nomenclatura e limites de consulta específicos.
O SLS oferece suporte a três sintaxes para consultar e analisar dados de métricas:
PromQL syntax: O PromQL, linguagem de consulta do Prometheus, simplifica as consultas de dados de métricas. Para mais informações, consulte a documentação do Prometheus e os PromQL function usage examples.
SQL syntax: Use SQL para consultar e analisar dados de métricas com base no formato de codificação dos dados.
Combination of SQL and PromQL: Combine SQL com funções PromQL do SLS para consultas aninhadas. As consultas PromQL também oferecem suporte à Machine learning syntax do SLS.
Ao usar PromQL ou a combinação SQL+PromQL, os nomes das métricas e os rótulos devem seguir as convenções de nomenclatura. Para mais detalhes, consulte o Metric identifier.
Sintaxe PromQL
Exemplos de PromQL:
-
Consulte as séries temporais em que o nome da métrica é http_requests_total, o rótulo job é apiserver e o rótulo handler é /api/comments.
http_requests_total{job="apiserver", handler="/api/comments"} -
Obtenha os 3 maiores consumidores de CPU agrupados por app e proc nos últimos 5 minutos. O parâmetro app especifica aplicações e proc indica tipos de processo.
topk(3, sum by (app, proc) (rate(instance_cpu_time_ns[5m]))) -
Identifique pods não saudáveis.
min_over_time(sum by (namespace, pod) (kube_pod_status_phase{phase=~"Pending|Unknown|Failed"})[15m:1m]) > 0 -
Calcule a soma da utilização de CPU para DaemonSets do Kubernetes.
sum (rate (container_cpu_usage_seconds_total{pod=~"^x.*$",cluster=~".*",namespace=~".*"}[1m])) / sum (kube_pod_container_resource_limits_cpu_cores{pod=~"^null.*$",cluster=~".*",namespace=~".*"}) * 100
Para obter mais informações sobre a sintaxe PromQL, consulte a documentação do Prometheus, os exemplos de consulta e os PromQL use cases.
Sintaxe SQL
Confira exemplos de SQL. Para mais informações, consulte os SQL use cases.
-
Consulte e analise todos os dados.
*| SELECT * FROM "my_metric_store.prom" WHERE __name__ != '' -
Para a métrica http_request_count, consulte os dados em que o valor de domain no campo __labels__ seja www.example.com e obtenha a soma dos valores do campo __value__.
*| SELECT sum(__value__) FROM "my_metric_store.prom" WHERE __name__='http_request_count' and element_at(__labels__, 'domain')='www.example.com' -
Referente à métrica http_request_count, filtre os dados onde o valor de domain no campo __labels__ corresponda a www.example.com, agrupe os valores do campo __value__ por hora e calcule a soma total.
*| SELECT sum(__value__),date_trunc('hour', __time_nano__/1000000) as t FROM "my_metric_store.prom" WHERE __name__='http_request_count' and element_at(__labels__, 'domain')='www.example.com' GROUP BY t ORDER BY t DESC
Detalhes da sintaxe SQL:
-
A sintaxe SQL para dados de métricas segue o mesmo padrão da sintaxe SQL para dados de log (Analysis syntax). Ao consultar dados de métricas com SQL, o nome da tabela na cláusula FROM deve estar no formato {metrics_store_name}.prom. {metrics_store_name} representa o nome do Metricstore criado por você.
NotaColoque o nome da tabela entre aspas duplas ("").
Use a função element_at() para extrair um valor de chave do campo __labels__. Exemplo: element_at(__labels__, 'key').
Para saber mais sobre esquemas de tabelas, consulte o Encoding format.
Sintaxe SQL+PromQL
O SLS disponibiliza sete funções PromQL. As funções promql_query, promql_labels, promql_label_values e promql_series só podem ser chamadas na página personalizada de consulta e análise de um Metricstore.
Ao combinar SQL e PromQL, o nome da tabela na cláusula FROM deve ser metrics.
Endpoints de API e descrições das funções PromQL: documentação do Prometheus.
|
Nome da função |
Descrição |
Exemplo |
|
promql_query(string) |
Avalia uma consulta instantânea no EndTime de um intervalo de tempo. Equivale à API /query do Prometheus. Definição de parâmetro: query=<string>. |
*| SELECT promql_query('up') FROM metrics |
|
promql_query_range(string, string) |
Avalia uma consulta dentro do intervalo de tempo entre StartTime e EndTime. Corresponde à API /query_range do Prometheus. Definições de parâmetros: query=<string> e step=<duration>. |
*| SELECT promql_query_range('up', '5m') FROM metrics |
|
promql_labels() |
Retorna todas as chaves de rótulo. Por padrão, esta função retorna apenas os dados dentro do seguinte intervalo de tempo: [<EndTime> - 5min, <EndTime>]. |
*| SELECT promql_labels() FROM metrics |
|
promql_labels(string) |
Aceita o parâmetro match[] para retornar chaves de rótulo correspondentes a <series_selector>. Suporta apenas um valor match[]. Exemplo: promql_labels('up'). Por padrão, esta função retorna apenas os dados dentro do seguinte intervalo de tempo: [<EndTime> - 5min, <EndTime>]. |
*| SELECT promql_labels('up') FROM metrics |
|
promql_label_values(string) |
Retorna os valores de um rótulo. Por padrão, esta função retorna apenas os dados dentro do seguinte intervalo de tempo: [<EndTime> - 5min, <EndTime>]. |
*| SELECT promql_label_values('__name__') FROM metrics |
|
promql_label_values(string, string) |
Aceita o parâmetro match[] para retornar valores de um rótulo correspondente a <series_selector>. Suporta apenas um valor match[], que deve preceder o parâmetro Label. Exemplo: promql_label_values('up', '__label_name__') . Por padrão, esta função retorna apenas os dados dentro do seguinte intervalo de tempo: [<EndTime> - 5min, <EndTime>]. |
*| SELECT promql_label_values('up', '__label_name__') FROM metrics |
|
promql_series(string) |
Retorna as séries temporais correspondentes. Por padrão, esta função retorna apenas os dados dentro do seguinte intervalo de tempo: [<EndTime> - 5min, <EndTime>]. |
*| SELECT promql_series('up') FROM metrics |
Cada função PromQL retorna uma tabela, funcionando de maneira similar a uma função com valor de tabela definida pelo usuário (UDTF).
-
Esquema de tabela retornado por promql_query(string) e promql_query_range(string, string):
Campo
Tipo de campo
Descrição
metric
varchar
Nome da métrica. Pode estar vazio se a consulta incluir uma cláusula GROUP BY.
labels
map<varchar, varchar>
Rótulos estruturados como um mapa de chave-valor.
time
bigint
Timestamp.
value
double
Valor em um ponto específico no tempo.
Exemplos de consulta:
-
Função promql_query(string)
Insira
*| select promql_query('up') from metricsno editor de consultas e clique em Search & Analyze. O resultado será exibido em uma tabela com quatro colunas: time, metric, labels e value, apresentando os valores da métrica up de cada instância. -
Função promql_query_range(string, string)
Execute a instrução SQL
select promql_query_range('up', '30s') from metricspara consultar os dados de intervalo da métrica PromQLupcom um passo de30s. O resultado aparece em uma tabela contendo dados de séries temporais.
-
-
Esquema de tabela retornado por promql_labels(), promql_labels(string), promql_label_values(string) e promql_label_values(string, string):
Campo
Tipo de campo
Descrição
label
varchar
Chave do rótulo
Exemplos de consulta:
-
Função promql_labels()
*| select promql_labels() from metrics. O resultado da consulta retorna a coluna label, contendo cinco nomes de rótulo: code, instance, job, le e method. -
Função promql_labels(string)
Por exemplo, execute a consulta
*| select promql_labels('up') from metricspara listar todos os nomes de rótulo da métricaup. O resultado inclui__name__,instanceejob. -
Função promql_label_values(string)
Como exemplo, execute a consulta
*| select promql_label_values('instance') from metrics. A coluna label no resultado traz três endereços de instância: demo.promlabs.com:10000, demo.promlabs.com:10001 e demo.promlabs.com:10002. -
Função promql_label_values(string, string)
Exemplo de consulta:
*| select promql_label_values('up{demo!="a"}','instance') from metrics. O resultado retorna a coluna label com três linhas: demo.promlabs.com:10000, demo.promlabs.com:10001 e demo.promlabs.com:10002.
-
-
Esquema de tabela retornado por promql_series(string):
Campo
Tipo de campo
Descrição
series
map<varchar, varchar>
Série temporal.
Exemplo de consulta:
Por exemplo, execute a consulta
*| select promql_series('up') from metrics. A coluna series no resultado contém três linhas correspondentes a demo.promlabs.com:10001, demo.promlabs.com:10000 e demo.promlabs.com:10002. Cada linha é um mapa contendo os campos instance,__name__(valor: up) e job (valor: demo).
Limites
Um Metricstore suporta apenas endpoints da API de consulta do Prometheus (/query e /query_range). Outros endpoints, como /admin, /alerts e /rules, não são compatíveis.
Consultas PromQL e SQL+PromQL combinadas retornam valores para até 11.000 pontos de dados.