Consultas básicas em PromQL

LinuxBeginner
Pratique Agora

Introdução

Agora que o Prometheus está coletando métricas do Node Exporter, você pode começar a fazer perguntas sobre esses dados.

O Prometheus tem sua própria linguagem de consulta, chamada PromQL (Prometheus Query Language).

O PromQL é importante porque as métricas brutas só são úteis quando você consegue filtrá-las, combiná-las e calcular respostas relevantes a partir delas.

É neste ponto que o monitoramento deixa de ser apenas coleta e passa a ser análise. O Prometheus não é útil somente porque armazena números, mas porque o PromQL permite transformar esses números em perguntas e respostas.

Neste laboratório, você fará três tipos de perguntas:

  1. Fato simples: "Quanta memória livre existe?"
  2. Taxa: "Com que velocidade a CPU está trabalhando?"
  3. Cálculo: "Qual porcentagem da memória está ocupada?"

Você usará a interface Web do Prometheus (Web Service) para digitar essas perguntas e ver as respostas.

Consultar a memória livre

Nesta etapa, você consultará a quantidade de bytes de memória livre e salvará a resposta.

Vamos começar com um fato simples. Queremos saber quanta memória (RAM) está livre.

Primeiro, abra a interface do Prometheus:

Clique na guia Prometheus, no menu superior esquerdo da interface do LabEx, para abrir o painel.

Quando a interface carregar, localize a barra de pesquisa em destaque. É nela que você digitará suas perguntas para o Librarian.

Digite a consulta a seguir na barra de pesquisa:

node_memory_MemFree_bytes

Esse texto é o nome do ponto de dados que representa a "memória livre". Depois de digitá-lo, clique no botão Execute.

Consultar a memória livre

Verifique o resultado:

Você deverá ver um número na coluna "Value". Ele pode parecer surpreendentemente grande, por exemplo, 5204746240. Isso é normal, porque os computadores contabilizam a memória em bytes, que são unidades muito pequenas.

Observação: Às vezes, o número na coluna "Value" pode ficar escondido atrás da janela de chat do Labby. Se você não conseguir ver o valor, tente fechar temporariamente a janela de diálogo do Labby para visualizar o número e reabri-la quando terminar.

Para confirmar que você obteve o resultado correto (não podemos ver sua tela), execute o comando a seguir no terminal para salvar a resposta em um arquivo:

curl "http://localhost:9090/api/v1/query?query=node_memory_MemFree_bytes" > ~/project/free_memory.json
cat ~/project/free_memory.json
{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"node_memory_MemFree_bytes","instance":"localhost:9100","job":"node_exporter"},"value":[1768698428.127,"4001128448"]}]}}

Consultar a taxa da CPU

Nesta etapa, você usará rate() para consultar a velocidade com que um contador de CPU aumenta.

Agora vamos fazer uma pergunta mais difícil.

O velocímetro de um carro não mostra o "total de quilômetros percorridos"; ele mostra "quilômetros por hora" (velocidade).

O uso da CPU é semelhante. O Prometheus registra o "total de segundos que a CPU trabalhou desde que foi ligada". Esse número apenas aumenta com o tempo.

Métricas como essa são chamadas de contadores: elas se acumulam ao longo do tempo. Para entender o comportamento atual, geralmente é necessário usar uma função como rate(), que converte o crescimento acumulado em um sinal por unidade de tempo.

Para saber "com que intensidade a CPU está trabalhando agora", precisamos calcular a taxa (velocidade).

A pergunta:

rate(node_cpu_seconds_total[1m])

Entendendo a consulta:

  • node_cpu_seconds_total: os dados brutos (total de segundos).
  • [1m]: "observe os dados do último minuto".
  • rate(...): "calcule a velocidade com que esse número aumentou durante esse minuto".

Experimente na interface Web:

Cole a consulta rate(node_cpu_seconds_total[1m]) na barra de pesquisa e clique em Execute. É provável que você veja várias linhas de números, porque o computador tem vários núcleos de CPU.

Salve a resposta (para verificação):

curl -g "http://localhost:9090/api/v1/query?query=rate(node_cpu_seconds_total[1m])" > ~/project/cpu_rate.json

A opção -g (--globoff) desativa o globbing de URLs do curl, de modo que ele envie os colchetes literais em [1m] em vez de interpretá-los como um intervalo de URL. As aspas do shell mantêm a URL completa da consulta em um único argumento.

Calcular porcentagens

Nesta etapa, você combinará métricas de memória para obter uma porcentagem.

"500 milhões de bytes livres" é difícil de interpretar. "50% livre" é fácil.

O Prometheus pode fazer esse cálculo para você.

Essa capacidade aritmética é o que torna o PromQL poderoso para operações. Você pode combinar várias métricas de baixo nível em indicadores de integridade de nível mais alto, que são mais fáceis de interpretar.

Queremos saber: qual porcentagem da memória está em USO?

A fórmula é: $$ \text{Porcentagem em uso} = \frac{\text{Memória total} - \text{Memória livre}}{\text{Memória total}} \times 100 $$

A consulta em PromQL:

(node_memory_MemTotal_bytes - node_memory_MemFree_bytes) / node_memory_MemTotal_bytes * 100

Experimente na interface Web:

Cole essa equação matemática longa na barra de pesquisa e clique em Execute. Você deverá ver um único número, por exemplo, 45.2. Isso significa que 45,2% da memória está sendo usada.

Salve a resposta:

curl "http://localhost:9090/api/v1/query?query=(node_memory_MemTotal_bytes-node_memory_MemFree_bytes)/node_memory_MemTotal_bytes*100" > ~/project/memory_usage.json

Visualizar os dados

Nesta etapa, você criará um gráfico da consulta de memória e interpretará seus eixos.

Por fim, imagens são melhores do que números.

Com a consulta matemática ainda na barra de pesquisa, procure as guias acima da área de resultados. Você verá uma guia Graph (geralmente ao lado da guia Table, usada para resultados simples em texto).

Clique na guia Graph. Você verá uma linha representando o uso da memória ao longo do tempo.

  • Eixo X: tempo
  • Eixo Y: porcentagem em uso

Se você vir uma linha reta, isso significa que o uso da memória está estável. Se tivesse executado um programa pesado, você veria um pico.

Uma última verificação:

Como você está apenas observando gráficos, confirme que o servidor ainda está sendo executado em segundo plano:

ps aux | grep prometheus

Resumo

Neste laboratório, você aprendeu a fazer perguntas ao Librarian usando o PromQL.

Você aprendeu:

  1. Fatos simples: node_memory_MemFree_bytes
  2. Taxas (velocidade): rate(... [1m])
  3. Cálculos: (Total - Free) / Total * 100
  4. Gráficos: usando a guia Graph.

Agora que você consegue ver os dados, o próximo passo é fazer o Prometheus avisar você se algo der errado. Isso se chama Alerting.