Назад | Перейти на главную страницу

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

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

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

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

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

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

Я работал с 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
        }

Есть много способов справиться с этим.

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

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