Node Exporter: métricas do sistema Linux
Node Exporter é o exporter padrão do Prometheus para métricas do sistema operacional Linux — CPU, memória, disco, rede, load average, filesystem. É executado como um processo leve (~50 MB RAM) e expõe mais de 1000 métricas via HTTP. O dashboard ID 1860 do Grafana visualiza tudo com zero configuração adicional.
Instalar Node Exporter (sem Docker)
Para monitorar o host, Node Exporter deve rodar diretamente na VPS (não em container) para ter acesso completo ao sistema:
# Baixar e instalar Node Exporter
NODE_EXPORTER_VERSION="1.8.2"
wget https://github.com/prometheus/node_exporter/releases/download/v${NODE_EXPORTER_VERSION}/node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz
tar xvf node_exporter-*.tar.gz
mv node_exporter-*/node_exporter /usr/local/bin/
rm -rf node_exporter-*
# Criar usuário dedicado (sem shell, sem home)
useradd --no-create-home --shell /bin/false node_exporter
# Criar serviço systemd
cat > /etc/systemd/system/node_exporter.service << 'EOF'
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter \
--web.listen-address=127.0.0.1:9100 \
--collector.systemd \
--collector.processes
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now node_exporter
# Verificar
curl http://localhost:9100/metrics | head -20Node Exporter em Docker (com acesso ao host)
Para usar com Docker Compose, monte os filesystems do host:
services:
node_exporter:
image: prom/node-exporter:latest
restart: always
pid: host # acesso ao namespace de processos do host
network_mode: host # acesso à rede do host (melhor para métricas de rede)
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--path.rootfs=/rootfs'
- '--web.listen-address=127.0.0.1:9100'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($|/)'
- '--collector.systemd'
- '--no-collector.ipvs'Collectors mais úteis
Node Exporter tem dezenas de collectors — habilite apenas os necessários:
# Collectors habilitados por padrão (principais):
# cpu — uso de CPU por modo (user, system, idle, iowait)
# diskstats — I/O de disco (reads, writes, latência)
# filesystem — uso de filesystem (available, used, total)
# loadavg — load average (1m, 5m, 15m)
# meminfo — memória (total, available, cached, buffers)
# netdev — tráfego de rede (bytes, packets, errors)
# netstat — estatísticas TCP/UDP
# stat — interrupções, context switches
# time — tempo do sistema
# uname — informações do kernel
# Collectors extras úteis (não habilitados por padrão):
--collector.systemd # status de serviços systemd
--collector.processes # número de processos por estado
--collector.tcpstat # estado das conexões TCP
--collector.interrupts # interrupções por CPU
# Desabilitar collectors desnecessários:
--no-collector.arp
--no-collector.bcache
--no-collector.bondingQueries PromQL para Node Exporter
As queries mais úteis para dashboards e alertas:
# CPU: uso total (%) — média de todos os cores
100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# CPU por modo (útil para identificar iowait alto)
irate(node_cpu_seconds_total[5m])
# Memória disponível (%)
(node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100
# Disco: espaço usado (%)
100 - ((node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} /
node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}) * 100)
# Disco: I/O por segundo (reads e writes)
irate(node_disk_reads_completed_total[5m])
irate(node_disk_writes_completed_total[5m])
# Rede: tráfego recebido/enviado (bytes/s)
irate(node_network_receive_bytes_total{device!="lo"}[5m])
irate(node_network_transmit_bytes_total{device!="lo"}[5m])
# Tempo de uptime (dias)
(time() - node_boot_time_seconds) / 86400Alertas essenciais para Node Exporter
Regras de alerta básicas para infraestrutura saudável:
# prometheus/alerts/node.yml
groups:
- name: node_alerts
rules:
- alert: HighCPU
expr: 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 5m
labels:
severity: warning
annotations:
summary: "CPU alta em {{ $labels.instance }}"
description: "CPU em {{ $value | printf "%.1f" }}% por mais de 5 minutos"
- alert: LowDiskSpace
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 15
for: 5m
labels:
severity: critical
annotations:
summary: "Disco crítico em {{ $labels.instance }}"
description: "Apenas {{ $value | printf "%.1f" }}% de disco livre"
- alert: HighMemoryUsage
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90
for: 5m
labels:
severity: warning
annotations:
summary: "Memória alta em {{ $labels.instance }}"$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.