
У меня есть система подготовки, которая настраивает новые хосты в домене 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.