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 consulta e análise de dados de métricas:
Sintaxe PromQL: 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 Exemplos de uso de funções PromQL.
Sintaxe SQL: Use SQL para consultar e analisar dados de métricas com base no formato de codificação dos dados.
Combinação de SQL e PromQL: Combine SQL com funções PromQL do SLS para executar consultas aninhadas. Consultas PromQL também oferecem suporte à sintaxe de Machine learning 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 Identificador de métrica.
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 Casos de uso do PromQL.
Sintaxe SQL
Confira exemplos de SQL. Para mais informações, veja os Casos de uso de SQL.
-
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' -
Na 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 corresponde à sintaxe SQL para dados de log (Sintaxe de análise). 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 mais detalhes sobre esquemas de tabelas, consulte o Formato de codificação.
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 de StartTime até 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) |
Oferece suporte ao parâmetro match[] para retornar chaves de rótulo correspondentes a <series_selector>. Aceita 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) |
Oferece suporte ao parâmetro match[] para retornar valores de um rótulo correspondente a <series_selector>. Aceita 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, semelhante 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 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)

Função promql_query_range(string, string)

-
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()

Função promql_labels(string)

Função promql_label_values(string)

Função promql_label_values(string, string)

-
Esquema de tabela retornado por promql_series(string):
Campo
Tipo de campo
Descrição
series
map<varchar, varchar>
Série temporal.
Exemplo de consulta:

Limites
Um Metricstore oferece suporte apenas aos endpoints da API de consulta do Prometheus (/query e /query_range). Outros endpoints, como /admin, /alerts e /rules, não são suportados.
Consultas PromQL e SQL+PromQL combinadas retornam valores para até 11.000 pontos de dados.