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
-
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
-
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
-
Configure o
prometheus.yml. Oscrape_intervaldefine 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 -
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:9090que 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
-
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/
-
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
-
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 prometheusEm
http://IP-DO-SERVIDOR:9090/targets, os dois jobs (prometheusenode_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
-
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
-
Acesse a interface e troque a senha padrão. Abra
http://IP-DO-SERVIDOR:3000, entre com usuário e senhaadmine 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. -
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. -
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.