Fundamentos do PromQL

DockerBeginner
Pratique Agora

Introdução

Bem-vindo a este laboratório prático sobre os conceitos básicos do PromQL. Prometheus é um poderoso kit de ferramentas de monitoramento e alerta de código aberto, e sua linguagem de consulta, PromQL, está no centro de seu poder. O PromQL permite selecionar e agregar dados de séries temporais em tempo real.

Neste laboratório, você trabalhará com um ambiente pré-configurado consistindo em um servidor Prometheus que está coletando ativamente métricas de um Node Exporter. Seu objetivo é aprender a sintaxe fundamental do PromQL para consultar esses dados, começando com seleções de métricas simples e progredindo para consultas mais avançadas usando funções e filtros.

Compreender o Ambiente Fornecido

Nesta etapa, você se familiarizará com o ambiente do laboratório. O processo de configuração já iniciou dois contêineres Docker para você. Você não precisa realizar nenhuma configuração.

Os dois contêineres são:

  • node-exporter: O propósito deste contêiner é expor uma ampla variedade de métricas relacionadas a hardware e kernel da máquina host em que está sendo executado.
  • prometheus: Este é o próprio servidor Prometheus. Ele está configurado para "escanear" (coletar) as métricas do node-exporter e armazená-las em seu banco de dados de séries temporais.

Você pode verificar se ambos os contêineres estão em execução executando o comando docker ps no terminal.

docker ps

Você deverá ver uma saída semelhante à seguinte, listando ambos os contêineres prometheus e node-exporter com o status "Up".

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS         PORTS                                       NAMES
486db39ca176   prom/prometheus      "/bin/prometheus --c…"   9 seconds ago    Up 8 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus
3f02110c8fde   prom/node-exporter   "/bin/node_exporter"     11 seconds ago   Up 8 seconds   0.0.0.0:9100->9100/tcp, :::9100->9100/tcp   node-exporter

Isso confirma que sua pilha de monitoramento está pronta. Na próxima etapa, você acessará a interface do usuário do Prometheus para começar a consultar essas métricas.

Acessar o Expression Browser na UI do Prometheus

Nesta etapa, você acessará a interface web do Prometheus e localizará o Navegador de Expressões (Expression Browser), que é a ferramenta principal para executar consultas PromQL.

O servidor web do contêiner Prometheus é executado na porta 9090, e o ambiente do laboratório o torna automaticamente acessível para você.

  1. Clique no botão + na interface do LabEx e escolha Web Service.
  2. Insira 9090 para a porta e abra a nova aba que aparecer.

Esta ação abre a UI do Prometheus em uma aba separada dentro do seu ambiente de laboratório. Por padrão, você deverá acessar a página Graph. Nesta página, você verá um campo de texto rotulado como Expression. Este é o Navegador de Expressões, onde você inserirá e executará todas as suas consultas PromQL para este laboratório.

Prometheus Expression Browser

Agora que você sabe onde executar as consultas, está pronto para escrever a sua primeira.

Executar Consulta Básica como node_cpu_seconds_total

Nesta etapa, você executará sua primeira consulta PromQL básica para selecionar uma métrica. A consulta mais simples em PromQL é apenas o nome de uma métrica. Isso selecionará todas as séries temporais que possuem esse nome de métrica.

Navegue até o Navegador de Expressões na UI do Prometheus que você abriu na etapa anterior.

  1. No campo de entrada Expression, digite o seguinte nome de métrica:
node_cpu_seconds_total
  1. Clique no botão Execute.

Após executar, observe os resultados na visualização Table abaixo do gráfico. Você verá uma lista de séries temporais.

node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="idle"}      3456.78
node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="iowait"}    12.34
node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="system"}    56.78
...

Vamos detalhar este resultado:

  • node_cpu_seconds_total: Este é o nome da métrica. Ele representa um counter (contador) que rastreia o número total de segundos que a CPU passou em vários modos.
  • {cpu="0", mode="idle", ...}: Estes são os rótulos (labels). Rótulos são pares chave-valor que identificam unicamente uma série temporal. Aqui, você pode ver diferentes séries para cada núcleo de CPU (cpu="0") e cada modo (mode="idle", mode="system", etc.).
  • 3456.78: Este é o valor mais recente registrado para essa série temporal específica. Como é um contador, esse valor só aumentará com o tempo.

Nota: Se você não vir o valor mais recente, clique na caixa de diálogo do Labby no canto direito da página e feche-a temporariamente.

Você consultou com sucesso o Prometheus para todas as séries temporais de uma métrica específica.

Aplicar Função rate e Filtros de Label

Nesta etapa, você refinará sua consulta usando filtros de rótulos e a função rate() para obter dados mais significativos. O valor bruto de um contador geralmente não é útil; geralmente estamos mais interessados em sua taxa de variação.

Primeiro, vamos filtrar os resultados para ver apenas o tempo de CPU gasto no modo idle. Você pode fazer isso adicionando um seletor de rótulo entre chaves {} à sua consulta.

  1. Insira a seguinte consulta no Navegador de Expressões e execute-a:
node_cpu_seconds_total{mode="idle"}

Esta consulta agora retorna apenas as séries temporais onde o rótulo mode é exatamente idle.

Em seguida, vamos calcular a taxa de variação por segundo para este contador. Para isso, usamos a função rate(). A função rate() precisa saber em qual período de tempo calcular a taxa. Especificamos isso com um seletor de vetor de intervalo (range vector selector), como [5m] para os últimos 5 minutos.

  1. Agora, modifique sua consulta para envolvê-la na função rate() e adicione um seletor de intervalo de 5 minutos. Execute a consulta final:
rate(node_cpu_seconds_total{mode="idle"}[5m])

Vamos detalhar esta consulta avançada:

  • node_cpu_seconds_total{mode="idle"}: Este é o seletor de vetor instantâneo (instant vector selector) que filtra nossa métrica e rótulo desejados.
  • [5m]: Este é o seletor de intervalo (range selector), que informa ao Prometheus para obter todos os pontos de dados dos últimos 5 minutos para as séries temporais selecionadas.
  • rate(...): Esta é a função que pega o intervalo de 5 minutos de dados e calcula a taxa média por segundo na qual o contador aumentou.

O resultado não é mais um valor de contador grande, mas um valor tipicamente entre 0 e 1 (para um único núcleo de CPU). Um valor de 0.95 significaria que, nos últimos 5 minutos, a CPU esteve, em média, 95% ociosa. Esta é uma informação muito mais útil para monitoramento.

Resumo

Parabéns por completar este laboratório sobre os fundamentos do PromQL! Você consultou com sucesso uma instância Prometheus ativa e transformou dados brutos em informações significativas.

Neste laboratório, você aprendeu a:

  • Navegar na UI do Prometheus até o Navegador de Expressões.
  • Executar consultas básicas para selecionar todas as séries temporais de uma métrica.
  • Entender a estrutura de uma série temporal, incluindo seu nome de métrica e conjunto único de rótulos.
  • Filtrar séries temporais usando seletores de rótulos ({...}).
  • Calcular a taxa de variação de um contador usando a função rate() e um seletor de vetor de intervalo ([5m]).

Estes são os blocos de construção fundamentais para trabalhar com o Prometheus. A partir daqui, você pode explorar as muitas outras funções e operadores que o PromQL oferece para construir dashboards de monitoramento e alertas poderosos e perspicazes.