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:

    bash
    # 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 -20
    Dica
    --web.listen-address=127.0.0.1:9100 expõe apenas no loopback. Se o Prometheus está em outro servidor, abra a porta 9100 apenas para o IP do servidor Prometheus: ufw allow from IP_PROMETHEUS to any port 9100.

    Node Exporter em Docker (com acesso ao host)

    Para usar com Docker Compose, monte os filesystems do host:

    yaml
    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'
    Dica
    network_mode: host é necessário para métricas de rede precisas — sem ele, o Node Exporter vê apenas a rede do container. pid: host permite coletar métricas de processos do host.

    Collectors mais úteis

    Node Exporter tem dezenas de collectors — habilite apenas os necessários:

    bash
    # 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.bonding

    Queries PromQL para Node Exporter

    As queries mais úteis para dashboards e alertas:

    promql
    # 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) / 86400

    Alertas essenciais para Node Exporter

    Regras de alerta básicas para infraestrutura saudável:

    yaml
    # 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.

    Perguntas frequentes