Adicionando todos os hosts na sub-rede ao monitoramento icinga sem especificar hostname / IP

4

Eu tenho um sistema de provisionamento configurando novos hosts para estar 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 o pacote nagios-nrpe-server (versão. 2.13-3), que também é configurado para permitir que o servidor icinga obtenha dados deles, e isso foi verificado que está funcionando.

Por enquanto vamos apenas monitorar serviços / coisas que sabemos que todos os nós terão, por exemplo, SSH, resposta ao ping, etc.

Eu olhei para este link mas eu não entendo muito bem a relação entre hosts, grupos de hospedagem e classes de serviço?

Tanto o servidor Icinga quanto todos os clientes executam o Debian.

    
por fredmu 11.05.2014 / 17:04

2 respostas

2

Eu tenho trabalhado com fredmu neste problema e descobri um trabalho solução inspirada pela resposta de Tim Brigham.

Usando a definição padrão generic-host , isso pode ser resolvido usando o script que gera automaticamente arquivos de configuração de host baseados em um modelo. Opcionalmente, isso pode ser feito como um cronjob para gerar esses arquivos rotineiramente. base.

generate_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
        }
    
por 14.05.2014 / 13:47
1

Existem muitas maneiras de lidar com isso.

Eu já montei scripts bash que seriam executados como uma única verificação icinga. O script verificaria todos os hosts no subdomínio e retornaria um estado com base em se ou quantas falhas foram encontradas.

Mais recentemente, eu me tornei um fã de fatos personalizados em fantoches. Combinado com um modelo de writeb bem você pode facilmente adicionar suas verificações através de um grande número de nós usando um loop for.

    
por 12.05.2014 / 05:22

Tags