⭐ Se este repositório/solução lhe foi útil, não deixe de dar um "star" no projeto no GitHub.
Stack de NetFlow para ISPs, baseada em Elastic (Elasticsearch + Kibana) + Filebeat (módulo NetFlow) + Grafana, desenvolvida pela NextHop Solutions através de seu CEO Elizandro Pacheco como contribuição para a comunidade.
🎤 Esta stack foi preparada para apresentação na:
- Evento: 15ª Semana de Infraestrutura da Internet no Brasil
- GTER/GTS: GTER | GTS (Semana de Infraestrutura)
- 🚀 Quick start
- 🧱 Componentes
- 🧭 Portas e endpoints
- 🗺️ Arquitetura
- ✅ Pré-requisitos
- 🔧 Configuração (.env)
- 📡 Exportadores NetFlow (equipamentos)
- 🗃️ Persistência e dados
- 🧰 Operação
- 🔐 Segurança (produção)
- 🧯 Troubleshooting
- 🤝 Apoiadores
- 📄 Licença
- Crie seu
.env:
cp env.example .env- Suba a stack:
docker compose up -d- Acesse:
- Kibana:
http://localhost:5601(usuárioelastic) - Grafana:
http://localhost:3000(usuárioadmin)
- Configure seus equipamentos para exportar NetFlow para UDP/2055 no IP do servidor.
- Elasticsearch (8.12.2): armazenamento e busca (
http://localhost:9200) - Kibana (8.12.2): exploração/consulta (
http://localhost:5601) - Filebeat (8.12.2): recepção e parse de NetFlow + envio ao Elasticsearch (UDP/2055)
- Grafana (11.2.0): dashboards (
http://localhost:3000)
- 9200/TCP: Elasticsearch (HTTP)
- 5601/TCP: Kibana (UI)
- 3000/TCP: Grafana (UI)
- 2055/UDP: NetFlow (entrada no Filebeat)
💡 Dica: em produção, não exponha
9200/5601/3000na Internet. Veja Segurança.
- Seus roteadores/BRAS/switches exportam NetFlow para o IP do servidor desta stack na porta UDP 2055.
- O Filebeat (módulo netflow) recebe e decodifica templates/fluxos.
- O Filebeat envia eventos para o Elasticsearch.
- Você analisa no Kibana e/ou monta dashboards no Grafana.
- Docker instalado
- Docker Compose (plugin
docker compose) - Host recomendado:
- 2 vCPU (mínimo)
- 4 GB RAM (recomendado)
- Disco conforme retenção desejada (NetFlow cresce rápido)
Em muitos ambientes Linux, o Elasticsearch precisa de vm.max_map_count maior:
sudo sysctl -w vm.max_map_count=262144Para persistir após reboot (Linux), adicione em /etc/sysctl.conf:
vm.max_map_count=262144O docker-compose.yaml lê variáveis do .env. O repositório inclui env.example como base.
- Elasticsearch:
ELASTIC_PASSWORD(usuárioelastic) - Kibana (usuário interno):
KIBANA_SYSTEM_PASSWORD(usuáriokibana_system) - Grafana:
GRAFANA_ADMIN_USEReGRAFANA_ADMIN_PASSWORD
Por segurança, o docker compose falha se você não definir as variáveis (para evitar subir com credenciais em branco).
O container setup_kibana_system_password roda uma vez e configura a senha do usuário kibana_system no Elasticsearch usando KIBANA_SYSTEM_PASSWORD.
Configure seus roteadores/BRAS/switches para exportar:
- Destino: IP do servidor desta stack
- Porta: 2055/UDP
Compatibilidade comum:
- NetFlow v9 / IPFIX: recomendado (templates + flexibilidade)
- NetFlow v5: também funciona em muitos cenários
🧠 Se o host estiver atrás de firewall/NAT, garanta a liberação/encaminhamento de UDP/2055 até o servidor Docker.
Exemplo via terminal (ajuste interfaces, IP e timeouts conforme seu cenário):
/ip traffic-flow set enabled=yes interfaces=all cache-entries=4k active-flow-timeout=30m inactive-flow-timeout=15s
/ip traffic-flow target add dst-address=<IP_DO_SERVIDOR_FILEBEAT> port=2055 version=9Referência: documentação oficial do RouterOS Traffic Flow em MikroTik — Traffic Flow.
💡 Dica: se você já tiver um target criado, revise com
/ip traffic-flow target printpara evitar duplicar targets.
Exemplo (os comandos podem variar por versão de VRP/modelo; ajuste interface e timeouts):
system-view
ip netstream export version 9
ip netstream export host <IP_DO_SERVIDOR_FILEBEAT> 2055
ip netstream export source <INTERFACE_OU_LOOPBACK_DE_ORIGEM>
ip netstream timeout active 1
ip netstream timeout inactive 15
interface <INTERFACE_MONITORADA>
ip netstream inbound
ip netstream outbound
quit
saveReferências:
- Guia de configuração de exportação NetStream (exemplo): ManageEngine — Configuring NetStream Export (Huawei)
- Exemplo oficial de exportação de estatísticas/flow (Huawei): Huawei Support — Example for Configuring Flexible Flow Statistics Export
Para entender o comportamento/formatos suportados (NetFlow v5/v9/IPFIX), referência: Elastic — Filebeat NetFlow module.
Os dados persistem em volumes Docker:
- Elasticsearch:
nexthop_flow_stack_elasticsearch_data - Grafana:
nexthop_flow_stack_grafana_data
Listagem rápida:
docker volume ls | grep nexthop_flow_stack || truedocker compose up -ddocker compose ps
docker compose logs -fdocker compose stop
docker compose startdocker compose downdocker compose down -v- Não exponha
9200,5601e3000diretamente na Internet. - Publique UI somente via VPN (WireGuard, etc.) ou reverse proxy com TLS + autenticação.
- Gere/rotacione segredos do
.enve não compartilhe o arquivo. - Restrinja quem pode enviar para UDP/2055 (ACLs/VRF/VLAN/Firewall).
- Verifique
vm.max_map_count(Linux) e recursos do host (RAM/CPU/disco). - Logs:
docker compose logs -f elasticsearch- Confirme se o
setup_kibana_system_passwordrodou com sucesso:
docker compose logs setup_kibana_system_password- Confira se
KIBANA_SYSTEM_PASSWORDno.envé o mesmo que o setup aplicou no Elasticsearch.
- Confirme se a porta está aberta no host (UDP/2055) e se o exporter aponta para o IP correto.
- Logs:
docker compose logs -f filebeatIsso é esperado: o Elasticsearch está com security habilitada; 401 também indica que ele está respondendo.
- Template de dashboard (JSON):
template-grafana.json - Apresentação na GTER (PDF):
[GTER 54] Elizandro Pacheco.pdf
Obrigado aos apoiadores que fortalecem a iniciativa e a comunidade:
- Site:
https://nexthop.solutions/
- Site:
https://evocode.dev.br/
- Desenvolvedor: Elizandro Pacheco
- Instagram:
@elizandropacheco - WhatsApp:
+55 51 99871-8111
Este projeto é distribuído sob a licença Apache 2.0. Veja o arquivo LICENSE.
Nota: este é um resumo prático e não substitui a leitura do
LICENSE(nem é aconselhamento jurídico).
- Usar a stack/código para qualquer finalidade (inclusive comercial).
- Modificar (criar derivações/forks), inclusive “rebatizar” o seu fork e manter outro mantenedor.
- Redistribuir (publicar) o original ou versões modificadas (em código-fonte ou empacotado).
- Incluir uma cópia da licença Apache 2.0 quando redistribuir.
- Manter avisos de copyright/atribuição e notices existentes.
- Indicar mudanças: arquivos modificados devem conter aviso claro de que foram alterados.
- Se houver arquivo
NOTICEno futuro, reproduzir o conteúdo aplicável ao redistribuir.
- Usar marcas/nome/logotipos da NextHop Solutions (ou de terceiros) como se houvesse endosso/afiliações: a Apache 2.0 não concede licença de marca (ver “Trademarks” no
LICENSE). - Remover atribuições/avisos legais existentes do projeto original ao redistribuir.
Em outras palavras: sim, a Apache 2.0 permite você usar/alterar/redistribuir e até trocar o mantenedor do seu fork, desde que você cumpra as obrigações de atribuição/licença e não use marcas como se fossem permissão/endorso.
Para facilitar leitura, existe também o arquivo LICENSE.pt-BR.md (referência). Em caso de dúvida legal, use sempre o LICENSE (EN).