OSPF Watcher¶
O OSPF Watcher é uma ferramenta de monitoramento para mudanças de topologia OSPF. Ele escuta passivamente o plano de controle do OSPF — via adjacência GRE ou BGP-LS — e registra cada mudança e/ou a exporta (via Logstash ou Fluent Bit) para o ELK, o Zabbix, WebHooks e o painel de monitoramento do Topolograph. Tudo é distribuído como contêineres, então ele inicia rapidamente.

Eventos detectados¶
- Adjacência de vizinho OSPF Up/Down
- Mudanças de custo de enlace OSPF
- Redes OSPF aparecendo/desaparecendo
- Atributos de TE do OSPF (via LSA opaca ou BGP-LS): administrative group, largura de banda máxima do enlace, largura de banda máxima reservável, largura de banda não reservada, métrica padrão de TE e shared risk link group (SRLG)
- Mudanças de papel de nó do OSPF: um roteador se tornando (ou deixando de ser) um ABR (Area Border Router), um ASBR (AS Boundary Router), ou entrando/saindo do max-metric (RFC 3137 stub router — todos os enlaces de trânsito anunciados com a métrica máxima para desviar o tráfego de trânsito; o equivalente do OSPF ao overload bit do IS-IS)



Conectando-o¶
A conexão em si é configurada em Obtendo a topologia:
- Modo GRE — o FRR forma uma adjacência OSPF via um túnel GRE. Um filtro XDP para OSPF garante que o Watcher permaneça somente-escuta.
- Modo BGP-LS — o roteador exporta a
topologia OSPF via BGP-LS; o GoBGP + o encaminhador alimentam o Watcher.
Requer a imagem
vadims06/ospf-watcher:v3.1.0ou mais recente.
Compatibilidade
Mudanças de rede do OSPF aparecem no grafo do Topolograph a partir do topolograph v2.27 ou posterior.
Laboratório rápido (containerlab)¶
Um laboratório pronto em containerlab/frr01 permite observar mudanças de
OSPF sem nenhum hardware real:

Nesta configuração mínima, o Watcher imprime as mudanças de topologia em um arquivo de texto. Adicione o Topolograph e/ou o ELK para visualizá-las e pesquisá-las — veja a tabela de tamanhos de implantação.
Sem dispositivo? Modo de teste
Defina TEST_MODE=True para reproduzir uma LSDB de demonstração e
eventos de exemplo (perda de adjacência, mudança de métrica) de ponta a
ponta através do pipeline.
Formato do log de eventos¶
Os eventos do Watcher são linhas simples separadas por vírgula. Um evento de host (adjacência):
2023-01-01T00:00:00Z,demo-watcher,host,10.10.10.4,down,10.10.10.5,01Jan2023_00h00m00s_7_hosts,0,1234,192.168.145.5
10.10.10.5detectou que o host10.10.10.4, na interface com192.168.145.5, na área0/ AS1234, ficou down no timestamp.
Um evento de mudança de métrica:
2023-01-01T00:00:00Z,demo-watcher,network,192.168.13.0/24,changed,old_cost:10,new_cost:12,10.10.10.1,01Jan2023_00h00m00s_7_hosts,0.0.0.0,1234,internal,0
10.10.10.1detectou que a métrica da rede stub interna192.168.13.0/24mudou de10para12.
Um evento de mudança de flag de nó:
2023-01-01T00:00:00Z,demo-watcher,node,10.1.1.3,changed,attr:abr,old:0,new:1,10.1.1.3,01Jan2023_00h00m00s_7_hosts,0,1234
10.1.1.3se anunciou como um ABR (abr0→1). Um evento é emitido para cada flag alterada (abr,asbr,maxmetricpara o OSPF;overload,attachedpara o IS-IS). Entrar em max-metric também emite um eventometricpor enlace, já que o custo de todo enlace de trânsito salta para o máximo.
Esses registros são o que o Logstash/Fluent Bit encaminham para o ELK, o Zabbix e os Webhooks.
Modo somente-escuta (XDP)¶
No modo GRE, o Watcher executa uma instância real do FRR — então é crítico que ele nunca possa injetar prefixos no seu domínio OSPF. Um filtro XDP inspeciona toda mensagem OSPF que o FRR tenta enviar e descarta qualquer coisa que anuncie mais do que a própria rede do túnel GRE do Watcher.

Por exemplo, se 8.8.8.8/32 fosse acidentalmente redistribuído no
Watcher, a LSA 5 é descartada pelo XDP e nunca chega à rede. A mesma
proteção se aplica a mensagens Database Description e a redes stub extras
na LSA 1.
Comandos úteis:
# Watch XDP drop logs
sudo cat /sys/kernel/debug/tracing/trace_pipe
# Confirm the XDP program is attached to the Watcher's interface
ip l show dev it-vhost1025 # look for "prog/xdp id ..."
# Enable / disable the filter
sudo docker run -it --rm -v ./:/home/watcher/watcher/ --cap-add=NET_ADMIN \
-u root --network host vadims06/ospf-watcher:latest \
python3 ./client.py --action enable_xdp --watcher_num <num>
Solução de problemas¶
Modo GRE — confirme a adjacência:
Seu dispositivo deve aparecer como vizinho. Se não aparecer, execute o script de diagnóstico do Watcher (veja a seção de solução de problemas do repositório).
Modo BGP-LS — o Watcher envia para o Topolograph somente depois que a sessão BGP fica ativa. Verifique:
docker logs watcher<num>-bgpls-ospf-bgplswatcher
docker exec -it watcher<num>-bgpls-ospf-bgplswatcher gobgp neighbor
docker exec -it watcher<num>-bgpls-ospf-bgplswatcher gobgp global rib -a ls
Veja Sessão BGP-LS para o fluxo completo de verificação.
Relacionado: IS-IS Watcher · ELK / Kibana · Zabbix · Webhooks