Prometheus e Grafana no Ubuntu Server: passo a passo
|

Prometheus e Grafana no Ubuntu Server: passo a passo

Prometheus coleta e armazena métricas em série temporal, o node_exporter expõe os dados do sistema operacional, e o Grafana transforma tudo em dashboard. Juntos, os três rodam num Ubuntu Server só com pacotes open source, sem custo de licença e com coleta a cada 15 segundos por padrão.

Por que Prometheus e Grafana, não só um checador de disponibilidade

Uma ferramenta de uptime avisa quando o servidor caiu. Prometheus e Grafana mostram a tendência antes disso acontecer: uso de CPU subindo há três dias, disco enchendo num ritmo previsível, memória sendo consumida por um processo específico. O modelo é pull: o Prometheus busca as métricas nos alvos configurados em intervalos regulares, em vez de esperar que cada servidor as envie — isso simplifica o firewall, porque só o servidor Prometheus precisa alcançar as portas dos exporters, nunca o contrário.

A diferença para uma ferramenta de monitoramento baseada em agente e SNMP é o foco: Prometheus é feito para métricas numéricas de alta cardinalidade (uma série por CPU, por interface, por partição) e para alertas construídos em cima de consultas PromQL, não para inventário de rede.

Pré-requisitos

Um Ubuntu Server 22.04 ou mais recente, acesso root ou sudo, e pelo menos 1 GB de RAM livre — o Prometheus mantém os dados recentes em memória antes de gravar em disco. Se for monitorar mais de um servidor, instale o node_exporter em cada um deles; Prometheus e Grafana só precisam rodar numa máquina central.

Passo a passo: instalar Prometheus

  1. Crie um usuário de sistema dedicado. Rodar o Prometheus com um usuário sem shell e sem privilégio de login reduz o estrago possível se o processo for comprometido — é o mesmo princípio de menor privilégio usado para qualquer serviço exposto a rede.

    sudo groupadd --system prometheus
    sudo useradd -s /sbin/nologin --system -g prometheus prometheus
    sudo mkdir -p /etc/prometheus /var/lib/prometheus
    sudo chown prometheus:prometheus /var/lib/prometheus
  2. Baixe o binário mais recente direto do GitHub. O pacote do Prometheus nos repositórios do Ubuntu costuma ficar várias versões atrás; buscar o release mais recente evita rodar uma versão sem as correções mais novas.

    cd /tmp
    curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest \
      | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
    tar xvf prometheus-*.linux-amd64.tar.gz
    cd prometheus-*.linux-amd64
    sudo mv prometheus promtool /usr/local/bin/
    sudo mv consoles console_libraries /etc/prometheus/
    sudo chown -R prometheus:prometheus /etc/prometheus
  3. Configure o prometheus.yml. O scrape_interval define de quanto em quanto tempo o Prometheus consulta cada alvo — 15 segundos é o padrão recomendado, granular o bastante para gráficos úteis sem gerar volume excessivo de dados.

    sudo tee /etc/prometheus/prometheus.yml <<EOF
    global:
      scrape_interval: 15s
    
    scrape_configs:
      - job_name: "prometheus"
        static_configs:
          - targets: ["localhost:9090"]
    EOF
    sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml
  4. Crie o serviço systemd e suba o Prometheus. Rodar como serviço systemd garante que ele reinicie sozinho após reboot ou crash, sem depender de alguém logar e rodar o binário manualmente.

    sudo tee /etc/systemd/system/prometheus.service <<EOF
    [Unit]
    Description=Prometheus
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    Type=simple
    User=prometheus
    Group=prometheus
    ExecStart=/usr/local/bin/prometheus \
      --config.file=/etc/prometheus/prometheus.yml \
      --storage.tsdb.path=/var/lib/prometheus \
      --web.console.templates=/etc/prometheus/consoles \
      --web.console.libraries=/etc/prometheus/console_libraries
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    EOF
    sudo systemctl daemon-reload
    sudo systemctl enable --now prometheus
    sudo systemctl status prometheus --no-pager

    Confirme em http://IP-DO-SERVIDOR:9090 que a interface web responde. Se o servidor tiver firewall (UFW ou iptables), libere a porta 9090 só para a sua rede de gestão — nunca exponha o Prometheus direto para a internet.

