{"id":178,"date":"2026-09-05T17:28:14","date_gmt":"2026-09-05T20:28:14","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/?p=178"},"modified":"2026-09-10T23:20:45","modified_gmt":"2026-09-11T02:20:45","slug":"monitorando-servidores-linux-com-prometheus","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/monitorando-servidores-linux-com-prometheus\/","title":{"rendered":"Monitoring Linux Servers with Prometheus and Node Exporter"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro apontando um pico no gr\u00e1fico de m\u00e9tricas, com a tocha do Prometheus e os servidores monitorados\" src=\"\/wp-content\/uploads\/2026\/09\/prometheus-v4.webp\" width=\"1486\" height=\"856\" \/><\/p>\n<p>Servidor sem monitoramento s\u00f3 avisa que caiu quando algu\u00e9m reclama. Com o <strong>Node Exporter<\/strong>, cada host exp\u00f5e m\u00e9tricas do Linux; o <strong>Prometheus<\/strong> as coleta e guarda como s\u00e9ries temporais para consulta e alerta. Este roteiro usa pacotes do Ubuntu onde eles existem, evita expor m\u00e9tricas na internet e valida cada etapa antes de seguir.<\/p>\n<h2>O desenho: quem coleta e quem exp\u00f5e<\/h2>\n<p>O Node Exporter escuta no host monitorado, normalmente na porta <code>9100<\/code>. O Prometheus, no servidor central, faz o <em>scrape<\/em> HTTP em intervalos regulares; ele n\u00e3o recebe m\u00e9tricas por push nesse cen\u00e1rio. Para poucos servidores, <code>static_configs<\/code> \u00e9 a forma can\u00f4nica de declarar alvos. Quando a frota crescer, prefira descoberta de servi\u00e7os ou arquivos de alvos em vez de editar a configura\u00e7\u00e3o principal a cada m\u00e1quina.<\/p>\n<h2>Instale o Node Exporter pelo Ubuntu<\/h2>\n<p>Em Ubuntu, o pacote da distribui\u00e7\u00e3o integra servi\u00e7o, usu\u00e1rio e atualiza\u00e7\u00f5es de seguran\u00e7a. Isso evita baixar um bin\u00e1rio com vers\u00e3o fixa e esquec\u00ea-lo depois. Em cada servidor monitorado:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt install -y prometheus-node-exporter\nsudo systemctl enable --now prometheus-node-exporter\nsudo systemctl status prometheus-node-exporter --no-pager\ncurl -fsS http:\/\/localhost:9100\/metrics | head<\/code><\/pre>\n<p>Se voc\u00ea precisar do bin\u00e1rio upstream por causa de um recurso espec\u00edfico, confira a arquitetura, a assinatura\/checksum e a vers\u00e3o na p\u00e1gina oficial de releases antes de instalar. O projeto recomenda consultar <code>node_exporter --help<\/code> para os coletores e flags dispon\u00edveis.<\/p>\n<h2>Restrinja a porta 9100<\/h2>\n<p><code>\/metrics<\/code> revela dados do host e n\u00e3o deve ficar aberto para a internet. Permita apenas o IP ou a rede do servidor Prometheus. No exemplo, substitua <code>10.0.0.10<\/code> pelo IP real do seu coletor:<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow from 10.0.0.10 to any port 9100 proto tcp\nsudo ufw status numbered<\/code><\/pre>\n<p>Em redes sem per\u00edmetro confi\u00e1vel, use TLS e autentica\u00e7\u00e3o do exporter ou uma rede privada\/VPN. Autentica\u00e7\u00e3o b\u00e1sica sem TLS exp\u00f5e a senha na rede.<\/p>\n<h2>Instale o Prometheus e adicione os alvos<\/h2>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt install -y prometheus\nsudo systemctl enable --now prometheus\nsudo systemctl status prometheus --no-pager<\/code><\/pre>\n<p>No servidor de monitoramento, adicione <strong>apenas este job<\/strong> \u00e0 lista <code>scrape_configs<\/code> j\u00e1 existente em <code>\/etc\/prometheus\/prometheus.yml<\/code>. N\u00e3o substitua o arquivo inteiro: o pacote costuma trazer o job do pr\u00f3prio Prometheus.<\/p>\n<pre><code class=\"language-yaml\">  - job_name: linux\n    scrape_interval: 30s\n    static_configs:\n      - targets:\n          - web1.exemplo.com.br:9100\n          - db1.exemplo.com.br:9100\n        labels:\n          ambiente: producao<\/code><\/pre>\n<p>Valide a sintaxe antes de reiniciar. Uma configura\u00e7\u00e3o inv\u00e1lida n\u00e3o deve virar uma janela sem monitoramento:<\/p>\n<pre><code class=\"language-bash\">sudo promtool check config \/etc\/prometheus\/prometheus.yml\nsudo systemctl restart prometheus\ncurl -fsS http:\/\/localhost:9090\/-\/ready\n<\/code><\/pre>\n<p>Abra <code>http:\/\/IP_DO_PROMETHEUS:9090\/targets<\/code>. Os dois alvos devem aparecer como <strong>UP<\/strong>. O endpoint <code>\/-\/ready<\/code> retorna 200 quando o Prometheus est\u00e1 pronto para atender consultas.<\/p>\n<h2>Consultas PromQL que respondem perguntas reais<\/h2>\n<pre><code class=\"language-text\"># alvo est\u00e1 acess\u00edvel? 1 = UP, 0 = falhou\nup{job=\"linux\"}\n\n# CPU ocupada por host, m\u00e9dia dos \u00faltimos 5 minutos\n100 - (avg by (instance) (rate(node_cpu_seconds_total{job=\"linux\",mode=\"idle\"}[5m])) * 100)\n\n# mem\u00f3ria usada, sem contar cache reaproveit\u00e1vel\n100 * (1 - node_memory_MemAvailable_bytes{job=\"linux\"} \/ node_memory_MemTotal_bytes{job=\"linux\"})\n\n# espa\u00e7o usado em sistemas de arquivos reais\n100 * (1 - node_filesystem_avail_bytes{job=\"linux\",fstype!~\"tmpfs|overlay\"} \/ node_filesystem_size_bytes{job=\"linux\",fstype!~\"tmpfs|overlay\"})<\/code><\/pre>\n<p><code>node_load1<\/code> mede carga, n\u00e3o porcentagem de CPU. Compare-o com a quantidade de CPUs do host antes de concluir que existe satura\u00e7\u00e3o. Para contadores, como CPU, use <code>rate()<\/code>; aplicar <code>rate()<\/code> em uma m\u00e9trica que j\u00e1 \u00e9 um valor instant\u00e2neo produz uma leitura sem sentido.<\/p>\n<h2>Do gr\u00e1fico ao alerta<\/h2>\n<p>Grafana melhora a visualiza\u00e7\u00e3o, mas o alerta deve nascer de uma regra com dura\u00e7\u00e3o e severidade, encaminhada pelo Alertmanager. Comece por indisponibilidade, disco pr\u00f3ximo do limite e press\u00e3o de mem\u00f3ria; evite alertar em cada pico moment\u00e2neo. Para a compara\u00e7\u00e3o com monitoramento tradicional, veja a <a href=\"\/2026\/09\/a-historia-do-nagios\/\">hist\u00f3ria do Nagios<\/a> e a <a href=\"\/2026\/09\/a-historia-do-zabbix\/\">hist\u00f3ria do Zabbix<\/a>. Se seus hosts s\u00e3o provisionados por automa\u00e7\u00e3o, use tamb\u00e9m o guia de <a href=\"\/2026\/09\/automatizando-servidores-linux-com-ansible\/\">Ansible<\/a> para repetir a instala\u00e7\u00e3o e as regras sem configura\u00e7\u00e3o manual.<\/p>\n<p><strong>Fontes:<\/strong> <a href=\"https:\/\/prometheus.io\/docs\/prometheus\/latest\/configuration\/configuration\/\" rel=\"noopener\">configura\u00e7\u00e3o do Prometheus<\/a>; <a href=\"https:\/\/prometheus.io\/docs\/prometheus\/latest\/querying\/basics\/\" rel=\"noopener\">guia de PromQL<\/a>; <a href=\"https:\/\/prometheus.io\/docs\/operating\/security\/\" rel=\"noopener\">modelo de seguran\u00e7a<\/a>; <a href=\"https:\/\/github.com\/prometheus\/node_exporter\" rel=\"noopener\">Node Exporter<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A server without monitoring only tells you it is down when someone complains. With Node Exporter, each host exposes Linux metrics; Prometheus collects and stores them as time series for queries and alerts. This guide uses Ubuntu packages where available, avoids exposing metrics to the internet, and validates each step before continuing. The \u2026 <a title=\"Monitoring Linux Servers with Prometheus and Node Exporter\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/monitorando-servidores-linux-com-prometheus\/\" aria-label=\"Read more about Monitorando Servidores Linux com Prometheus e Node Exporter\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,2,120],"tags":[23,126,125,72],"class_list":["post-178","post","type-post","status-publish","format-standard","hentry","category-infra","category-linux","category-servidores","tag-infra","tag-monitoramento","tag-prometheus","tag-servidores"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/comments?post=178"}],"version-history":[{"count":7,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/178\/revisions"}],"predecessor-version":[{"id":1524,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/178\/revisions\/1524"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/media?parent=178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/categories?post=178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/tags?post=178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}