Monitorando sua rede doméstica com Grafana e Prometheus

1. Introdução à stack de monitoramento para home lab

Monitorar a rede doméstica vai além de simples curiosidade técnica — é uma prática essencial para manter a visibilidade sobre o que acontece em seu ambiente. Com o crescimento de home labs que incluem servidores como Proxmox, sistemas de armazenamento como TrueNAS, firewalls como pfSense e bloqueadores de anúncios como Pi-hole, a complexidade aumenta e a necessidade de monitoramento se torna evidente.

O Prometheus atua como o sistema de coleta de métricas, armazenando dados temporais de forma eficiente. O Grafana, por sua vez, é a camada de visualização que transforma esses dados em dashboards interativos e compreensíveis. Juntos, eles formam uma stack poderosa e gratuita, amplamente utilizada em ambientes profissionais, mas perfeitamente adaptável para uso doméstico.

Os benefícios incluem: detecção precoce de problemas (como disco cheio ou serviço offline), análise de tendências de uso de recursos, e aprendizado prático de ferramentas utilizadas em empresas de tecnologia.

2. Planejamento da arquitetura de monitoramento

Antes de instalar qualquer componente, é fundamental planejar onde cada peça será executada. A escolha mais comum e flexível é utilizar containers Docker em um servidor Linux dedicado ou em uma VM no Proxmox. Isso facilita a manutenção e a atualização.

Mapeie os dispositivos que serão monitorados:

  • Servidor principal (onde o Prometheus e Grafana rodam)
  • Roteador/firewall pfSense
  • Hipervisor Proxmox
  • Servidor de armazenamento TrueNAS
  • Servidor DNS Pi-hole
  • Switches gerenciáveis (via SNMP)

Para segurança, isole a rede de gerenciamento em uma VLAN separada e configure autenticação básica no Grafana. Nunca exponha a interface do Prometheus diretamente à internet.

3. Instalação e configuração do Prometheus

A instalação via Docker é a mais prática. Crie um diretório para o Prometheus e um arquivo docker-compose.yml:

version: '3.8'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    ports:
      - "9090:9090"
    restart: unless-stopped

volumes:
  prometheus_data:

O arquivo prometheus.yml define os targets a serem monitorados:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node_exporter'
    static_configs:
      - targets: ['192.168.1.10:9100']

  - job_name: 'pfsense'
    static_configs:
      - targets: ['192.168.1.1:9100']

  - job_name: 'snmp'
    static_configs:
      - targets: ['192.168.1.100:9116']

Após iniciar o container, acesse http://seu-ip:9090 para verificar se o Prometheus está coletando métricas. Utilize a aba "Status" > "Targets" para confirmar que todos os endpoints estão UP.

4. Configuração dos exporters para coleta de métricas

Os exporters são agentes que expõem métricas no formato que o Prometheus entende. O Node Exporter é o mais básico e essencial:

# No servidor de monitoramento (ou em cada nó)
docker run -d --name node_exporter --net="host" --pid="host" \
  -v "/:/host:ro,rslave" \
  prom/node-exporter:latest \
  --path.rootfs=/host

Para monitorar switches e roteadores via SNMP, utilize o SNMP Exporter. Crie um arquivo snmp.yml com a configuração do seu dispositivo:

# Exemplo para switch TP-Link
auths:
  public_v2:
    community: public
    version: 2
    security_parameters:
      user: ""
      authentication_protocol: ""
      privacy_protocol: ""
      authentication_passphrase: ""
      privacy_passphrase: ""

modules:
  if_mib:
    walk:
      - 1.3.6.1.2.1.2
      - 1.3.6.1.2.1.31.1.1
    max_repetitions: 25
    retries: 3
    timeout: 5s

Para o pfSense, é necessário habilitar a API e utilizar o exporter específico. No Proxmox, o Proxmox VE Exporter coleta métricas de VMs e storage. O Pi-hole possui um exporter que expõe consultas bloqueadas, clientes ativos e status do serviço.

5. Instalação e configuração do Grafana

O Grafana também pode ser instalado via Docker:

version: '3.8'
services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    volumes:
      - grafana_data:/var/lib/grafana
    ports:
      - "3000:3000"
    restart: unless-stopped
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=suasenha

volumes:
  grafana_data:

Acesse http://seu-ip:3000 e faça login com admin/suasenha. Adicione o Prometheus como fonte de dados:

  1. Vá em Configuration > Data Sources > Add data source
  2. Selecione Prometheus
  3. Em URL, insira http://seu-ip-do-prometheus:9090
  4. Clique em "Save & Test"

6. Criação de dashboards essenciais para a rede doméstica

Com os dados fluindo, crie dashboards personalizados. Um dashboard de visão geral da rede pode incluir:

  • Tráfego de rede por interface (bytes recebidos/enviados)
  • Latência para gateway e DNS
  • Número de dispositivos online (via DHCP ou ICMP)

Para desempenho de servidores, inclua:

  • CPU usage (percentual por core)
  • Memória RAM (total, usada, cache)
  • Disco (uso percentual e I/O)
  • Temperatura da CPU (se disponível)

Para serviços específicos:

  • Pi-hole: consultas totais, bloqueadas, top domínios
  • TrueNAS: uso do pool de storage, status dos discos
  • Proxmox: VMs ativas, uso de recursos por VM

Utilize painéis como "Stat", "Graph" e "Table". A consulta PromQL para uso de CPU do Node Exporter é:

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

7. Configuração de alertas e notificações

No Prometheus, crie regras de alerta em um arquivo alerts.yml:

groups:
  - name: home_lab
    rules:
      - alert: HighDiskUsage
        expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 10
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Disco com menos de 10% livre"

      - alert: ServiceDown
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Serviço {{ $labels.job }} está offline"

No Grafana, configure canais de notificação:

  1. Vá em Alerting > Contact points
  2. Adicione um contato para Telegram, Discord ou e-mail
  3. Crie regras de alerta nos painéis desejados

Teste os alertas simulando uma condição (por exemplo, parando um serviço) e ajuste os limites para evitar falsos positivos.

8. Manutenção e boas práticas para o longo prazo

Para garantir que o monitoramento funcione por meses sem problemas, configure a retenção de dados no Prometheus:

# No docker-compose, adicione ao comando do Prometheus:
--storage.tsdb.retention.time=30d
--storage.tsdb.retention.size=10GB

Faça backups periódicos dos volumes Docker e dos arquivos de configuração (prometheus.yml, alerts.yml, dashboards exportados do Grafana).

Ao atualizar, pare os containers, faça pull das novas imagens e reinicie. Sempre verifique as notas de versão para mudanças breaking.

Para expansão futura, mantenha o arquivo prometheus.yml versionado e documente cada novo target adicionado. Considere utilizar o service discovery do Docker ou Consul para adicionar novos dispositivos automaticamente.

Referências