Descoberta de devices Netbox

Descobrindo devices do netbox usando discovery lld e host prototypes no Zabbix

Peterson Basso
Zabbix Brasil
4 min readApr 28, 2022

--

O Netbox é uma ferramenta fantástica de IRM (Infrastructure Resource Modeling), permitindo modelar todos os recursos existentes em uma rede de computadores e seus relacionamentos, seu objetivo é ser a fonte da verdade da sua infraestrutura, exibindo exatamente o status atual dela, possui diversos recursos que possibilitam a integração com diversos sistemas externos, como: webhooks, API Rest e Graphql.

Para esse artigo vamos utilizar a API Graphql do netbox, iremos realizar a descoberta automática de devices cadastrados na ferramenta utilizando o recurso de LLD do Zabbix, criando de forma automática os protótipos de Hosts. Qualquer alteração realizada no netbox será automaticamente replicada para o Zabbix na próxima vez que a descoberta rodar.

Utilizaremos a API Graphql por ela permitir consultas mais complexas em uma única requisição, com ela podemos modelar como desejamos que o retorno seja realizado, definindo quais atributos e relacionamentos queremos, diferentemente da API Rest, onde precisaríamos consumir vários endpoints diferentes para obter a mesma resposta.

O testes realizados foram utilizando as versões Zabbix 6.0.3 e Netbox 3.2.1, possivelmente deve funcionar com outras combinações de versões, talvez seja necessário alguns ajustes.

Configurações iniciais

Vamos utilizar para nossos testes a instância demo do netbox, disponível em https://demo.netbox.dev/ lembrando que todo dia ela é recriada, então os resultados obtidos podem ser diferentes, se você quiser usar sua própria instância fique a vontade.

Primeiramente precisamos criar um token para utilizar nas consultas a API, nessa instância demo, muitas vezes já existem tokens criados por outros usuários, fique a vontade para copiar algum dos existentes ou criar o seu próprio.

Criando master item

Agora vamos para configuração do Zabbix, primeiramente vamos criar um item http para obter a lista de devices do Netbox, a configuração do item deve ser como nas imagens abaixo.

Esse item não precisa guardar histórico, servirá apenas para ser usado pela regra de descoberta.

No Header Authorization o valor insira o token copiado da interface de administração do Netbox. O Request body, é a query abaixo para obter a lista de devices e os principais relacionamentos.

{"query":"{\n device_list {\n id\n name\n status\n asset_tag\n tags {\n name\n }\n site{\n name\n }\n tenant{\n name\n }\n location{\n name\n }\n primary_ip4 {\n address\n }\n }\n}"}

Criando a regra de descoberta

Agora precisamos criar um regra de descoberta a partir desse item mestre, ela deverá ficar como nas imagens abaixo.

Observe que estamos filtrando apenas a criação de devices que possuem IP definido como principal e com status ACTIVE, a descoberta esta configurada para inserir automaticamente as tags do netbox para o device, nessa configuração até 5 tags, podendo aumentar esse número se necessário.

Após a configuração da regra de descoberta, precisamos configurar agora o protótipo de host, a configuração deverá ser realizada como na imagenm abaixo.

Usamos as macros LLD da regra de descoberta para definir o nome, estrutura de grupo e endereço IP do host.

Host name: {#DEVICE_NAME}

Group prototype: {#TENANT_NAME}/{#SITE_NAME}/{#LOCATION_NAME}

SNMP: {{#IP}.regsub(“(.*)/.*”,\1)}

Em group prototype estamos replicando a estrutura encontrada no netbox Tenant/Site/Location, no atributo SNMP estamos usando função de macro para extrair via regex somente o endereço IP, a API retorna o endereço IP em notação CIDR.

Limitações conhecidas

Até a versão 6 do Zabbix, não é possível editar a maioria das características de um host criado através de um protótipo, nem mesmo incluir um template específico manualmente é possível, para isso deverá ser utilizado o recurso de override, baseado em determinadas características dos devices descobertos é possível aplicar templates específicos. Esta no roadmap da 6.2 a issue ZBXNEXT-2088, onde irão implementar a possibilidade de incluir templates manualmente em hosts descobertos.

Conclusão

O resultado obtido é uma regra de descoberta LLD, que cria automaticamente devices cadastrados no netbox, filtrando somente aqueles devices que possuem IP primário configurado e com status ACTIVE, qualquer alteração no netbox também será automaticamente replicada para o Zabbix assim que a regra de descoberta rodar novamente, nesse cenário como optei por fazer a regra LLD como um dependente item, esse intervalo de tempo pode ser configurado no tempo de coleta do master item.

Devices criados a partir da regra de descoberta.

--

--