Agregar todos los hosts en la subred al monitoreo de icinga sin especificar el nombre de host/IP

Agregar todos los hosts en la subred al monitoreo de icinga sin especificar el nombre de host/IP

Tengo un sistema de aprovisionamiento que configura nuevos hosts para que estén en el dominio test.domain.local, es decir client44.test.domain.local, y tengo un servidor Icinga que me gustaría monitorear automáticamente todos estos hosts usando expresiones regulares, como *.test.domain.local.

Todos los clientes recibirán nagios-nrpe-serverel paquete (versión 2.13-3), que también está configurado para permitir que el servidor icinga obtenga datos de ellos, y se ha verificado que funciona.

Por ahora solo vamos a monitorear servicios/cosas que sabemos que tendrán todos los nodos, por ejemplo SSH, respuesta al ping, etc.

he miradoeste enlace¿Pero no entiendo bien la relación entre hosts, grupos de hosts y clases de servicio?

Tanto el servidor Icinga como todos los clientes ejecutan Debian.

Respuesta1

He estado trabajando con fredmu en este problema y se me ocurrió una solución funcional inspirada en la respuesta de Tim Brigham.

Usando la definición predeterminada, generic-hostesto podría resolverse usando un script que genere automáticamente archivos de configuración del host basados ​​en una plantilla. Opcionalmente, se podría realizar como un cronjob para generar estos archivos de forma rutinaria.

generar_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

plantilla_icinga.cfg

define host{
        use                     generic-host
        host_name               tmp-hostname
        alias                   tmp-alias
        address                 tmp-address
        }

Dando como resultado archivos como estos:

define host{
        use                     generic-host
        host_name               monitor.company.local
        alias                   Server1
        address                 10.0.0.1
        }

Respuesta2

Hay muchas maneras de abordar esto.

Anteriormente, he ensamblado scripts de bash que se ejecutarían como una única verificación de icinga. Luego, el script verificaría todos los hosts en el subdominio y devolvería un estado basado en si se encontraron fallas o en cuántas.

Más recientemente me he vuelto fanático de los hechos personalizados en títeres. Combinado con una plantilla bien escrita, puede agregar fácilmente sus comprobaciones en una gran cantidad de nodos utilizando un bucle for.

información relacionada