Monitorando Servidores Linux com Prometheus e Node Exporter

Mascote do LinuxPro apontando um pico no gráfico de métricas, com a tocha do Prometheus e os servidores monitorados

Servidor sem monitoramento só avisa que caiu quando alguém reclama. Com o Node Exporter, cada host expõe métricas do Linux; o Prometheus as coleta e guarda como séries temporais para consulta e alerta. Este roteiro usa pacotes do Ubuntu onde eles existem, evita expor métricas na internet e valida cada etapa antes de seguir.

O desenho: quem coleta e quem expõe

O Node Exporter escuta no host monitorado, normalmente na porta 9100. O Prometheus, no servidor central, faz o scrape HTTP em intervalos regulares; ele não recebe métricas por push nesse cenário. Para poucos servidores, static_configs é a forma canônica de declarar alvos. Quando a frota crescer, prefira descoberta de serviços ou arquivos de alvos em vez de editar a configuração principal a cada máquina.

Instale o Node Exporter pelo Ubuntu

Em Ubuntu, o pacote da distribuição integra serviço, usuário e atualizações de segurança. Isso evita baixar um binário com versão fixa e esquecê-lo depois. Em cada servidor monitorado:

sudo apt update
sudo apt install -y prometheus-node-exporter
sudo systemctl enable --now prometheus-node-exporter
sudo systemctl status prometheus-node-exporter --no-pager
curl -fsS http://localhost:9100/metrics | head

Se você precisar do binário upstream por causa de um recurso específico, confira a arquitetura, a assinatura/checksum e a versão na página oficial de releases antes de instalar. O projeto recomenda consultar node_exporter --help para os coletores e flags disponíveis.

Restrinja a porta 9100

/metrics revela dados do host e não deve ficar aberto para a internet. Permita apenas o IP ou a rede do servidor Prometheus. No exemplo, substitua 10.0.0.10 pelo IP real do seu coletor:

sudo ufw allow from 10.0.0.10 to any port 9100 proto tcp
sudo ufw status numbered

Em redes sem perímetro confiável, use TLS e autenticação do exporter ou uma rede privada/VPN. Autenticação básica sem TLS expõe a senha na rede.

Instale o Prometheus e adicione os alvos

sudo apt update
sudo apt install -y prometheus
sudo systemctl enable --now prometheus
sudo systemctl status prometheus --no-pager

No servidor de monitoramento, adicione apenas este job à lista scrape_configs já existente em /etc/prometheus/prometheus.yml. Não substitua o arquivo inteiro: o pacote costuma trazer o job do próprio Prometheus.

  - job_name: linux
    scrape_interval: 30s
    static_configs:
      - targets:
          - web1.exemplo.com.br:9100
          - db1.exemplo.com.br:9100
        labels:
          ambiente: producao

Valide a sintaxe antes de reiniciar. Uma configuração inválida não deve virar uma janela sem monitoramento:

sudo promtool check config /etc/prometheus/prometheus.yml
sudo systemctl restart prometheus
curl -fsS http://localhost:9090/-/ready

Abre http://IP_DO_PROMETHEUS:9090/targets. Os dois alvos devem aparecer como UP. O endpoint /-/ready retorna 200 quando o Prometheus está pronto para atender consultas.

Consultas PromQL que respondem perguntas reais

# alvo está acessível? 1 = UP, 0 = falhou
up{job="linux"}

# CPU ocupada por host, média dos últimos 5 minutos
100 - (avg by (instance) (rate(node_cpu_seconds_total{job="linux",mode="idle"}[5m])) * 100)

# memória usada, sem contar cache reaproveitável
100 * (1 - node_memory_MemAvailable_bytes{job="linux"} / node_memory_MemTotal_bytes{job="linux"})

# espaço usado em sistemas de arquivos reais
100 * (1 - node_filesystem_avail_bytes{job="linux",fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{job="linux",fstype!~"tmpfs|overlay"})

node_load1 mede carga, não porcentagem de CPU. Compare-o com a quantidade de CPUs do host antes de concluir que existe saturação. Para contadores, como CPU, use rate(); aplicar rate() em uma métrica que já é um valor instantâneo produz uma leitura sem sentido.

Do gráfico ao alerta

Grafana melhora a visualização, mas o alerta deve nascer de uma regra com duração e severidade, encaminhada pelo Alertmanager. Comece por indisponibilidade, disco próximo do limite e pressão de memória; evite alertar em cada pico momentâneo. Para a comparação com monitoramento tradicional, veja a história do Nagios e a história do Zabbix. Se seus hosts são provisionados por automação, use também o guia de Ansible para repetir a instalação e as regras sem configuração manual.

Fontes: configuração do Prometheus; guia de PromQL; modelo de segurança; Node Exporter.