Passo a passo: instalar o node_exporter

  1. Baixe e instale o binário. O node_exporter expõe métricas de CPU, memória, disco, rede e filesystem do próprio Linux em http://IP:9100/metrics, no formato que o Prometheus entende nativamente.

    cd /tmp
    curl -s https://api.github.com/repos/prometheus/node_exporter/releases/latest \
      | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
    tar xvf node_exporter-*.linux-amd64.tar.gz
    sudo cp node_exporter-*.linux-amd64/node_exporter /usr/local/bin/
  2. Crie o serviço systemd.

    sudo tee /etc/systemd/system/node_exporter.service <<EOF
    [Unit]
    Description=Node Exporter
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    User=prometheus
    Group=prometheus
    ExecStart=/usr/local/bin/node_exporter
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    EOF
    sudo systemctl daemon-reload
    sudo systemctl enable --now node_exporter
  3. Adicione o node_exporter como alvo no Prometheus. Repita este bloco para cada servidor monitorado, trocando o IP.

    sudo nano /etc/prometheus/prometheus.yml
    # dentro de scrape_configs, adicione:
      - job_name: "node_exporter"
        static_configs:
          - targets: ["localhost:9100"]
    
    sudo systemctl restart prometheus

    Em http://IP-DO-SERVIDOR:9090/targets, os dois jobs (prometheus e node_exporter) devem aparecer com estado UP. Se algum aparecer DOWN, o motivo mais comum é porta bloqueada no firewall entre o servidor Prometheus e o alvo.

Passo a passo: instalar o Grafana e montar o dashboard

  1. Adicione o repositório oficial e instale. Usar o repositório do Grafana em vez do pacote do Ubuntu garante versões atualizadas com mais frequência.

    sudo mkdir -p /etc/apt/keyrings
    wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
    echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
    sudo apt update
    sudo apt install -y grafana
    sudo systemctl enable --now grafana-server
  2. Acesse a interface e troque a senha padrão. Abra http://IP-DO-SERVIDOR:3000, entre com usuário e senha admin e defina uma senha nova no primeiro login — deixar a senha padrão num painel que enxerga métricas de todos os servidores é um risco desnecessário.

  3. Adicione o Prometheus como fonte de dados. Em Connections → Data sources → Add data source, escolha Prometheus e informe a URL http://localhost:9090 (ou o IP do servidor Prometheus, se for outra máquina). Clique em Save & test.

  4. Importe um dashboard pronto em vez de montar do zero. Em Dashboards → New → Import, digite o ID 1860 (Node Exporter Full, o dashboard comunitário mais usado para esse exporter), clique em Load, selecione a fonte Prometheus criada no passo anterior e confirme. O painel já vem com CPU, memória, disco, rede e uptime organizados.

Perguntas frequentes

Prometheus substitui o Zabbix?
Não necessariamente — são filosofias diferentes. Zabbix cobre inventário, SNMP e checagem de disponibilidade de forma mais pronta para uso; Prometheus é mais flexível para métricas de aplicação e consultas ad-hoc via PromQL. Muita infraestrutura roda os dois lado a lado, cada um no que faz melhor.

Preciso expor as portas 9090, 9100 e 3000 na internet?
Não. Mantenha as três atrás do firewall, acessíveis só pela rede de gestão ou por VPN. Se precisar acessar de fora, coloque um proxy reverso com autenticação na frente do Grafana — nunca exponha o Prometheus ou o node_exporter diretamente.

Dá para monitorar servidores Windows?
Sim, com o windows_exporter, equivalente ao node_exporter para Windows. A configuração no lado do Prometheus é a mesma: adicionar o IP e a porta como um novo target em scrape_configs.

Quanto espaço em disco o Prometheus consome?
Depende do número de métricas e da retenção configurada (padrão de 15 dias). Para um único servidor com node_exporter, o volume costuma ficar na casa de poucas centenas de megabytes por mês — ajustável com a flag --storage.tsdb.retention.time no serviço.

Como alertar quando algo passa do limite, por exemplo disco cheio?
Isso é trabalho do Alertmanager, um componente separado do ecossistema Prometheus que recebe regras de alerta e as envia por e-mail, Slack ou webhook. Vale um tutorial à parte.

Conclusão

Com Prometheus, node_exporter e Grafana no ar, o próximo passo natural é repetir a instalação do node_exporter em cada servidor da rede e apontar todos para o mesmo Prometheus central, montando uma visão única de toda a infraestrutura num só dashboard.

Gostou? Compartilhe.

Posts Similares

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *