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:
- Vá em Configuration > Data Sources > Add data source
- Selecione Prometheus
- Em URL, insira
http://seu-ip-do-prometheus:9090 - 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:
- Vá em Alerting > Contact points
- Adicione um contato para Telegram, Discord ou e-mail
- 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
- Documentação oficial do Prometheus — Guia completo de instalação, configuração e consultas PromQL.
- Documentação oficial do Grafana — Manual de configuração, criação de dashboards e alertas.
- Node Exporter no GitHub — Repositório oficial com instruções de uso e métricas disponíveis.
- SNMP Exporter no GitHub — Guia para monitoramento de dispositivos de rede via SNMP.
- Pi-hole Exporter no GitHub — Exporter específico para métricas do Pi-hole, com exemplos de consultas.
- Proxmox VE Exporter — Coleta métricas de clusters Proxmox, incluindo VMs e storage.
- Grafana Dashboards para Home Lab — Repositório oficial com centenas de dashboards prontos para importar.