
Eu tenho um sistema de provisionamento configurando novos hosts para estarem no domínio test.domain.local, ou seja client44.test.domain.local
, e tenho um servidor Icinga que gostaria de monitorar automaticamente todos esses hosts usando regex, como *.test.domain.local
.
Todos os clientes receberão nagios-nrpe-server
o pacote (versão 2.13-3), que também está configurado para permitir que o icinga-server busque dados deles, e foi verificado que está funcionando.
Por enquanto vamos monitorar serviços/coisas que sabemos que todos os nós terão, por exemplo SSH, resposta ao ping etc.
eu olheiesse linkmas não entendo bem o relacionamento entre hosts, grupos de hosts e classes de serviço?
Tanto o servidor Icinga quanto todos os clientes executam Debian.
Responder1
Tenho trabalhado com fredmu nesse problema e encontrei uma solução funcional inspirada na resposta de Tim Brigham.
Usando a generic-host
definição padrão, isso pode ser resolvido usando um script que gera automaticamente arquivos de configuração de host com base em um modelo. Opcionalmente, isso poderia ser feito como um cronjob para gerar esses arquivos rotineiramente.
gerar_host_cfg.sh
#!/usr/bin/env bash
icinga_root="/etc/icinga/objects"
subnet="10.0.0.*"
template="template_icinga.cfg"
alias_file="alias.txt"
# navigate to the Icinga configuration directory
cd $icinga_root
# create first server alias if doesn't exist
if [ ! -e $alias_file ]; then
echo "1" > $alias_file
fi
# iterate through subnet, store "hostname:ip" in associative array
declare -A address
for host in $(nmap -sP $subnet | awk -F '[ ()]' '/for [a-z]+/ {print $5 ":" $7}'); do
address[$(echo $host | cut -d: -f1)]=$(echo $host | cut -d: -f2)
done
# iterate through hosts, create files if not exist based off template
for host in ${!address[@]}; do
host_file=${host}_icinga.cfg
if [ ! -e $host_file ]; then
# fetch new server alias
alias=$(cat $alias_file)
# create the next server alias
expr $alias + 1 > $alias_file
# create hostname_icinga.cfg if doesn't exist, based off template
cp $template $host_file
# replace contents of new template; hostname, alias and ip
sed -i -r \
-e "s/tmp-hostname/$host/" \
-e "s/tmp-alias/Server$alias/" \
-e "s/tmp-address/${address[$host]}/" $host_file
fi
done
template_icinga.cfg
define host{
use generic-host
host_name tmp-hostname
alias tmp-alias
address tmp-address
}
Resultando em arquivos como estes:
define host{
use generic-host
host_name monitor.company.local
alias Server1
address 10.0.0.1
}
Responder2
Existem muitas maneiras de lidar com isso.
Eu já montei scripts bash que seriam executados como uma única verificação de icinga. O script verificaria então todos os hosts no subdomínio e retornaria um estado com base em se ou quantas falhas foram encontradas.
Mais recentemente, tornei-me um fã de fatos personalizados em fantoches. Combinado com um modelo bem escrito, você pode facilmente adicionar seus cheques em um grande número de nós usando um loop for.