Добавление всех хостов в подсети в мониторинг icinga без указания имени хоста/IP

Добавление всех хостов в подсети в мониторинг icinga без указания имени хоста/IP

У меня есть система подготовки, которая настраивает новые хосты в домене test.domain.local, т. е. client44.test.domain.local, и у меня есть сервер Icinga, на котором я хотел бы автоматически отслеживать все эти хосты с помощью регулярных выражений, например *.test.domain.local.

Все клиенты получат nagios-nrpe-serverпакет (версия 2.13-3), который также настроен так, чтобы позволить серверу icinga извлекать из них данные, и его работоспособность была проверена.

Сейчас мы будем отслеживать только те службы/вещи, которые, как мы знаем, есть на всех узлах, например, SSH, ответ на ping и т. д.

Я посмотрел наэта ссылкано я не совсем понимаю связь между хостами, группами хостов и классами обслуживания?

И сервер Icinga, и все клиенты работают под управлением Debian.

решение1

Я работал с fredmu над этой проблемой и придумал работающее решение, вдохновленное ответом Тима Бригама.

Используя generic-hostопределение по умолчанию, это можно решить с помощью скрипта, который автоматически генерирует файлы конфигурации хоста на основе шаблона. По желанию это можно сделать как cronjob для генерации этих файлов на регулярной основе.

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
        }

В результате получаются такие файлы:

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

решение2

Есть много способов решить эту проблему.

Ранее я собирал скрипты bash, которые запускались как одна проверка icinga. Затем скрипт проверял все хосты в поддомене и возвращал состояние на основе того, были ли найдены сбои или сколько их было.

Совсем недавно я стал поклонником пользовательских фактов в puppet. В сочетании с шаблоном well writeb вы можете легко добавлять свои проверки по большому количеству узлов, используя цикл for.

Связанный контент