Eu implementei três soluções ligeiramente diferentes para o monitoramento do Nagios usando o Chef nos últimos 18 meses. Eles são todos baseados no recurso de modelo do Chef para gerar arquivos de configuração usando a sintaxe do ERB e esse bit funcionou muito bem. Você tem uma matriz Ruby ou um hash de hosts e serviços, e os arquivos de configuração do Nagios são gerados. É muito fácil testar e depurar.
-
Completamente configuração baseada em bolsa de dados . Nesse caso, há um pacote de dados
nagios_hosts
enagios_services
e cada host tem uma chave que informa quais verificações de serviço serão executadas, por exemplo,check_load
,check_disk
. Essa configuração é rápida e funciona razoavelmente bem, embora se os hosts forem excluídos ou os novos adicionados, alguém precise estar por perto para atualizar os pacotes de dados. Na prática, é fácil esquecer isso e as coisas podem ficar desatualizadas, o que pode causar problemas. - Configuração baseada no atributo do chef . Aqui, usei a API REST do Chef para consultar um ou mais servidores Chef para obter listas de nós e atribuir verificações de serviço a eles com base nas funções que foram designadas. Ter uma dependência do Chef significa que é difícil monitorar sistemas que não sejam do Chef, por exemplo, dispositivos, dispositivos de rede ou nós que não executam o Chef por qualquer motivo. O Chef acaba enviando uma quantidade enorme de dados JSON pela rede para um grande número de nós e processando todos esses dados coloca uma carga no (s) servidor (es) Chef, bem como no servidor Nagios quando gera arquivos de configuração.
- aplicativo Rails gerando arquivos de configuração do Nagios . Acabei quebrando a dependência do Chef, armazenando as informações de configuração do Nagios em um banco de dados e tendo um aplicativo Rails gerando os arquivos de configuração. Cada servidor Nagios faz uma solicitação REST e baixa seus arquivos de configuração que são gerados usando o ERB e um banco de dados MySQL. É um pouco de trabalho para conseguir isso, mas até agora está funcionando bem para monitorar os nós Chef e não-Chef.
Então, depois de passar por tudo isso, eu provavelmente recomendaria usar algo como a opção nº 2 para pequenas (dezenas a centenas) de nós. Eu tentaria e manteria isso simples. Eu usei o sistema de atributos do Chef para definir e substituir limites para as verificações de serviço com base em funções e, enquanto ele funciona, é muito complicado e o livro de receitas acabou se tornando uma bagunça inamovível.
Boa sorte!